LoginSignup
9
3

More than 1 year has passed since last update.

[Terraform][CloudFormation]最新のAMI IDの取得方法

Last updated at Posted at 2023-02-20

はじめに

AWSが管理するAMI(Amazon Linux2など)はAMI IDが定期的に更新されますので、TerraformとCloudFormationでEC2を構築する際に、常に最新のAMI IDを自動で取得する方法をまとめてみました。

  • Terraform: v1.3.5、aws provider: v4.55.0
  • CloudFormation AWSTemplateFormatVersion: 2010-09-09

AMIの検索方法

管理コンソールやCLIで検索できます。詳しくは公式ドキュメントをご参照ください。

Terraform

「Data Source」で最新のAMIを検索して取得します。「most_recent」を「true」にすることで、検索条件に一致するAMIが複数存在する場合最新のAMIを取得できます。「owners」でAMIの所有者を指定できます。「filter」ブロックの中で取得したいAMIの検索条件を指定できます。

以下のように記述すると、2023/02/18時点の最新の「Amazon Linux 2 AMI (HVM) - Kernel 4.14, SSD Volume Type」のAMI(ami-0e2faefe48ba06395)を取得できます。

data "aws_ami" "amzlinux2" {
  most_recent = true
  owners      = ["amazon"]

  filter {
    name   = "name"
    values = ["amzn2-ami-hvm-*-x86_64-gp2"]
  }
}

filterブロックに「root-device-type」や「architecture」などの検索条件を個別に指定することもできます。以下のように記述しても上記と同じAMIを取得できます。

data "aws_ami" "amzlinux2" {
  most_recent = true
  owners      = ["amazon"]

  filter {
    name   = "name"
    values = ["amzn2-ami-hvm-*"]
  }
  filter {
    name   = "root-device-type"
    values = ["ebs"]
  }
  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }
  filter {
    name   = "architecture"
    values = ["x86_64"]
  }
  filter {
    name   = "block-device-mapping.volume-type"
    values = ["gp2"]
  }
}

インスタンスを作成する際に「aws_instance」リソースで上記の「Data Source」を参照します。

resource "aws_instance" "main" {
  ami           = data.aws_ami.amzlinux2.id
  instance_type = "t2.micro"
}

※AMI IDの更新によってterraform apply時にインスタンスが再作成される場合があります。AMI IDの変更による再作成を避けたい場合はlifecycleのignore_changesに「ami」を追加することができます。

resource "aws_instance" "main" {
  ami           = data.aws_ami.amzlinux2.id
  instance_type = "t2.micro"

  lifecycle {
    ignore_changes = [
      ami,
    ]
  }
}

CloudFormation

Amazon EC2のAMIは、固有のパブリックパラメータストア名前空間を持っていますので、CloudFormationのパラメータセクションで該当SSMパラメータを参照できます。SSMパラメータを使ったAMIの検索方法は公式ドキュメントをご参照ください。(Linux AMI の検索Windows AMI の検索

以下のように記述すると、2023/02/18時点の最新の「Amazon Linux 2 AMI (HVM) - Kernel 4.14, SSD Volume Type」のAMI(ami-0e2faefe48ba06395)を取得してインスタンスを作成できます。

AWSTemplateFormatVersion: "2010-09-09"

Parameters:
  EC2ImageId:
    Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
    Default: "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"

Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref EC2ImageId
      InstanceType: t2.micro

参考

9
3
0

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
9
3