hoonii2

[terraform] EC2 최신 AMI ID 연결 본문

개념 공부/(DevOps) 01. IaC

[terraform] EC2 최신 AMI ID 연결

hoonii2 2024. 6. 26. 16:52

1. 개요

terraform 을 통해 EC2 생성 시 최신 AMI ID 를 동적으로 연결하여 구성하는 것이 목적입니다.

 

2. AWS AMI 정보 확인

ubuntu ami id 는 아래 사이트에서 검색이 가능합니다.

https://cloud-images.ubuntu.com/locator/ec2/

 

Ubuntu Amazon EC2 AMI Finder

Amazon EC2 AMI Locator As Ubuntu cloud images are uploaded and registered on the Amazon EC2 cloud, they are referred to as AMI (Amazon Machine Images). Each AMI is a machine template from which you can instantiate new servers. Each AMI has its own unique I

cloud-images.ubuntu.com

 

제가 원하는 "ap-northeast-2" 서울 리전과 22.04 버전을 검색하여 amd64 와 arm64 2가지 AMI 를 확인했고 저는 amd64 아키텍처를 사용하고자 "ami-0bcdae8006538619a" 로 결정했습니다.

 

3. AWS AMI 상세 정보 확인

위에서 찾은 AMI ID 의 상세 정보를 아래 메뉴에서 확인할 수 있습니다.

 

EC2 > Image > AMI 에서 좌측 옵션을 '퍼블릭 이미지' 로 변경합니다.

 

이후 찾은 AMI 값으로 검색하면 아래와 같이 자세한 정보를 확인할 수 있습니다.

이 정보를 terraform 에서 활용해 동적으로 최신 AMI 를 사용하도록 구성합니다.

 

( 위 방법 외에도 aws cli 등의 방법으로도 AMI 상세 정보를 검색해서 확인할 수 있습니다 )

 

4. terraform filter 를 통한 AMI 검색

3에서 찾은 데이터를 바탕으로 terraform aws_ami 내 filter 로 검색해 ami id 를 동적으로 찾아 사용할 수 있습니다.

data "aws_ami" "ami_ubuntu" {
  most_recent = true
  owners      = ["099720109477"] // AMI 소유자

  filter {
    name   = "name" // AMI 이름
    values = ["ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-*"]
  }

  filter {
    name   = "virtualization-type" // 가상화 타입
    values = ["hvm"]
  }

  filter {
    name   = "architecture" // 이미지 아키텍처
    values = ["x86_64"]
  }
}

resource "aws_instance" "hoon_ec2" { 
  ami           = data.aws_ami.ami_ubuntu.id // 위 AMI data 를 resource 적용
  instance_type = "t2.micro"

  tags = {
    CreatedBy = "terraform"
  }
}

AMI 소유자, AMI 이름, 이미지 아키텍처를 사용하여 제가 원하는 AMI ID 를 매번 수정하지 않고 최신 AMI ID 를 찾도록 설정합니다.
"most_recent = true" 를 사용해 검색되는 여러 AMI 리스트 중 가장 최신 이미지를 사용하도록 합니다.

 

5. 생성 확인

terraform init > plan 값 확인 > apply 로 정상 배포 후 aws console 에서 AMI ID 가 잘 적용되었는지 확인합니다.

 

 

6. 참고

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance#basic-example-using-ami-lookup

 

Terraform Registry

 

registry.terraform.io

 

'개념 공부 > (DevOps) 01. IaC' 카테고리의 다른 글

[terraform] EKS 배포  (0) 2024.07.03
[terraform] EC2 EBS 증설  (0) 2024.06.27
Comments