개발하자

테라폼에서 스플랫 연산자를 사용하여 문자열 출력을 생성하는 방법

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
}

반응형