728x90
728x90
https://www.terraform.io/language/expressions/for
예를 들어, vpc를 여러 개 만든다고 해보자
count를 사용하는 경우 :
locals {
vpc_cidrs = [
"10.0.0.0/16",
"10.1.0.0/16",
"10.2.0.0/16"
]
}
resource "aws_vpc" "this" {
count = length(local.vpc_cidrs)
cidr_block = local.vpc_cidrs[count.index]
}
위 경우에 vpc id를 뽑아내려면
## 생성된 모든 vpc의 id를 list로 출력
output "vpc_ids" {
value = aws_vpc.this.*.id
}
위와 같이 *
을 사용해 모든 id들을 list
로 뽑을 수 있다
다만 for_each
를 사용하는 경우에도 아래와 같이 아웃풋을 출력하려 하면
locals {
vpc_cidrs = {
0 = "10.0.0.0/16",
1 = "10.1.0.0/16",
2 = "10.2.0.0/16"
}
}
resource "aws_vpc" "this" {
for_each = local.vpc_cidrs
cidr_block = each.value
}
output "vpc_ids" {
value = aws_vpc.this.*.id
}
id라는 속성값이 없다니
aws_vpc.this.*
만으로 output을 내보면
id라는 속성값이 너무나 잘 있다
좀 찾아본 결과...*
는 결국 list
용이고, for_each
의 결과물은 map
이여서 그런가보다
참조
- https://stackoverflow.com/questions/64989080/terraform-modules-output-from-for-each
- https://www.reddit.com/r/Terraform/comments/f7x3kl/get_output_from_a_set_of_resource_created_with/
뭐...aws_vpc.this["0"].id
이런식으로 하나씩 뽑아써도 되긴 하지만 (지금까지 그래왔고)
이러면 모듈 내의 for_each
문에 대해서 output
처리를 하나씩 할 수 없기 때문에 아래와 같이 사용해서 뽑으면 된다
# id들만 list로 뽑기
output "vpc_id_list" {
value = [ for vpc in aws_vpc.this : vpc.id ]
}
# key값을 사용해 map으로 뽑기
output "vpc_id_map" {
value = { for k,vpc in aws_vpc.this : k => vpc.id }
}
끝
728x90
728x90
'공부 > IaC' 카테고리의 다른 글
[Terraform] 다른 backend의 state가 업데이트가 안돼요..?! (terraform_remote_state 불러오는 방식) (0) | 2022.04.30 |
---|---|
[Terraform] map 타입 변수 validation 설정하기 (0) | 2022.02.21 |
[M1 MAC Terraform] The plugin.(*GRPCProvider).ValidateProviderConfig request was cancelled. (3) | 2022.01.24 |
[Terraform] CSV -> AWS Security Group : fileset 함수 활용 (0) | 2021.12.11 |
[Terraform] Terraform import와 terraforming (AWS) (0) | 2021.11.07 |
댓글