首页 > 解决方案 > 如何在 Terraform 中输出一种类型的所有资源?

问题描述

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

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

resource "aws_ecr_repository" "oracle_images" {
  name = "oracle-test"
}

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

output "ecr_repository_urls" {
  value = "[${aws_ecr_repository.*.repository_url}]"
}

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

标签: amazon-web-servicesterraform

解决方案


Terraform 的 splat 语法用于使用count元参数跟踪资源创建的每一件事。

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

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}]"
}

推荐阅读