LoginSignup
4
2

More than 1 year has passed since last update.

Terraformで最新のAMIをEC2に設定する

Last updated at Posted at 2021-12-25

はじめに

EC2をTerraformで作成する際にとりあえず最新のAMIを設定したいと思ったので調査しました。

目次

1. Terraformの記述(結論)
2. AMI名エイリアスの導出方法
3. 参考

1. Terraformの記述(結論)

dataブロックでAWS Systems Manager Parameter Store(以下、AWS SSM)を利用して最新のAMIを取得します。

常に最新のAMIを取得するEC2の設定
data "aws_ssm_parameter" "amzn2_latest" {
  name = "/aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-hvm-x86_64-gp2"
  // カーネル 4.14 の場合
  name = "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"
}

resource "aws_instance" "this" {
  ami                         = data.aws_ssm_parameter.amzn2_latest.value
  associate_public_ip_address = var.associate_public_ip_address
  instance_type               = var.instance_type
  key_name                    = var.key_name
  subnet_id                   = var.subnet_id
  iam_instance_profile        = var.iam_instance_profile
  vpc_security_group_ids      = var.vpc_security_group_ids
  user_data                   = var.user_data
  tags                        = merge(tomap({ Name = "${var.name}-ec2" }), var.tags)

  capacity_reservation_specification {
    capacity_reservation_preference = "none"
  }
}

2. AMI名エイリアスの導出方法

まず、なぜAMI名エイリアスの導出方法を記載するか説明します。
AWS SSMを利用する際に、AMIパラメータストアの名前空間を指定する必要があります。
名前空間は2つのパートから構成されます:

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

このAMI名エイリアスがカーネル5系と4系で異なるため、導出方法を記載することとしました。

カーネル5系と4系のAMI名エイリアス
4系: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
5系: /aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-hvm-x86_64-gp2

AWSコンソールから目的のAMI名を確認

以下の手順でAMI IDを取得します。
ec2_001.png
ec2_002.png
AMI IDでAMIを検索し、AMI名を取得します。
ec2_003.png
取得したAMI名から日付ベースのバージョン識別子を削除した文字列がAMI名エイリアスとなります。
(上記の場合はamzn2-ami-kernel-5.10-hvm-x86_64-gp2となります。)
AMI名エイリアスが正しいかはAWS CLIのssm get-parameters-by-pathを利用することで確認できます。

AWS CLI
$ aws ssm get-parameters-by-path
    --path "/aws/service/ami-amazon-linux-latest"
    --query 'reverse(sort_by(Parameters,&LastModifiedDate))[:20].Name'
[
    "/aws/service/ami-amazon-linux-latest/amzn-ami-pv-x86_64-s3",
    "/aws/service/ami-amazon-linux-latest/amzn-ami-pv-x86_64-ebs",
    "/aws/service/ami-amazon-linux-latest/amzn-ami-minimal-pv-x86_64-s3",
    "/aws/service/ami-amazon-linux-latest/amzn-ami-minimal-pv-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-hvm-x86_64-ebs",
    "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-s3",
    "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-gp2",
    "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-ebs",
    "/aws/service/ami-amazon-linux-latest/al2022-ami-minimal-kernel-5.10-x86_64",
    "/aws/service/ami-amazon-linux-latest/al2022-ami-minimal-kernel-5.10-arm64",
    "/aws/service/ami-amazon-linux-latest/al2022-ami-kernel-5.10-x86_64",
    "/aws/service/ami-amazon-linux-latest/al2022-ami-kernel-5.10-arm64",
    "/aws/service/ami-amazon-linux-latest/amzn2-ami-minimal-hvm-x86_64-ebs",
    "/aws/service/ami-amazon-linux-latest/amzn2-ami-minimal-hvm-arm64-ebs",
    "/aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-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/amzn2-ami-kernel-5.10-hvm-arm64-gp2",
    "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2",
    "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-ebs"
]

補足

AWSコンソールでなくてもAWS CLIを利用できる場合は以下のコマンドで最新のAMIを確認できます。
検索後は、上記と同様の手順でAMI名エイリアスを導出します。

$ aws ec2 describe-images
    --owners amazon
    --filters "Name=name,Values=amzn2*-gp2"
    --query 'reverse(sort_by(Images, &CreationDate))[:5].Name'
[
    "amzn2-ami-minimal-selinux-enforcing-hvm-2.0.20211201.0-x86_64-gp2",
    "amzn2-ami-kernel-5.10-hvm-2.0.20211201.0-x86_64-gp2",
    "amzn2-ami-minimal-selinux-enforcing-hvm-2.0.20211201.0-arm64-gp2",
    "amzn2-ami-hvm-2.0.20211201.0-x86_64-gp2",
    "amzn2-ami-kernel-5.10-hvm-2.0.20211201.0-arm64-gp2"
]

3. 参考

4
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2