最新のAMI IDを取得するために、Systems Manager(以下、SSM)のパブリックパラメータが利用できそうなので試してみた。
はじめに結論
aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64 --query 'Parameters[].Value' -- output text
Terraformの場合
data "aws_ssm_parameter" "linux_latest" { name = "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64" } output "linux_latest" { value = data.aws_ssm_parameter.linux_latest.id }
やってみた
AWSドキュメントのこのあたりを参考にする。
aws ssm get-parameters-by-path
コマンドで、SSMのパブリックパラメータが取得できるとのこと。
利用できるパブリックパラメータは、オプションに--path /aws/service/list
を加えることで確認可能。
入力
aws ssm get-parameters-by-path --path /aws/service/list
出力
{ "Parameters": [ ### 割愛 ### { "Name": "/aws/service/list/ami-windows-latest", "Type": "String", "Value": "/aws/service/ami-windows-latest/", "Version": 1, "LastModifiedDate": "2021-03-12T08:07:38.727000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1::parameter/aws/service/list/ami-windows-latest", "DataType": "text" }, ### 割愛 ### { "Name": "/aws/service/list/ami-amazon-linux-latest", "Type": "String", "Value": "/aws/service/ami-amazon-linux-latest/", "Version": 1, "LastModifiedDate": "2021-03-12T08:07:37.393000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1::parameter/aws/service/list/ami-amazon-linux-latest", "DataType": "text" } ] }
特定のパブリックパラメータを確認するには、パスからlistを削除する。例えば/aws/service/list/ami-amazon-linux-latestであれば、/aws/service/ami-amazon-linux-latestになる。また、AWS CLIはJMETHPathに従ったクエリが利用可能。
入力
aws ssm get-parameters-by-path --path /aws/service/ami-amazon-linux-latest --query 'Parameters[].Name'
出力
[ "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-arm64", "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64", "/aws/service/ami-amazon-linux-latest/al2023-ami-minimal-kernel-6.1-arm64", "/aws/service/ami-amazon-linux-latest/al2023-ami-minimal-kernel-6.1-x86_64", "/aws/service/ami-amazon-linux-latest/al2023-ami-minimal-kernel-default-arm64", "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-gp2", "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-s3", "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-ebs", "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2", "/aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-hvm-x86_64-ebs", "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64", "/aws/service/ami-amazon-linux-latest/al2023-ami-minimal-kernel-default-x86_64", "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-ebs", "/aws/service/ami-amazon-linux-latest/amzn-ami-minimal-hvm-x86_64-s3", "/aws/service/ami-amazon-linux-latest/amzn-ami-minimal-pv-x86_64-s3", "/aws/service/ami-amazon-linux-latest/amzn-ami-pv-x86_64-s3", "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-arm64-gp2", "/aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-hvm-arm64-gp2", "/aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-hvm-x86_64-gp2", "/aws/service/ami-amazon-linux-latest/amzn2-ami-minimal-hvm-arm64-ebs", "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-arm64", "/aws/service/ami-amazon-linux-latest/amzn-ami-minimal-hvm-x86_64-ebs", "/aws/service/ami-amazon-linux-latest/amzn-ami-minimal-pv-x86_64-ebs", "/aws/service/ami-amazon-linux-latest/amzn-ami-pv-x86_64-ebs", "/aws/service/ami-amazon-linux-latest/amzn2-ami-minimal-hvm-x86_64-ebs" ]
これまでの経験から、おそらくはもっとも普遍的なAMIかと勝手に思っているため、「/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-arm64」のAMI IDを取得することにする。最下層のパラメータへアクセスする際は、get-parameters-by-path --path
ではなく、get-parameters --name
を使う。
入力
aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64 --query 'Parameters[].Value' -- output text
出力
ami-031134f7a79b6e424
terraformの場合は、data句aws_ssm_parameerを使う。
入力
data "aws_ssm_parameter" "linux_latest" { name = "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64" } output "linux_latest" { value = data.aws_ssm_parameter.linux_latest.id }
出力
Changes to Outputs: + linux_latest = "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64"