test-kitchenでAWS上にインスタンスを作成

Nオガワです。今回は、test-kitchenでAWS上にインスタンスを立てるとこまでをご紹介したいと思います。
次回以降、実際に簡単なテストコードを利用して、test-kitchenの使い方を説明できたらなと考えています。
[補足]ruby環境が必要となりますが、rubyの導入は割愛しています。
rubyの導入に関しては、私が利用している環境はCentOS7の環境を利用しておりこちらの記事
を参考にさせていただいています。
rbenvを利用することで、バージョンの切り替えが容易になります。

1. bundlerのインストール

$ gem install bundler

2. 必要なgemのインストール

$ vi ~/Gemfile
----------[以下の通り設定]----------
source "https://rubygems.org"
gem 'chef'
gem 'chef-dk'
gem 'test-kitchen'
gem 'kitchen-ec2'
gem 'berkshelf'
-------------[ここまで]-------------
$ bundle install

[補足]バージョンを指定していませんが、2018/03/31現在インストールされるバージョンは以下。
chef (13.8.5)
chef-dk (2.5.3)
test-kitchen (1.20.0)
kitchen-ec2 (2.2.1)
berkshelf (6.3.1)

3. cookbookの作成(blog_demoという名前のcookbook)

$ bundle exec chef generate cookbook blog_demo

4. driverにkitchen-ec2を指定

$ cd blog_demo
$ bundle exec kitchen init --driver=kitchen-ec2

5. OSの環境変数設定

$ export AWS_ACCESS_KEY_ID="アクセスキー"
$ export AWS_SECRET_ACCESS_KEY="シークレットアクセスキー"
$ export AWS_SSH_KEY_ID="キーペア"

[補足]アクセスキー、シークレットアクセスキー、キーぺアは環境に合わせて適宜修正。
上記のパラメータは、「.kitchen.yml」に変数として定義も可能です。「.kitchen.yml」で定義しない場合でも、test-kitchenで利用されます。

6. .kitchen.ymlの記載例

vi .kitchen.yml
----------[以下の通り設定]----------
---
driver:
name: ec2
region: ap-northeast-1
availability_zone: ap-northeast-1a
require_chef_omnibus: true
security_group_ids: セキュリティグループID
subnet_id: サブネットID
tags:
Name: kitchen_blog_demo
provisioner:
name: chef_solo
platforms:
- name: blog_demo
driver:
image_id: AMIのID
transport:
ssh_key: "秘密鍵の保存先"
suites:
- name: default
run_list:
- recipe[blog_demo::default]
attributes:
-------------[ここまで]-------------

[補足]セキュリティグループ、サブネット、AMI、秘密鍵は環境に合わせて適宜修正。

7. kitchen convergeの実行

$ bundle exec kitchen converge

[補足]今回の設定例では以下のようにタグのNameに「kitchen_blog_demo」が設定されたインスタンスが起動されます。
20180521.png

最後に

空のcookbookを利用してtest-kitchenでインスタンスを起動するところまで記載しました。
次回は、何かテストコードや構築コードを一例にあげて、test-kitchenをまったく知らない聞いたことがない
というような方に、すこしでもどういったものかを知っていただけるようにと思っております。
ありがとうございました。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA