とは言えまだ Packer の使い方もよくわからないので GETTING STARTED に従ってやってみる。
http://www.packer.io/intro/getting-started/build-image.html
GETTING STARTED では Redis がプリインストールされた Amazon EC2 AMI を作成する模様。
イメージのビルドに t1.micro インスタンスを使うので AWS アカウントが必要。
Packer がビルドするために使う設定ファイルは、テンプレートと呼ばれる模様。テンプレートは以下(example.json)
{
"variables": {
"aws_access_key": "",
"aws_secret_key": ""
},
"builders": [{
"type": "amazon-ebs",
"access_key": "{{user `aws_access_key`}}",
"secret_key": "{{user `aws_secret_key`}}",
"region": "us-east-1",
"source_ami": "ami-de0d9eb7",
"instance_type": "t1.micro",
"ssh_username": "ubuntu",
"ami_name": "packer-example {{timestamp}}"
}]
}
aws_access_key と aws_secret_key はテンプレートの中に書かず、ユーザ変数で渡すべしとのこと。
テンプレートの builders セクションはビルダーの設定で、この場合 amazon-ebs というビルダーが使用される模様。
amazon-ebs はソース AMI から EBS-backed AMI をビルドしてプロビジョニングを行い、新しい AMI にリパッケージングするとある。
目標は VirtualBox のイメージを作成することだけど、 VirtualBox 用のビルダーはきっとあって、
それを導入すればあとはテンプレートを作成すればいいのではないかと予想。多分。
packer validate でテンプレートの内容をチェック。
packer validate example.json
以下のとおり良好。
Template validated successfully.
packer build でイメージのビルド。 aws_access_key と aws_secret_key は伏せますです。
packer build -var 'aws_access_key=xxxxxxxxxxxxxxxxxxxx' \
-var 'aws_secret_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
example.json
実行し終えると以下なメッセージが末尾に、
==> Builds finished. The artifacts of successful builds are:
--> amazon-ebs: AMIs were created:
us-east-1: ami-eb998182
EC2 Dashboard で US East に切り替え、 AMI(ami-eb998182) の登録を確認。早速 Launch してみる。
SSH ログインは以下、
ssh ec2-54-237-228-42.compute-1.amazonaws.com -lubuntu \
-i ~/.keypairs/use-packer-NVirginia_us-east-1.pem
問題なくログインできる。
EC2 Dashboard をみると、作成した覚えのないインスタンスがすでにターミネートされている。
名前は Packer Builder 。
これは Packer がイメージのビルドのためソース AMI からインスタンス起動した痕跡かと。
ソース AMI からコピーして新しいイメージを作ることができましたということで、ひとまず成果あり。
次の機会に、以下なエントリを参考に何かをプリインストールしたイメージの作成にトライしてみます。
http://www.packer.io/intro/getting-started/provision.html