如何在Terraform中输出一种类型的所有资源?

Shi*_*z.M 8 amazon-web-services terraform

aws_ecr_repositories我在 Terraform 代码中定义了一堆:

resource "aws_ecr_repository" "nginx_images" {
  name = "nginx-test"
}

resource "aws_ecr_repository" "oracle_images" {
  name = "oracle-test"
}
Run Code Online (Sandbox Code Playgroud)

我希望能够有一个输出,可以将所有aws_ecr_repository资源列出到一个输出中。这是我尝试过的:

output "ecr_repository_urls" {
  value = "[${aws_ecr_repository.*.repository_url}]"
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为 Terraform 似乎不允许在资源名称上使用通配符。是否可以有这样的输出?我当前的解决方案是仅列出定义的每个资源的输出。

yda*_*coR 8

Terraform 的 splat 语法用于使用以下方式跟踪资源创建的每个事物count元参数跟踪资源创建的每个事物。

如果您希望能够获取所有存储库 URL,您可以使用单个aws_ecr_repository资源并使用count元参数,如下所示:

variable "images" {
  default = [
    "nginx-test",
    "oracle-test",
  ]
}

resource "aws_ecr_repository" "images" {
  count = "${length(var.images)}"
  name  = "${var.images[count.index]}"
}

output "ecr_repository_urls" {
  value = "[${aws_ecr_repository.images.*.repository_url}]"
}
Run Code Online (Sandbox Code Playgroud)