Amazon Linux 2023 の 最新 AMI ID は Parameter Store から取得しよう!

2023.04.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは! AWS事業本部コンサルティング部のたかくに(@takakuni_)です。

今回は、タイトルの通り Amazon Linux 2023 の AMI ID は Parameter Store から取得しようです。 Terraform では、 data ブロックを使用して各 OS の最新 AMI ID を取得できます。

以下は Amazon Linux 2 OS で最新の AMI ID を取得する例です。

data_amazonlinux_2.tf

# Parameter Store のパブリックパラメーターを利用して AMI ID を取得

data "aws_ssm_parameter" "amazonlinux_2" {
  name = "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2" # x86_64
  # name = "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-arm64-gp2" # ARM
  # name = "/aws/service/ami-amazon-linux-latest/amzn2-ami-minimal-hvm-x86_64-ebs" # Minimal Image (x86_64)
  # name = "/aws/service/ami-amazon-linux-latest/amzn2-ami-minimal-hvm-arm64-ebs" # Minimal Image (ARM)
}

# AMI 一覧から直接検索する方法
data "aws_ami" "amazonlinux_2" {
  most_recent = true
  owners = [ "amazon" ]
  filter {
    name = "name"

    values = [ "amzn2-ami-hvm-*-x86_64-gp2" ] # x86_64
    # values = [ "amzn2-ami-hvm-*-arm64-gp2" ] # ARM
    # values = [ "amzn2-ami-minimal-hvm-*-x86_64-ebs" ] # Minimal Image (x86_64)
    # values = [ "amzn2-ami-minimal-hvm-*-arm64-ebs" ] # Minimal Image (ARM)
  }
}

AWS より提供されているパブリックパラメーターを取得する方法」と、 「AMI 一覧から直接検索をかけて取得する方法」の 2 パターンがあります。

AL2023 を AMI ID 検索方式で調べると

Amazon Linux 2 でご紹介した 「AMI 一覧から直接検索をかけて取得する方法」 を Amazon Linux 2023 で再現すると以下のようになります。

data_amazonlinux_2023.tf

# AMI 一覧から直接検索する方法
data "aws_ami" "amazonlinux_2023" {
  most_recent = true
  owners = [ "amazon" ]
  filter {
    name = "name"

    values = [ "al2023-ami-*-kernel-6.1-x86_64" ] # x86_64
    # values = [ "al2023-ami-*-kernel-6.1-arm64" ] # ARM
    # values = [ "al2023-ami-minimal-*-kernel-6.1-x86_64" ] # Minimal Image (x86_64)
    # values = [ "al2023-ami-minimal-*-kernel-6.1-arm64" ] # Minimal Image (ARM)
  }
}

本エントリのオチです。

上記の方法の場合、 Amazon ECS 用に最適化された Amazon Linux 2023 の AMI ID が取得されます

takakuni% terraform console
> data.aws_ami.amazonlinux_2023
{
  "architecture" = "x86_64"
  "arn" = "arn:aws:ec2:ap-northeast-1::image/ami-07695fdb89e41b9f8"
  "block_device_mappings" = toset([
    {
      "device_name" = "/dev/xvda"
      "ebs" = tomap({
        "delete_on_termination" = "true"
        "encrypted" = "false"
        "iops" = "3000"
        "snapshot_id" = "snap-0905fd1158e6ca45c"
        "throughput" = "125"
        "volume_size" = "30"
        "volume_type" = "gp3"
      })
      "no_device" = ""
      "virtual_name" = ""
    },
  ])
  "boot_mode" = "uefi-preferred"
  "creation_date" = "2023-04-06T00:48:18.000Z"
  "deprecation_time" = "2025-04-06T00:48:18.000Z"
  "description" = "Amazon Linux AMI 2023.0.20230406 x86_64 ECS HVM EBS"
  "ena_support" = true
  "executable_users" = tolist(null) /* of string */
  "filter" = toset([
    {
      "name" = "name"
      "values" = tolist([
        "al2023-ami-*-kernel-6.1-x86_64",
      ])
    },
  ])
  "hypervisor" = "xen"
  "id" = "ami-07695fdb89e41b9f8"
  "image_id" = "ami-07695fdb89e41b9f8"
  "image_location" = "amazon/al2023-ami-ecs-hvm-2023.0.20230406-kernel-6.1-x86_64"
  "image_owner_alias" = "amazon"
  "image_type" = "machine"
  "imds_support" = "v2.0"
  "include_deprecated" = false
  "kernel_id" = ""
  "most_recent" = true
  "name" = "al2023-ami-ecs-hvm-2023.0.20230406-kernel-6.1-x86_64"
  "name_regex" = tostring(null)
  "owner_id" = "591542846629"
  "owners" = tolist([
    "amazon",
  ])
  "platform" = ""
  "platform_details" = "Linux/UNIX"
  "product_codes" = toset([])
  "public" = true
  "ramdisk_id" = ""
  "root_device_name" = "/dev/xvda"
  "root_device_type" = "ebs"
  "root_snapshot_id" = "snap-0905fd1158e6ca45c"
  "sriov_net_support" = "simple"
  "state" = "available"
  "state_reason" = tomap({
    "code" = "UNSET"
    "message" = "UNSET"
  })
  "tags" = tomap({})
  "timeouts" = null /* object */
  "tpm_support" = ""
  "usage_operation" = "RunInstances"
  "virtualization_type" = "hvm"
}

AL2023 の AMI 名の法則

ドキュメントによると以下の法則で AMI 名は命名されます。

The corresponding AL2023 AMIs have the following format:

・ al2023-ami-2023.0.20230301.0-kernel-6.1-x86_64

・ al2023-ami-2023.1.20230601.0-kernel-6.1-x86_64

・ al2023-ami-2023.2.20230901.0-kernel-6.1-x86_64

対して ECS 用に最適化されたインスタンスは以下の AMI 名で命名されています。

  • al2023-ami-ecs-hvm-2023.0.20230406-kernel-6.1-x86_64

そのため、「al2023-ami-*」のようなワイルドカードを利用した方法では、 Amazon Linux 2023 の場合、意図しない AMI ID を検索する可能性があります。

まとめ

よって、 Amazon Linux 2023 の最新 AMI ID を取得する場合は、 Parameter Store から取得しましょう。

data_amazonlinux_2023.tf

# Parameter Store のパブリックパラメーターを利用して AMI ID を取得

data "aws_ssm_parameter" "amazonlinux_2023" {
  name = "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64" # x86_64
  # name = "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-arm64" # ARM
  # name = "/aws/service/ami-amazon-linux-latest/al2023-ami-minimal-kernel-6.1-x86_64" # Minimal Image (x86_64)
  # name = "/aws/service/ami-amazon-linux-latest/al2023-ami-minimal-kernel-6.1-arm64" # Minimal Image (ARM)
}

以上、「Amazon Linux 2023 の AMI ID は Parameter Store から取得しよう!」でした。私はしっかり落とし穴にハマったため、お気をつけいただけますと幸いです。

AWS事業本部コンサルティング部のたかくに(@takakuni_)でした!