2024. 8. 23. 18:43ㆍIT/d . e . v . O . p . s
목차
1. 테라폼에서 루프문 사용하기1
2. 테라폼에서 루프문 사용하기2
3. 테라폼에서 루프문 사용하기3
4. 테라폼에서 루프문 사용하기4
for_each는 어떻게 작동하나요?
더 잘 이해하기 위해 for_each
문의 실제 사용 사례를 살펴보겠습니다.
EC2 인스턴스의 식별자인 각 키의 문자열 값과 인스턴스 유형 및 AMI ID를 포함하는 또 다른 맵인 인스턴스 구성 맵이 있다고 가정해 보겠습니다.
variable.tf
# variable.tf
variable "instances" {
description = "Map of instance configurations"
type = map(object({
ami = string
instance_type = string
}))
default = {}
}
terraform.tfvars
# terraform.tfvars
instances {
amzlinux = {
ami = "ami-02d3fd86e6a2f5122"
instance_type = "t2.micro"
},
ubuntu = {
ami = "ami-0ce2cb35386fc22e9"
instance_type = "t2.small"
}
}
main.tf
#main.tf
resource "aws_instance" "servers" {
for_each = var.instances
ami = each.value.ami
instance_type = each.value.instance_type
tags = {
Name = "env0-Server-${each.key}"
}
}
위의 코드를 세부적으로 살펴보겠습니다.
variable.tf
파일에 map으로 각 인스턴스에 대한 항목과 변수형식을 정의합니다.terraform.tfvars
파일에서는 각각의 리소스에 대해key-value
의 형식으로 변수들을 정의합니다. 여기에서는 "amzlinux"와 "ubuntu"는 이러한 구성의 식별자로 가지며, 각각 AMI ID와 인스턴스 유형을 지정합니다.- "aws_instance"타입의 "servers"블럭에서
for_each
로var.instances
로 정의된map
의 각 요소들을 루프를 돌며 변수에 지정된 AMI 및 인스턴스 타입으로 EC2 인스턴스를 생성합니다. - tags블록에서는
each.key
키(예: "amzlinux", "ubuntu")를 참조하여 각 인스턴스에 고유한 이름을 지정합니다. - each.value.ami 그리고
each.value.instance_type
을 통해 각 인스턴스 구성에 대해 설정을 합니다.
Terraform 워크플로(init -> plan -> apply)실행이 성공적으로 완료가 되면 AWS 콘솔상에서 for_each
문으로 프로비저닝 다음 두 인스턴스를 확인할 수 있습니다.
for_each에 대한 컬렉션
Maps
maps는 키-값 쌍의 컬렉션입니다. for_each
를 사용하여 maps
의 각 항목의 루프를 돌며 각각의 항목에 maps
의 key와 value를 할당할 수 있습니다.maps
은 고유 식별자(key)와 특정 속성이나 구성을 연결해야 할 때 제일 적합합니다.
variable.tf
# variable.tf
variable "instance_tags" {
description = "Map of instance configurations"
type = map(string({
Role = string
Environment = string
}))
default = {}
}
terraform.tfvars
# terraform.tfvars
instance_tags {
"Role" = "Web-server"
"Environment" = "Production"
}
main.tf
# main.tf
resource "aws_instance" "server_tags" {
for_each = var.instance_tags
# Other Configuration...
tags = {
"${each.key}" = "${each.value}"
}
}
Sets
set
은 유니크한 값을 가지는 컬렉션입니다. for_each
를 사용하여 set
의 루프를 돌며 각각의 항목에 배열의 값을 할당한다.
고유성을 보장해야 하고 key-value의 형태가 필요하지 않을 때 집합이 유용합니다.
variable.tf
# variable.tf
variable "availability_zones" {
description = "Map of AZ configurations"
type = set(string)
default = []
}
terraform.tfvars
# terraform.tfvars
availability_zones = ["us-west-2a", "us-west-2b"]
main.tf
#Example config
resource "aws_subnet" "list_subnets" {
for_each = var.availability_zones
availability_zone = each.key
# Other Configuration...
}
Lists
기본적으로 lists
는 각 항목에 대한 고유한 키를 제공하지 않으므로 for_each
루프문으로 루핑을 돌릴 수가 없다.
하지만 방법이 없는 것은 아닙니다. 다음을 사용할 수 있습니다. tomap()
또는toset()
펑션을 이용해서 lists
를 set
이나 map
으로 변환을 하여 사용하면 됩니다.
variable.tf
# variable.tf
variable "availability_zones" {
description = "Map of AZ configurations"
type = list(string)
default = []
}
terraform.tfvars
# terraform.tfvars
availability_zones = ["us-west-2a", "us-west-2b"]
main.tf
#Example config
variable "availability_zones" {
type = list(string)
default = ["us-east-1a", "us-east-1b"]
}
resource "aws_subnet" "example" {
for_each = toset(var.availability_zones) #or tomap(var.availability_zones)
availability_zone = each.key
# Other configurations...
}
'IT > d . e . v . O . p . s' 카테고리의 다른 글
테라폼에서 루프문 사용하기4 (0) | 2024.08.23 |
---|---|
테라폼에서 루프문 사용하기3 (0) | 2024.08.23 |
테라폼에서 루프문 사용하기1 (0) | 2024.08.23 |
ec2인스턴스 기동/정지 스케쥴링 (0) | 2023.07.11 |
테라폼에서 aws_caller_identity는 어디에 쓰이나요? (0) | 2022.06.17 |