この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
CloudFormationでEC2を構築するとき、AMI IDをどうやって保持するのか悩ましいです。
パラメータとして保持する?そうすると、リージョン毎にAMI IDは異なるので特定のリージョンでしか使えないCloudFormationテンプレートになってしまう。 Mappingsとして保持する?そうすると全リージョンの最新のAMI IDを記載するのがとてもめんどくさい。
そんなことを悩んでいたら、公開パラメータストアから最新のAMI IDを取得する方法を知ったのでやり方をご紹介いたします。
- 最新のECS-optimized AMI IDをParameter Storeから取得できるようになりました(Amazon Linuxもあるよ) | DevelopersIO
- AWS Systems Manager Parameter Store を使用して最新の Amazon Linux AMI IDを取得する | Amazon Web Services ブログ
公開パラメータストアからAMI IDを取得する
次のコマンドをAWS CLIで実行すると、最新のAmazon Linux2のAMI IDを取得できます。
$ aws ssm get-parameter \
--name /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 \
--region ap-northeast-1
{
"Parameter": {
"Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2",
"Type": "String",
"Value": "ami-0ff21806645c5e492",
"Version": 22,
"LastModifiedDate": 1567628887.33,
"ARN": "arn:aws:ssm:ap-northeast-1::parameter/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"
}
}
--query
オプションを使って、AMI IDの値だけ取り出してみます。
$ aws ssm get-parameter \
--name /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 \
--query "Parameter.Value" \
--region ap-northeast-1
"ami-0ff21806645c5e492"
マネジメントコンソールを見てみると、Amazon Linux 2のAMI IDと一致していて、問題なく取得できていそうです。
他のリージョンでも試してみると、そのリージョンにあったAMI IDが取得できていそうです。
$ aws ssm get-parameter \
--name /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 \
--query "Parameter.Value" \
--region us-east-1
"ami-0b69ea66ff7391e80"
$ aws ssm get-parameter \
--name /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 \
--query "Parameter.Value" \
--region us-west-2
"ami-04b762b4289fba92b"
パラメータストアを利用してCloudFormationテンプレートを作成する
SSMパラメータはCloudFormationのパラメータセクションから簡単に参照できます。 詳細は公式ドキュメントを参照ください。
具体的にCloudFormationテンプレートをあげると、次のように利用できます。
---
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
Ec2ImageId:
Type: AWS::SSM::Parameter::Value<String>
Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
Ec2InstanceType:
Type: String
Default: t3.nano
Resources:
SampleInstance:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref Ec2ImageId
InstanceType: !Ref Ec2InstanceType
CloudFormationでEC2を作成する
実際にCloudFormationでEC2を作成すると、公開パラメータストアで取得したAMI IDは、解決済みの値として参照することができます。
作られたEC2インスタンスを見てみても、問題なく最新のAmazon Linux 2のAMI IDで構築できていることが確認できます。
終わりに
公開パラメータストアを利用できることがわかって、CloudFormationにおいてEC2のAMI IDをどこに保存するか迷わなくなりました! CloudFormationでEC2を構築する際には、ぜひお試しください。