ようへいの日々精進XP

よかろうもん

ゴールデンウィークは終わったけど Packer で SSM Parameter Store に AMI ID を登録するプラグインを作った

tl;dr

皆さん, パカパカパッカーしてますか.

先日に引き続き, Packer で作った EC2 AMI ID を SSM Parameter Store に登録する Post Processor プラグインを作ったので自慢させて下さい.

packer-post-processor-aws-parameter-store

リポジトリ

github.com

Packer テンプレート

パカパカ Packer のテンプレートは以下のような感じになります.

{
  "variables": {
... 略 ...
  },
  "builders": [
... 略 ...
  ],
  "provisioners": [
... 略 ...
   ],
  "post-processors": [
    [
      {
        "type": "aws-parameter-store",
        "parameters": [
          {
            "name": "/my/ami/ami1"
          },
          {
            "name": "/my/ami/ami2",
            "ami_data_type": true
          },
          {
            "name": "/my/ami/ami3",
            "secure_string": true
          }
        ]
      }
    ]
  ]
}

name はパラメータ名を指定します. name のみを指定した場合には, String タイプで登録されます. ami_data_typetrue で指定した場合には, aws:ec2:image データタイプで登録されます. aws:ec2:image データタイプの有用性については, 以下の記事で紹介されていますのでご一読下さい.

dev.classmethod.jp

また, secure_stringtrue に指定することで, SecureString タイプで登録が可能となります.

以下は実行例です.

$ packer build sample.json
amazon-ebs: output will be in this color.

==> amazon-ebs: Prevalidating any provided VPC information
==> amazon-ebs: Prevalidating AMI Name: packer-sample-1588773879
... 略 ...
==> amazon-ebs: Connected to SSH!
==> amazon-ebs: Running local shell script: /var/folders/w_/w3rfn_250g7803h_hkk90jfw0000gn/T/packer-shell172250629
    amazon-ebs: shell-local
==> amazon-ebs: Provisioning with shell script: /var/folders/w_/w3rfn_250g7803h_hkk90jfw0000gn/T/packer-shell497132425
    amazon-ebs: shell
==> amazon-ebs: Stopping the source instance...
    amazon-ebs: Stopping instance
... 略 ...
==> amazon-ebs: Running post-processor: aws-parameter-store
==> amazon-ebs (aws-parameter-store): Register the AMI ID to Parameter Store.(Parameter Name: /my/ami/ami1, AMI ID: ami-xxxxxxxxxxxxxxxxxxx)
==> amazon-ebs (aws-parameter-store): Register the AMI ID to Parameter Store.(Parameter Name: /my/ami/ami2, AMI ID: ami-xxxxxxxxxxxxxxxxxxx)
==> amazon-ebs (aws-parameter-store): Register the AMI ID to Parameter Store.(Parameter Name: /my/ami/ami3, AMI ID: ami-xxxxxxxxxxxxxxxxxxx)

パラメータストアを確認すると, 以下のように登録されていることが確認出来ました.

$ pstore -prefix=/my/ami
+--------------+-----------------------+--------------+---------------+---------+---------------------+
|     NAME     |         VALUE         |     TYPE     |   DATATYPE    | VERSION |  LASTMODIFIEDDATE   |
+--------------+-----------------------+--------------+---------------+---------+---------------------+
| /my/ami/ami1 | ami-xxxxxxxxxxxxxxxxx | String       | text          |       1 | 2020-05-09 12:48:43 |
| /my/ami/ami2 | ami-xxxxxxxxxxxxxxxxx | String       | aws:ec2:image |       1 | 2020-05-09 12:48:44 |
| /my/ami/ami3 | ******************    | SecureString | text          |       1 | 2020-05-09 12:48:44 |
+--------------+-----------------------+--------------+---------------+---------+---------------------+

以上

個人的な HashiCorp 祭りでした.

おまけ

Parameter Store をコマンドラインで操作する pstore というツール作っていますが, ちょっと修正したので v0.0.2 をリリースしました.

github.com