Amazon Web Services ブログ

AWS Systems Manager Parameter Store を使用して最新の Amazon Linux AMI IDを取得する

最新の Amazon Linux AMI を取得するシンプルな方法が必要ですか? AWS Systems Manager Parameter Store はすでに最新の Windows AMI を取得できます。今回、最新の Linux AMI も取得できるよう機能が拡張されました。各 Amazon Linux AMI は、固有の 公開パラメータストア名前空間 を持ちます。AMIの名前空間をクエリすることで、指定したリージョンのイメージIDを得ることができます。

AMI パラメータストアの名前空間は2つのパートから構成されます:

  • パラメータストア プレフィクス (ツリー): /aws/service/ami-amazon-linux-latest/
  • AMI 名エイリアス: (例) amzn-ami-hvm-x86_64-gp2

AMI 名エイリアスを指定するには、Amazon Linux の公開 AMI 名を取得し、そこから日付ベースのバージョン識別子を削除することで得られます。公開 AMI 名は以下のように Amazon EC2 にクエリすることで確認できます。

AWS CLI:

aws ec2 describe-images --owners amazon --filters "Name=name,Values=amzn*" --query 'sort_by(Images, &CreationDate)[].Name'

PowerShell:

Get-EC2ImageByName -Name amzn* | Sort-Object CreationDate | Select-Object Name

例えば amzn2-ami-hvm-2017.12.0.20171208-x86_64-gp2 のバージョン識別子を除いたものは amzn2-ami-hvm-x86_64-gp2 となります。

これに 公開パラメータストアの AMI プレフィクスをつけると、目的の名前空間 “/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2” が得られます。

この AMI 名前空間は常に同じです。AMIの名前をフィルタリングするためにパターンマッチを使用する必要はなく、AMI の CreateDate プロパティでソートしたりする必要もありません。Amazon Linux AMI にパッチが出て新しいバージョンが公開されると、AWS はパラメータストアの値を最新のイメージ ID でアップデートします。対象は全リージョンの各 AMI 名前空間です。

この機能がリリースされるまで、Amazon Linux AMI の各リージョンにおける最新のイメージ ID を取得するには3つのステップが必要でした。つまり、まず API を使用して公開 AMI のリストを取得し、次に AMI 名を文字列でフィルタし、最後にその結果を CreationDate プロパティでソートして最新のイメージ ID を取得するという手順です。AWS Systems Manager はこのプロセスを簡略化します。

公開パラメータから最新の AMI ID をクエリする

対象の AMI の名前空間が分かれば 最新の Amazon Linux AMI イメージ ID を取得するクエリを作れます。

AWS CLI:

aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 --region us-east-1 

PowerShell:

Get-SSMParameter -Name /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 -region us-east-1

新しいインスタンスを常に最新のイメージ ID で起動する

クエリを作成したら、インスタンスを作成するコマンドのサブコマンドとして組み込むことができます。

AWS CLI:

aws ec2 run-instances --image-id $(aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 --query 'Parameters[0].[Value]' --output text) --count 1 --instance-type m4.large

PowerShell:

New-EC2Instance -ImageId ((Get-SSMParameterValue -Name /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2).Parameters[0].Value) -InstanceType m4.large -AssociatePublicIp $true

このコマンドでインスタンスを起動する時は常に、公開された最新バージョンの Amazon Linux AMI (amzn2-ami-hvm-x86_64-gp2) が使用されます。

利用可能な全 Amazon Linux AMI のリストを表示する

以下のコマンドで、パラメータストアで利用可能な AWS Amazon Linux の名前空間の一覧が取得できます。

AWS CLI:

aws ssm get-parameters-by-path --path "/aws/service/ami-amazon-linux-latest" --region us-east-1

PowerShell:

Get-SSMParametersByPath -Path "/aws/service/ami-amazon-linux-latest" -region us-east-1

こちらが get-parameters-by-path の結果の例です。

/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-minimal-hvm-x86_64-ebs
/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-ebs
/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/amzn-ami-minimal-hvm-x86_64-ebs
/aws/service/ami-amazon-linux-latest/amzn-ami-minimal-hvm-x86_64-s3

AWS CloudFormation で最新の Amazon Linux AMI を使用する

AWS CloudFormation でもパラメータストアを利用可能です。より詳しくは Integrating AWS CloudFormation with AWS Systems Manager Parameter Store を参照してください。こちらに、CloudFormation テンプレートで最新の Amazon Linux AMI を使用する例を示します。

# Use public Systems Manager Parameter
 Parameters :
 LatestAmiId :
 Type : 'AWS::SSM::Parameter::Value'
 Default: ‘/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2’

Resources :
 Instance :
 Type : 'AWS::EC2::Instance'
 Properties :
 ImageId : !Ref LatestAmiId

この投稿は AWS の Software Development Engieer、 Arend Castelein による寄稿です。

翻訳はソリューションアーキテクト大村が行いました。原文は Query for the latest Amazon Linux AMI IDs using AWS Systems Manager Parameter Store です。