개발하자
테라폼에서 스플랫 연산자를 사용하여 문자열 출력을 생성하는 방법
Cuire
2023. 7. 21. 09:01
반응형
테라폼에서 스플랫 연산자를 사용하여 문자열 출력을 생성하는 방법
저는 로 여러 기반의 ELB를 만들고 있습니다.
예.
resource "aws_elb" "webserver_example" {
count = var.create_webserver
name = var.name
subnets = data.aws_subnet_ids.default.ids
security_groups = [aws_security_group.elb[count.index].id]
}
그러므로 나는 그들의 http 끝점을 출력으로 얻을 수 있기를 원한다.
이 출력들은 문자열이어야 하고 어떻게든 각 DNS 이름을 통합해야 합니다.
그러나 스플랫을 사용하는 다음 접근 방식은 작동하지 않습니다
output "url" {
value = "http://${aws_elb.webserver_example.*.dns_name}:${var.elb_port}"
}
│ Error: Invalid template interpolation value
│
│ on outputs.tf line 2, in output "url":
│ 2: value = "http://${aws_elb.webserver_example.*.dns_name}:${var.elb_port}"
│ ├────────────────
│ │ aws_elb.webserver_example is empty tuple
│
│ Cannot include the given value in a string template: string required.
╵
여러 개의 카운트 기반 문자열을 인쇄할 수 있는 방법이 있습니까?
내가 당신이 제공한 코드만으로 추론할 수 있었던 것으로, 당신은 다른 카운트 값(예: >= 0)을 가질 것이다. 특정 질문에 대한 답은 다음 코드 블록에 있습니다:
output "url" {
value = [
for dns_name in aws_elb.webserver_example.*.dns_name :
format("http://%s:%s", dns_name, var.elb_port)
]
}
그러나 Security Group과 ELB의 이름을 다르게 만드는 방법을 소개해야 합니다. 다음 오류가 발생할 수 있기 때문입니다. 예를들면.
이 지점에 도달하면 다음과 같은 출력이 표시됩니다:
Outputs:
url = [
"http://so-0-2118247212.us-east-1.elb.amazonaws.com:443",
"http://so-1-1137510015.us-east-1.elb.amazonaws.com:443",
]
resource "aws_elb" "webserver_example" {
count = var.create_webserver
name = var.name
subnets = data.aws_subnet_ids.default.ids
security_groups = [aws_security_group.elb[count.index].id]
}
output "url" {
value = aws_elb.webserver_example.*.dns_name
}
반응형