Cloud/IaC

[Terraform] EC2 인스턴스의 AMI 동적 적용

Omoknooni 2024. 6. 12. 17:03

Terraform을 통해 aws_instance를 만들면 기본 AMI값을 지정해주어야한다. 

이 ami 값은 외우기도 좀 그렇고 자주 바뀌는 터라, 동적으로 가져와서 지정해줄 필요가 있다.

 

Terraform의 'data' Block을 사용해 특정한 AMI 값을 AMI Marketplace에서 검색해 가져올 수 있다.

예시로 ubuntu-22.04의 AMI 값을 가져와 본다.

data "aws_ami" "ubuntu" {
  most_recent = true
  owners      = ["099720109477"] # Canonical(Ubuntu 배포사)의 AWS 계정 ID

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*"]
  }

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }
}

resource "aws_instance" "test-vm" {
    ami = data.aws_ami.ubuntu.id		# data block의 값을 가져옴
    instance_type = "t2.micro"
    associate_public_ip_address = true

    key_name = "ssh-key"

    subnet_id = "subnet-XXXXX"
    vpc_security_group_ids = [ XXXX ]
    tags = {
      Name = "test-vm"
    }
}

 

 

data block의 'aws_ami' 라는 Data Source를 사용해 Terraform 외부의 Marketplace에서 값을 가져올 수 있다.

owner로 Canonical 사의 AWS account ID를 지정 뒤, ubuntu-22.04를 이름으로 갖는 virtualization-type=hvm을 만족하는 AMI를 검색할 수 있다.

 

Data Sources - Configuration Language | Terraform | HashiCorp Developer

Data sources allow Terraform to use external data, function output, and data from other configurations. Learn data resource arguments, behavior, and lifecycle.

developer.hashicorp.com

 

이렇게 검색해서 가져온 값은 'ubuntu' 라는 local 변수로 저장하게 된다.