猫キック

IT関連について投稿

【Terraform】 SSMのパブリックパラメータを利用して最新のAMI IDを自動取得する

最近、「正確さ」をあんまり必要としないように仕組みを色々整えようと思う私です。

そんなわけで検証とかでインスタンスたてる際、AmazonLinuxなどのパブリックAMIの最新のAMI IDを自動取得してapplyまで実施するようにしたいと思います。めんどくさい作業は極力減らしたい。

商用利用だとそもそもプライベートAMIを利用するので利用する場面は少ない。 プライベートAMIの場合は、付与されてるタグを対象にフィルターすることでで最新AMI IDを取得可能だが、それについては後日。。

AMI ID確認方法

AMI IDを確認する方法として、1:ec2コマンド, 2:SSMパラメータストア(パブリックパラメータ) の2種類がある。

EC2を利用した確認方法

ec2 describe-imagesを実行すると取得できる。

# Amazonが提供している最新のパブリックイメージを取得
aws ec2 describe-images --owners amazon \
    --filters Name=architecture,Values=x86_64 \
        Name=root-device-type,Values=ebs \
        Name=virtualization-type,Values=hvm

SSMパラメータストア(パブリックパラメータ)からの確認方法

パラメータストアからも 最新のAMIIDを確認することが可能。詳しくはこちら。 最新AMIは、Public Parametersとしてパラメータストアとして予め公開されている。

他にもECS、EKSやAWSサービスのリージョンやエンドポイントについてのあれこれがパブリックパラメータサポートされている

Public ParametersでAMIの一覧を確認するには以下のコマンドを実行することで、PATHとAMI IDを確認することができる

# 最新のAMI取得 (Amazon Linux )
aws ssm get-parameters-by-path \
    --path /aws/service/ami-amazon-linux-latest/ \
    --query 'Parameters[*].{Name:Name,Value:Value}'

# 最新のAMI取得 (Windows Server )
aws ssm get-parameters-by-path \
    --path /aws/service/ami-windows-latest/ \
    --query 'Parameters[*].{Name:Name,Value:Value}'

パブリックパラメーターの一覧を取得するには以下のコマンドを利用する

aws ssm get-parameters-by-path --path /aws/service/list

# appmeshについて確認
aws ssm describe-parameters --parameter-filters "Key=Name, Option=BeginsWith, Values=/aws/service/list/appmesh"

TerraformによるAMI自動取得

data属性でパブリックパラメータを取得し、outputを変数として定義。

# パラメータストア値を参照
data "aws_ssm_parameter" "ami-amzn2" {
  name = "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"
}


resource aws_instance amzn2 {
    ami = data.aws_ssm_parameter.ami-amzn2.value
        :
        
}

これで、最新のAMI IDを手動入力して実行する必要はなくなります。