私はTerraformとPackerをよく使います。
しかしAutoScalingとLaunch Configurationの関係でいつも困ります。
卵が先か鶏が先かみたいな話で依存関係があります。
私はTerraformでLaunch Configurationを管理するのに疲れました。
そして別のアプローチ方法を取ることにしました。
それが今回作った、 packer-post-processor-amazon-launchconfiguration になります。
このプラグインはPackerのpost-processorの部分でLaunch Configurationを作成することができるプラグインです。
そしてオプションとしてAuto Scaling GroupのLaunch Configurationの値を更新することができます。
AMI作成 -> Launch Configuration作成 -> Auto Scaling Groupの更新が一つのJSONファイルで管理できます。
CIとも相性が良いように今後改善していきたいです。
Packerで管理することで変わること
TerraformとPackerを使った構成でよくある課題
- Packerで作成したAMIをtfファイルに反映させる方法
- UserData変わった際にLaunch Configurationが再作成されるが、Auto Scaling Groupとの依存関係
AMIは頻繁に更新した方がいいです。
OpenSSLの脆弱性とかあった際にはインスタンスの再起動がない場合、アップデートが反映されません。
気軽にLaunch Configurationは更新できるようにしておきたいです。
毎デプロイごとにAuto Scaling Groupを更新してもいいかもしれません。
Terraformで管理する場合はAMI作成 -> tfファイルにAMI反映という流れでしたが、その手間がなくなります。
使い方
こちらは基本的なAMI作成時のPackerのJSONです。
{
"builders": [{
"type": "amazon-ebs",
"vpc_id": "vpc-xxxxxxxxxx",
"subnet_id": "subnet-yyyyyyyyyy",
"region": "ap-northeast-1",
"source_ami": "ami-4af5022c",
"instance_type": "t2.micro",
"ssh_username": "ec2-user",
"ami_name": "my-service-{{timestamp}}"
}]
}
これに+αでこのような値を追加します。
{
"builders": [{
.
.
.
}],
"post-processors":[{
"type": "amazon-launchconfiguration",
"config_name_prefix": "my-service-",
"instance_type": "c4.large",
"keep_releases": 3
}]
こちらの設定を簡単に説明すると
- type
- plugin名
- config_name_prefix
- Launch ConfigurationのPrefix、Prefixの後ろに作成時日付が入る(例: my-service-20170911075353)
- instance_type
- 説明不要
- keep_releases
- Launch Configurationのrotateの設定、config_name_prefixの後ろを見て古い方から削除していく
Auto Scaling Groupの更新
Auto Scaling Groupの更新は追加でオプションをつけます。
"post-processors":[{
"type": "amazon-launchconfiguration",
"config_name_prefix": "my-service-",
"instance_type": "c4.large",
"keep_releases": 3,
"auto_scaling_group_names": [
"my-autoscaling-1",
"my-autoscaling-2"
]
}]
Pluginの導入方法
ここから自分にあった環境を拾ってきてください
https://github.com/a4t/packer-post-processor-amazon-launchconfiguration/releases
そしてPATHの通ったところに packer-post-processor-amazon-launchconfiguration を配置してください
~/.packer.d/plugins が最善かと思います。
おまけ
AMIもRotateしてどんどん削除した方がいいと思うので、こちらも使うといいかもしれません。
http://tech.sideci.com/entry/2016/08/18/130609
packer-post-processor-amazon-launchconfiguration
https://github.com/a4t/packer-post-processor-amazon-launchconfiguration