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 변수로 저장하게 된다.