본문 바로가기

개발하자

카운트가 있는 리소스에 대한 테라폼 출력

반응형

카운트가 있는 리소스에 대한 테라폼 출력

다음과 같은 구성을 가진 테라폼에 s3 리소스를 보유하고 있습니다:

locals {
    bucket_count = "${length(var.s3_config["bucket_names"])}"
}

resource "aws_s3_bucket" "s3_bucket" {
    count = "${local.bucket_count}"
    bucket = "${format("%s-%s", element(var.s3_config["bucket_names"], count.index), var.region)}"
    acl = "private"
    region = "${var.region}"

    tags {
        Name = "${format("%s-%s", element(var.s3_config["bucket_names"], count.index), var.region)}"
    }
}

그리고 나는 생성된 모든 버킷에 대한 출력 변수를 설정하고 싶어서 내용이 포함된 파일 이름 outputs.tf을 만들었다

output "buckets" {
  value = "${aws_s3_bucket.s3_bucket.*.bucket}"
}

output "buckets_arns" {
  value = "${aws_s3_bucket.s3_bucket.*.arn}"
}

내가 구성을 적용할 때 그것은 괜찮다. 나는 terform.dllstate 파일의 출력을 본다. 그러나 내가 terform 출력을 호출할 때 나는 출력이 없거나 출력이 비어있는 정보를 본다. 내가 무엇을 잘못하는가?




다음을 수행하십시오:

output "buckets" {
  value = ["${aws_s3_bucket.s3_bucket.*.bucket}"]
}

output "buckets_arns" {
  value = ["${aws_s3_bucket.s3_bucket.*.arn}"]
}



대부분의 경우 빈 튜플로 오류 출력 값을 제공합니다

join은 주어진 문자열 목록의 모든 요소를 주어진 구분 기호와 연결하여 문자열을 생성합니다.

조인의 출력은 문자열에 불과하므로, 이것은 잘 작동한다(분리자가 빈 문자열을 만들 때 빈 문자열로 빈 목록을 조인한다). 이러한 유형은 tf0.11 구성에서 매우 일반적이었습니다. 예:

output "bucket_name" {
  value = join("", aws_s3_bucket.s3_bucket.*.id)
}

대신 (tf0.12.11 이전) null 동작을 되돌리려면 3항 연산자가 필요합니다:

output "bucket_name" {
  value = length(aws_s3_bucket.s3_bucket) > 0 ? aws_s3_bucket.s3_bucket[0].id : null
}

출력 목록의 경우 형식 목록을 사용할 수 있습니다.


반응형