概要

terraformでAL2を作成しようとするとAMI-IDを指定する必要があるが、いちいち最新を調べて修正するのが面倒なので、常に最新版を持ってくるようにしたい。

以下のqiitaに投稿した内容と全く一緒です。

https://qiita.com/inugami_sayo/items/bb9ca2cdc4e7c95c5464

(どこかを参考にしたような気がするが資材が残っていたので資材を削除する前に文章化しました。多分以下とやってることは同じだったと思います)

https://qiita.com/to-fmak/items/7623ee6e15249a4bcedd

https://dev.classmethod.jp/articles/launch-ec2-from-latest-amazon-linux2-ami-by-terraform/

この記事はそのメモやまとめです。 すでに設定済みの項目がいくつかある。 試行錯誤しながらやったので、手順として不要かもしれない。あくまでメモ用。

AMI-IDを調べる

公式の記事にあるような手順でどのようなAMIがあるか取得します。

https://aws.amazon.com/jp/blogs/news/query-for-the-latest-amazon-linux-ami-ids-using-aws-systems-manager-parameter-store/

ただ、このままだとRegionを指定しろとエラーがでるのでとりあえず東京Regionを入れています。 またamazonlinux2のhvmだけでいいのでValues=amzn2-ami-hvmにしています。

aws ec2 describe-images --region ap-northeast-1 --owners amazon --filters "Name=name,Values=amzn2-ami-hvm*" --query 'sort_by(Images, &CreationDate)[].Name'

そうすると以下のようにAMIを取得できます。

    "amzn2-ami-hvm-2.0.20211001.1-arm64-gp2",
    "amzn2-ami-hvm-2.0.20211001.1-x86_64-ebs",
    "amzn2-ami-hvm-2.0.20211001.1-x86_64-gp2",
    "amzn2-ami-hvm-2.0.20211005.0-arm64-gp2",
    "amzn2-ami-hvm-2.0.20211005.0-x86_64-ebs",
    "amzn2-ami-hvm-2.0.20211005.0-x86_64-gp2",
    "amzn2-ami-hvm-2.0.20211103.0-arm64-gp2",
    "amzn2-ami-hvm-2.0.20211103.0-x86_64-ebs",
    "amzn2-ami-hvm-2.0.20211103.0-x86_64-gp2",
    "amzn2-ami-hvm-2.0.20211201.0-arm64-gp2",
    "amzn2-ami-hvm-2.0.20211201.0-x86_64-ebs",
    "amzn2-ami-hvm-2.0.20211201.0-x86_64-gp2",
    "amzn2-ami-hvm-2.0.20211223.0-arm64-gp2",
    "amzn2-ami-hvm-2.0.20211223.0-x86_64-ebs",
    "amzn2-ami-hvm-2.0.20211223.0-x86_64-gp2",
    "amzn2-ami-hvm-2.0.20220121.0-arm64-gp2",
    "amzn2-ami-hvm-2.0.20220121.0-x86_64-ebs",
    "amzn2-ami-hvm-2.0.20220121.0-x86_64-gp2",
    "amzn2-ami-hvm-2.0.20220207.1-arm64-gp2",
    "amzn2-ami-hvm-2.0.20220207.1-x86_64-ebs",
    "amzn2-ami-hvm-2.0.20220207.1-x86_64-gp2",
    "amzn2-ami-hvm-2.0.20220218.1-arm64-gp2",
    "amzn2-ami-hvm-2.0.20220218.1-x86_64-ebs",
    "amzn2-ami-hvm-2.0.20220218.1-x86_64-gp2",
………
    "amzn2-ami-hvm-2.0.20230822.0-arm64-gp2",
    "amzn2-ami-hvm-2.0.20230822.0-x86_64-ebs",
    "amzn2-ami-hvm-2.0.20230822.0-x86_64-gp2",
    "amzn2-ami-hvm-2.0.20230906.0-arm64-gp2",
    "amzn2-ami-hvm-2.0.20230906.0-x86_64-ebs",
    "amzn2-ami-hvm-2.0.20230906.0-x86_64-gp2"

この記事作成時点の最新AMIはamzn2-ami-hvm-2.0.20230906のようですね。

terraformを作成

自分のローカルにあった部分から参考記事でいいなと思った以下を追記しました。 また、EIPを付与するようにしています。

  • lifecycleオプションを付けることでAMI IDの変更による再作成を避けたる
# ec2 with Publick address
resource "aws_instance" "sample_web_server" {
  ami                    = data.aws_ami.amazon-linux-2.id # Amazon Linux 2
  instance_type          = "t3.nano"
  subnet_id              = "subnet-xxxx" # public subnet
  vpc_security_group_ids = ["xxxx"]
  key_name               = "ec2_key_pair"

  lifecycle {
    ignore_changes = [
      ami,
    ]
  }
}

resource "aws_eip" "ec2" {
  instance = aws_instance.sample_web_server.id
  vpc      = true
}

// Amazon Linuxの最新AMI
data "aws_ami" "amazon-linux-2" {
  most_recent = true #最新版を指定
  owners      = ["amazon"]
  filter {
    name   = "owner-alias"
    values = ["amazon"]
  }
  filter {
    name   = "name"
    values = ["amzn2-ami-hvm-*-x86_64-gp2"]
  }
}

appyします。 ちゃんと最新のAMIで作成されてますね!

ハマったところとか

  • 特になし