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를 검색할 수 있다.
이렇게 검색해서 가져온 값은 'ubuntu' 라는 local 변수로 저장하게 된다.