PackerでAMIを作る
awsいろんなプラットフォームのイメージを作ることができるツール。 これでfluentdのログサーバーのAMIを作る。
$ brew install packer # mac
$ packer -v
0.10.1
設定ファイルはこんな感じ。variables
の値は{{user ... }}
のところで使われる。
builders
に作るイメージの情報を書いて、provisioners
で環境を作る。
provisioners
にはchefやansibleなども指定できるが、
継ぎ足し継ぎ足しで秘伝のタレ化したAMIも最初は、コマンドいくつか実行するだけなのでとりあえず手作業で作った、後でなんとかするなんてものもあったりして、
そういうものは無理にchefなどで始めず、手軽にshellでpacker buildするといいと思う。
手作業よりも楽だしソースが別にあるので使われていないAMIを消すのも簡単。
fileではpermissionがないところに置くことができないので、一旦置いてshellで移動する。
{
"variables": {
"aws_access_key": "",
"aws_secret_key": ""
},
"builders": [{
"type": "amazon-ebs",
"access_key": "{{user `aws_access_key`}}",
"secret_key": "{{user `aws_secret_key`}}",
"region": "ap-northeast-1",
"source_ami": "ami-1a15c77b",
"instance_type": "t2.small",
"ssh_username": "ec2-user",
"ami_name": "fluentd-logserver {{timestamp}}"
}],
"provisioners": [{
"type": "file",
"source": "td-agent.conf",
"destination": "/home/ec2-user/td-agent.conf"
},
{
"type": "shell",
"inline": [
"curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh",
"sudo mv /home/ec2-user/td-agent.conf /etc/td-agent/td-agent.conf",
"sudo /etc/init.d/td-agent restart"
]
}]
}
$ packer validate fluentd-logserver.json
Template validated successfully.
buildのとき-var
でvariablesを渡すことができる。
$ packer build \
-var 'aws_access_key=YOUR ACCESS KEY' \
-var 'aws_secret_key=YOUR SECRET KEY' \
fluentd-logserver.json
これを実行すると実際にインスタンスを立ち上げ、AMIを作成し始める。