最新のECS-optimized AMI IDをParameter Storeから取得できるようになりました(Amazon Linuxもあるよ)

はじめに

中山(順)です

以前、Windows Serverの最新AMI IDを取得する方法をご紹介しました。

パラメーターストアから最新のWindows AMIのIDを取得する

同様に、ECS-optimized AMI IDもパブリックパラメーターストアから取得できるようになりました。

Amazon ECS provides ECS-Optimized AMI metadata via SSM Parameters

また、いつアナウンスされたのか全く気がつきませんでしたが、Amazon LinxuについてもAMI IDが取得できるようになっていました。

やってみた

早速、AWS CLIで取得してみたいと思います。

ECS-optimized AMI ID

Value自体がJSONのため、以下のようにして抽出しました。

aws ssm get-parameters \
    --names /aws/service/ecs/optimized-ami/amazon-linux/recommended \
    --query Parameters[0].Value \
    --output text \
    | jq -r .image_id
ami-a99d8ad5

Amazon Linux

こちらは種類が多いため、それぞれのImageの違いを確認の上で適切なAMIを選択してください。

aws ssm get-parameters-by-path \
    --path "/aws/service/ami-amazon-linux-latest" \
    --query "sort_by(Parameters,&Name)[]"
[
    {
        "Version": 1,
        "Type": "String",
        "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-ebs",
        "Value": "ami-617c3007"
    },
    {
        "Version": 1,
        "Type": "String",
        "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-gp2",
        "Value": "ami-a77c30c1"
    },
    {
        "Version": 1,
        "Type": "String",
        "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-s3",
        "Value": "ami-b87c30de"
    },
    {
        "Version": 1,
        "Type": "String",
        "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-minimal-hvm-x86_64-ebs",
        "Value": "ami-b87935de"
    },
    {
        "Version": 1,
        "Type": "String",
        "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-minimal-hvm-x86_64-s3",
        "Value": "ami-df7935b9"
    },
    {
        "Version": 1,
        "Type": "String",
        "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-minimal-pv-x86_64-ebs",
        "Value": "ami-b57935d3"
    },
    {
        "Version": 1,
        "Type": "String",
        "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-minimal-pv-x86_64-s3",
        "Value": "ami-a37f33c5"
    },
    {
        "Version": 1,
        "Type": "String",
        "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-pv-x86_64-ebs",
        "Value": "ami-07793561"
    },
    {
        "Version": 1,
        "Type": "String",
        "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-pv-x86_64-s3",
        "Value": "ami-2f793549"
    },
    {
        "Version": 1,
        "Type": "String",
        "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-vpc-nat-hvm-x86_64-ebs",
        "Value": "ami-6d7b370b"
    },
    {
        "Version": 1,
        "Type": "String",
        "Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-2017.12.0.20180328.1-x86_64-ebs",
        "Value": "ami-3dbcb441"
    },
    {
        "Version": 1,
        "Type": "String",
        "Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-2017.12.0.20180328.1-x86_64-gp2",
        "Value": "ami-8fbab2f3"
    },
    {
        "Version": 1,
        "Type": "String",
        "Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-ebs",
        "Value": "ami-706f0816"
    },
    {
        "Version": 1,
        "Type": "String",
        "Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2",
        "Value": "ami-c2680fa4"
    },
    {
        "Version": 1,
        "Type": "String",
        "Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-minimal-hvm-2017.12.0.20180328.1-x86_64-ebs",
        "Value": "ami-8bbab2f7"
    },
    {
        "Version": 1,
        "Type": "String",
        "Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-minimal-hvm-x86_64-ebs",
        "Value": "ami-43620525"
    }
]

AMIについては、以下の観点で選択してください。

パッケージ

Amazon EC2では、通常のイメージに加えてパッケージを必要最小限に絞り込んだMinimalなAmazon LinuxのAMIを提供しています。

最小構成でAmazonLinux環境を構築してみた

名称に"minimal"が含まれるものがそれに該当します。

仮想化タイプ

Amazon EC2では、PVおよびHVMの2種類の仮想化タイプを利用できます。

PVは旧世代のインスタンスタイプしかサポートされておらず性能上のアドバンテージもなくなっているため、特別な理由がない限りHVMを利用しましょう。

パラメーター名に"hvm"や"pv"などが含まれています。

ストレージ

RootDeviceTypeおよびVolumeTypeによる違いもあります。

AMI Name RootDeviceType VolumeType
amzn-ami-hvm-x86_64-ebs ebs standard
amzn-ami-hvm-x86_64-gp2 ebs gp2
amzn-ami-hvm-x86_64-s3 instance-store -

基本的にはパラメーター名に"gp2"が含まれているものを選べば問題ないかと思います。

NAT

今ではNAT Gatewayがあるので出番が減っていますが、NAT Instance用のAMIも公式に提供されています。

パラメーター名に"nat"と含まれています。

IDだけ抽出

以下のような感じで抽出できます。

aws ssm get-parameters-by-path \
    --path "/aws/service/ami-amazon-linux-latest" \
    --query Parameters[?Name==\`/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-gp2\`].Value \
    --output text
ami-a77c30c1

まとめ

Windows Serverだけでなく、Amazon LinuxやECS-optimized AMIの最新IDを簡単に取得できるようになりました。 AMIの作成を自動化しているような方にはうれしい機能なのではないでしょうか。

AMI作成の自動化については以前記事を書きましたのでこちらもご覧いただけるとうれしいです。

【awslabs探訪】ami-builder-packerのご紹介

こうやって、かつては頑張らないといけなかったことが頑張らなくてもよくなるって、ほんとによいですね。

もっと楽がしたいです!