5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OpsWorksで構成するEC2のレシピを事前に確認したい

Last updated at Posted at 2014-08-19

目的

表題そのままです。

テストのために用意する環境

  • chef-solo (11.14.2)
  • vagrant (1.4.3)
  • kitchen-ec2 (0.8.0)
  • kitchen-vargrant (0.15.0)
  • test-kitchen (1.2.1)
  • serverspec

構築環境

  • OS X 10.9.4 (Marvericks)
  • Mem 8GB
  • CPU 2.6GHz Intel Core i5

前提条件

  • rubyがインストール済み
  • vagrantが導入済み

セットアップ

構成としては、chef-repoを用意して、そこで作成したレシピをtest-kitchenで実行したい。
まず、適当なディレクトリをchef-repoとして作成する。

KitchenCIのGuideを例に作成してみる。

$ mkdir git-cookbooks
$ cd git-cookbooks

カレントディレクトリに移動したら、Gemfileを作成する。
knifeとtest-kitchenをインストールします。

source "https://rubygems.org"

# knife
gem 'knife-solo'

gem 'berkshelf'
gem 'foodcritic'
gem 'rubocop'
gem 'busser'
gem 'serverspec'
gem 'dotenv'

# test-kitchen
gem 'test-kitchen'
gem 'kitchen-vagrant'
gem 'kitchen-ec2'

bundleでインストールします。

$ bundle install --binstubs=bin --path=vendor/bundle 

Kitchenの初期化とChefリポジトリの初期化

kitchenを初期化してみます。

$ bundle exec kitchen init

これで、.kitchen.ymlファイルが作成されます。
さらに、chef-repoとして、カレントディレクトリも初期化したいと思います。

$ bundle exec knife solo init .

これで、レシピを作成する準備が整いました。

これからは、Getting Started Guideに従って作業を進めてみます。
ただし、gitへのコミットなどは省略してます。

レシピの作成

metadata.rbファイルをカレントディレクトリへ作成します。

metadata.rb
name "git"
version "0.1.0"

ここでは、レシピは慣例通り、site-cookbooks以下にgitという名前で作成し、レシピファイルを作成する。

$ bundle exec knife cookbook create git -o site-cookbooks/
$ touch site-cookbooks/git/recipe/default.rb

ここで一旦、.kitchen.ymlファイルの編集へ移ります。
このファイルでEC2インスタンスの作成に関する設定を行います。
ファイルの内容については、kitchen-ec2のサイトを参照してください。

.kitchen.yml
driver:
  name: ec2
  aws_access_key_id: <%= ENV['AWS_ACCESS_KEY'] %>
  aws_secret_access_key: <%= ENV['AWS_SECRET_KEY'] %>
  aws_ssh_key_id: [key pair]
  ssh_key: /path/to/your_ec2.pem
  security_group_ids: ["sg-xxxxxx"]
  region: ap-northeast-1
  availability_zone: [zone name]
  flavor_id: t2.micro
  require_chef_omnibus: true
  ebs_delete_on_termination: true

provisioner:
  name: chef_solo

platforms:
  - name: AmazonLinux-201403
    driver:
      image_id: ami-29dc9228
      username: ec2-user
      tags:
        Name: test-kitchen

suites:
  - name: default
    run_list:
      - recipe[git::default]	# <-- ここをかえてある。
    attributes:

ERB形式で置換が行えるので一部環境変数から取得するようにしてあります。
これでEC2インスタンスの作成が行えるようになります。

インスタンスの起動の前に確認

$ bundle exec kitchen list
Instance                   Driver Provisioner Last Action
default-AmazonLinux-201413 Ec2    ChefSolo    <Not Created>

まだ、作成されていないのを確認できました。
で、インスタンスを起動します。

$ bundle exec kitchen create
----> Starting Kitchen(v1.2.1)
----> (省略)
:
:
----> Kitchen is finished. (1m28.19s)

とうい具合にメッセージが表示されれば、インスタンスの起動に成功です。

レシピの編集

gitを導入するレシピを作成する

reciepes/default.rb
package 'git'

log "Well, that was too easy"

レシピの実行

テスト用インスタンスへレシピを適用します。

$ bundle exec kitchen converge
-----> Starting Kitchen(v1.2.1)
-----> Converging <default-AmazonLinux-201403>...
;
:
-----> Kitchen is finished. (2m4.22s)

こんな感じでメッセージが表示されればOK。
更に、コマンドで確認してみると

$ bundle exec kitchen list
Instance                   Driver Provisioner Last Action
default-AmazonLinux-201413 Ec2    ChefSolo    Converged

Convergedとなっている。

サーバで確認

サーバにログインしてみて、実際にレシピが適用されているのを確認。

$ bundle exec kitchen login default-AmazonLinux-201403

# which git
/usr/bin/git
# git --version
git version 1.7.9.5

これで一通りの確認が出来ると思います。
これ以降、ServerSpecなどでサーバのテストを書いていきます。

参考リンク

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?