Opsworksのcookbookをtest-kitchenでテストする
AWS OpsworksでChefのcookbookを使うことができる訳ですが
Opsworks単体ではテストツールが無くcookbookを練り込むのがそこそこ手がかかります。
※Opsworksを使うまでは以下を参考にしてみてください。
http://blog.enokawa.co/2016/05/14/opsworks-codecommit/
Opsworksでは標準のchefとは異なる独自の手法でcookbookを実行していますがtest-kitchenでテストしたcookbookも使いまわせます。
ですので、chefのテストツール、test-kitchenを使えば数行のコマンドでEC2を起動してcookbookのテストを走らせる事ができます。
効率よくrecipeを書いていくためにもtest-kitchenを利用するのが良いかと思います。
環境
クライアントPC
- OS: Mac OS X
- chefdk : 0.13.21(latest)
EC2:
- OS: Amazon Linux 201603
- Chef: 12.10(latest)
準備
install chefdk
cookbookの開発ツールchefdkをインストールしましょう。
$ brew cask install chefdk
cookbook作成
$ chef generate cookbook hello-chef
必要なディレクトリやファイルが作成されます。
$ cd hello-chef
$ kitchen init --driver=kitchen-ec2
ドライバーを指定するとgemが勝手にkitchen-ec2をインストールしてくれます。
test kitchenの設定
.kitchen.yml
テストに関して、共有する情報を記載する。
---
driver:
name: ec2
shared_credentials_profile:
aws_ssh_key_id:
region:
subnet_id:
associate_public_ip: true
iam_profile_name:
security_group_ids:
availability_zone:
require_chef_omnibus: true
transport:
ssh_key:
username: ec2-user
provisioner:
name: chef_zero
platforms:
- name: AmazonLinux-201603
driver:
image_id: ami-29160d47
suites:
- name: default
run_list:
- recipe[hello-chef::default]
attributes:
.kitchen.local.yml
他人と共有しない自身のテスト環境について記載する
---
driver:
name: ec2
shared_credentials_profile: default
aws_ssh_key_id: aws-miso4ru_ap-northeast-1
region: ap-northeast-1
subnet_id: subnet-e571de92
associate_public_ip: true
iam_profile_name: test-kitchen
security_group_ids: ["sg-4c4d2029"]
availability_zone: ap-northeast-1a
require_chef_omnibus: true
transport:
ssh_key: ~/.ssh/aws-miso4ru_ap-northeast-1.pem
username: ec2-user
shared_credentials_profileは ~/.aws/credentials
に記載されてるprofileを指定すればOKです。
kitchen-ec2を使った時の.kitchen.yml
の具体的な書き方は以下を参考にすると良いと思います。
https://github.com/test-kitchen/kitchen-ec2
テスト開始
テストのやり方とか出来ることとかは以下を参考にすると良いと思います。
http://qiita.com/eielh/items/64e197f4f1eaf5ff6097
テストの状態表示
$ kitchen list
Instance Driver Provisioner Verifier Transport Last Action
default-AmazonLinux-201603 Ec2 ChefZero Busser Ssh <Not Created>
インスタンス作成
$ kitchen cretae
cookbook 実行
$ kitchen converge
ざっくりこんな感じでテストできます。
EC2にログインして確認するには
$ kitchen login
で入れます。
serverspec等でテストを記載していたら
$ kitchen verify
テスト終わったらgit pushで上げて、Opsworkに食わせれば良いと思います。
後片付けとしてEC2も消しておきましょう。
$ kitchen destroy
その他 tips
foodcriticを使ってスタイルチェック
chefdkに同梱されてるコードスタイルのチェックツール
使い方は単純、cookbookのパスを引数にして実行するだけ
foodcritic [cookbook-path]
空白が返ってくればOK,何か言われたら以下を参考に修正するとよし。
http://www.foodcritic.io/
なお、foodcriticのデフォルトだと、supermakrtにアップロードする際のチェックが入る。
公開しないcookbookなら除外したほうが良い。
cookbookの直下に .foodcritic を作成して以下を記載すればOK。
~FC064
~FC065
参考
http://qiita.com/eielh/items/64e197f4f1eaf5ff6097
https://github.com/test-kitchen/kitchen-ec2
https://jjasghar.github.io/blog/2014/02/17/dot-kitchen-dot-local-dot-yml-and-when-you-want-to-use-it/
Author And Source
この問題について(Opsworksのcookbookをtest-kitchenでテストする), 我々は、より多くの情報をここで見つけました https://qiita.com/shiru/items/e4976692ffa1d31e780a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .