packer で EC2 AMI を作っていて、色々と面倒な部分を Rakefile に落とし込んでみた。
- packer を叩いてイメージの build
- 作成されたインスタンスイメージでインスタンス起動
- 起動したインスタンスに対して Serverspec を使ってテスト
git clone https://github.com/inokappa/packer-operation.gitconfig.sample.yml を参考に各種情報を事前に設定する。
access_key_id: 'AKxxxxxxxxxxxxxxxxxxxxx'
secret_access_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
region: 'us-east-1'
user: "root"
key_path: "/pat/to/file.pem"
instance_type: "t2.micro"
vpc_subnet: "subnet-xxxxxxxx"
security_group: "sg-xxxxxxx"
key_name: "file"
tag_name: "instance_name"
image_tag_name: "ami_name"
user_data_path: "userdata.txt"適当なディレクトリを作成する。
mkdir ~/path/toディレクトリ配下に Packer 用の template ファイルや provisioner する為のファイルを置く。
cd ~/path/to
vim example.jsonインスタンスをテストする Serverspec 用の spec ファイルを作っておく。
cd spec_linux
vim check_spec.rbこのファイルは rake genspec:linux を実行するとインスタンスのホスト名ディレクトリ以下に生成される。
cd spec_win
vim check_spec.rbこのファイルは rake genspec:win を実行するとインスタンスのホスト名ディレクトリ以下に生成される。
PACKER_TEMPLATE_PATH=~/path/to/example.json
rake buildrake build # Build Image
rake ec2:getpw # Get logon Password
rake ec2:launch # Launch EC2 instances
rake ec2:terminate # Terminate Instance
rake genspec:linux # Generate Spec File
rake genspec:win # Generate Spec File
packer build を実行して AMI を生成する。
PACKER_TEMPLATE_PATH=~/path/to/example.json
rake build生成した AMI を使ってインスタンスを作成する。
rake launchWindows Server のパスワードを取得する。
rake ec2:getpw作成されたインスタンス用 Serverspec の Spec ファイルを生成 。
rake genspec:linux
rake genspec:winインスタンスのテスト。
rake specインスタンスのターミネート。
rake ec2:terminate