获取 terraform 中已创建资源的列表

Get a list of created resources in terraform

我正在通过 Terraform 创建 AWS ECR 存储库

resource "aws_ecr_repository" "repo1" {
  name                 = "repo1"
  image_tag_mutability = "MUTABLE"

  image_scanning_configuration {
    scan_on_push = true
  }
}
resource "aws_ecr_repository" "repo2" {
  name                 = "repo2"
  image_tag_mutability = "MUTABLE"

  image_scanning_configuration {
    scan_on_push = true
  }
}

现在我想将策略附加到所有 ECR 存储库。

问题是,是否有一种动态方式来创建使用 terraform 脚本创建的所有资源(类型为 ECR)的列表?如果是,那么我们可以在该列表上添加 for_each 并附上政策。

或者有什么更好的方法吗?

P.S。我知道我可以通过为每个人写下以下内容来附加政策。我想避免重复并避免如果有人错过了该块就没有附加策略的情况

resource "aws_ecr_lifecycle_policy" "insights_repository_policy" {
  repository = aws_ecr_repository.insights_repository.name

  policy = local.ecr_cleanup_policy
}

编辑:问题 2 我想授予某些帐户访问权限。如果我使用存储库列表来创建,然后我想为每个帐户分配策略,那么它会产生嵌套的 for 循环。有更清洁的解决方案吗?

local {
  accounts = {test=account_id_123, prod=account_id_456}
}
resource "aws_ecr_repository_policy" "access-permission" {
  for_each   = local.accounts
  policy = <<POLICY
...
POLICY
  repository = aws_ecr_repository.repo_template.name

}

不在你的表单中。如果用for_each or count就更好了。例如:

variable "repos" {
  default = ["repo1", "repo2"]
}


resource "aws_ecr_repository" "repo" {
  for_each             = to_set(var.repos)
  name                 = each.key
  image_tag_mutability = "MUTABLE"

  image_scanning_configuration {
    scan_on_push = true
  }
}

那么你可以这样做:

resource "aws_ecr_lifecycle_policy" "insights_repository_policy" {
  for_each   = aws_ecr_repository.repo
  repository = each.value.name
  policy = local.ecr_cleanup_policy
}