5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PackerでLaunch Configuration作るPlugin書いた

Posted at

私は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

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?