[アップデート] 検証された AMI ID のみを保管できる AWS Systems Manager パラメータストア aws:ec2:image データタイプが追加されました
2020.05.06 追記
アップデートリリースありました。私が見逃しておりました!!
・ Amazon EC2 now supports aliases for Amazon Machine Images (AMIs)
ドキュメント更新から見つけたのでシェアします。(まだ、アップデートリリースは見てない、、はず)
AWS Systems Manager の文字列パラメータストアに data-type
という新しい属性が追加され、有効な AMI ID のみを格納できるようになりました。
何がうれしいのか?
最初にこのリリースを見たとき「パラメータストアに AMI ID を渡して、SDK などで参照するだけでは?」と思いましたが、よくよく読んでみると便利な機能でした。
イメージ ID の指定にパラメータストアが指定できる
例えば ec2 run-instances
でイメージ ID を渡す場合に、--image-id resolve:ssm:<パラメータストア名>
という形で指定することが可能になりました。
従来であれば、パラメータストアに保管した値を aws ssm get-parameter
で取得して使う必要があったかと思いますが、パラメータストアを直接指定できるので非常にシンプルですね。
AMI ID が更新された場合、変更するのはパラメータストアのみです。自動化、手動オペレーションに関わらず、AMI ID の更新を意識する必要はなく、該当のパラメータストアを --image-id resolve:ssm:<パラメータストア名>
で指定すれば良いだけです。
有効な AMI ID であることを自動検証してくれる
新たに追加された aws:ec2:image
データタイプのパラメータストアは、単に文字列として AMI ID を保管するのではなく、指定された AMI ID が有効であるかどうかを自動的に検証したうえで、パラメータに保管してくれます。
つまり、無効な AMI ID を指定した場合、その値は自動的に破棄されるので、誤った AMI ID を保管することはありません。(検証に失敗した AMI ID を指定した場合、Cloudwatch Events でメッセージを受け取ることができます)
ただし、動作確認した限りでは検証されるのは登録時のみです。既に AMI ID として登録された AMI を削除しても、過去のバージョンに自動的に巻き戻ったりするものでは無い点は注意してください。
やってみる
検証環境
AWS CLI は最新にアップデートする必要があります。AWS CLI v2 でしたが、以下のバージョンでは利用できませんでした。
$ aws --version aws-cli/2.0.7 Python/3.7.4 Darwin/19.4.0 botocore/2.0.0dev11
アップデート後、以下のバージョンで利用できました。
$ aws --version aws-cli/2.0.11 Python/3.7.4 Darwin/19.4.0 botocore/2.0.0dev15
パラメータストアの保管
--type String
のパラメータストアのみ --data-type
属性が利用できます。AMI ID タイプを使用する場合、aws:ec2:image
と指定します。今回は amzn2-ami-hvm-2.0.20200207.1-x86_64-ebs(ami-0289fbf73734505e2)
を検証に利用しました。
$ aws ssm put-parameter --name TestAMI --value ami-0289fbf73734505e2 \ --type String --data-type aws:ec2:image Tier: Standard Version: 1 $ aws ssm get-parameter --name TestAMI Parameter: ARN: arn:aws:ssm:ap-northeast-1:XXXXXXXXXXXX:parameter/TestAMI LastModifiedDate: '2020-05-06T10:33:50.898000+09:00' Name: TestAMI Type: String Value: ami-0289fbf73734505e2 Version: 1
無効な AMI ID を指定
例えば先程の AMI ID の最後の桁 を 3 に変更し、存在しない無効な AMI ID ami-0289fbf73734505e3
を指定して値を上書きしてみます。
$ aws ssm put-parameter --name TestAMI --value ami-0289fbf73734505e3 --overwrite Tier: Standard Version: 2
すると、CloudWatch Event で以下のように Unable to Describe Resource
という失敗メッセージが報告されました。
{ "version": "0", "id": "0265da57-e2ab-5819-ee77-7405ae568656", "detail-type": "Parameter Store Change", "source": "aws.ssm", "account": "XXXXXXXXXXXX", "time": "2020-05-06T02:17:31Z", "region": "ap-northeast-1", "resources": [ "arn:aws:ssm:ap-northeast-1:XXXXXXXXXXXX:parameter/TestAMI" ], "detail": { "exception": "Unable to Describe Resource", "dataType": "aws:ec2:image", "name": "TestAMI", "type": "String", "operation": "Update" } }
コマンド発行時、Version: 2
と表示されていますが、更新に失敗しているためバージョンは変更されなかったことが判ります。
$ aws ssm get-parameter --name TestAMI Parameter: ARN: arn:aws:ssm:ap-northeast-1:XXXXXXXXXXXX:parameter/TestAMI LastModifiedDate: '2020-05-06T10:33:50.898000+09:00' Name: TestAMI Type: String Value: ami-0289fbf73734505e2 Version: 1
有効な AMI ID を指定
次に有効な AMI ID として amzn2-ami-hvm-2.0.20200406.0-x86_64-gp2(ami-0f310fced6141e627)
を指定します。
$ aws ssm put-parameter --name TestAMI --value ami-0f310fced6141e627 --overwrite Tier: Standard Version: 2 $ aws ssm get-parameter --name TestAMI Parameter: ARN: arn:aws:ssm:ap-northeast-1:XXXXXXXXXXXX:parameter/TestAMI DataType: aws:ec2:image LastModifiedDate: '2020-05-06T11:40:57.923000+09:00' Name: TestAMI Type: String Value: ami-0f310fced6141e627 Version: 2
今度は正常に値が置き換えられ、Version: 2
に変わったことが確認できました。
パラメータストアを指定して EC2 を起動
AMI ID データタイプのパラメータストアを参照して、EC2 を起動します。以下のように --image-id resolve:ssm:<パラメータ名>
で指定可能です。
$ aws ec2 run-instances \ > --image-id resolve:ssm:TestAMI \ > --count 1 \ > --instance-type t3.nano \ > --key-name cm_marumo.atsushi \ > --security-groups default
起動された EC2 の情報を確認すると、パラメータストアに格納されている AMI ID ami-0f310fced6141e627
が利用されたことが判ります。
$ aws ec2 describe-instances Reservations: - Groups: [] Instances: - AmiLaunchIndex: 0 Architecture: x86_64 BlockDeviceMappings: - DeviceName: /dev/xvda Ebs: AttachTime: '2020-05-06T02:44:07+00:00' DeleteOnTermination: true Status: attached VolumeId: vol-0a7554d54f797f72f CapacityReservationSpecification: CapacityReservationPreference: open ClientToken: '' CpuOptions: CoreCount: 1 ThreadsPerCore: 2 EbsOptimized: false EnaSupport: true HibernationOptions: Configured: false Hypervisor: xen ImageId: ami-0f310fced6141e627 InstanceId: i-0553b8a94b57a9075 InstanceType: t3.nano (後略)
検証は以上です!
さいごに
文字列パラメータに data-type
という新しい属性が追加され、まずは AMI ID タイプが追加されました。新たに data-type
という属性を設けたことを考えると、今後、AMI ID 同様にデータタイプが追加されていくのかな? と期待してしまいますね。
これまでパラメータストアは値を保管するだけの「箱」という印象でしたが、data-type
の追加によって、「AMI ID の有効性の検証」など、単なる文字列の保管にとどまらないパラメータストアの新たな可能性を感じるアップデートですね!
以上!大阪オフィスの丸毛(@marumo1981)でした!