6

几天来,我正在研究一种生成非地形创建资源列表的方法。目前我正在使用标记方法,但这意味着无法标记的 AWS 资源也应从 AWS Config 查询中排除。

标记部分也很麻烦,因为这必须手动完成。

  1. 有没有办法告诉 Terraform(或 Terragrunt)自动在资源上使用通用标签?
  2. 有没有办法让 Terraform 或任何其他工具创建状态文件中不可用的资源列表?
4

4 回答 4

1
  1. 有没有办法告诉 Terraform(或 Terragrunt)自动在资源上使用通用标签?

不,这是不可能的。可以说,它会违背 Terraform 的概念模型的声明,因此这不太可能成为 Terraform 的一个特征。

Terraform Enterprise 具有可用于强制用户提供特定标签的策略实施,但我认为它不能自动注入标签。

  1. 有没有办法让 Terraform 或任何其他工具创建状态文件中不可用的资源列表?

不,Terraform 关心其状态文件中的资源。它不关心其他任何事情。


我个人认为你是从错误的角度来处理这个问题。如果可能的话,询问 Terraform“你知道什么”会很方便(但事实并非如此),但如果你查阅它知道的内容列表从中推断资源是否是或者不是 Terraform 的一部分。

我不知道您正在使用的工具或您希望的工作流程,但您可以执行以下操作:

  • 使用该terraform show -json命令生成一个 JSON 文档,该文档表示 Terraform 状态文件中的所有已知基础设施。

  • 使用该工具jq解析 JSON 以获取资源 ID 列表

  • 使用该aws resourcegroupstaggingapi get-resources命令来生成所有已知资源的列表,或者甚至是类似的工具aws-list-all

  • 遍历“所有资源”列表中的每个条目;对于每一个,遍历“Terraform-managed”列表中的每个条目;如果没有匹配项,则将资源 ID 添加到“not-managed-by-Terraform”资源列表中

于 2021-01-25T15:55:14.050 回答
0

我同意 Chuppa Chump 的回答,如果不是很明显,我会添加,以确保所有 Terraform 创建的资源都有一个标签,表明它是由 Terraform 创建的。例如,CreatedBy = "Terraform" OR Automation = "Terraform"。然后任何没有自动化或 CreatedBy 标签的资源都不是由 terraform 创建的。

于 2021-02-02T02:29:57.033 回答
0

对于仍然偶然发现这一点的人。似乎有一个社区创建了一个名为Driftctl的工具,可以根据您的 Terraform 状态检查环境。

于 2021-12-06T08:46:53.723 回答
0

由于没有很好的方法可以知道资源是否由 terraform 管理,我会尝试以下方法:

使用terraformer导入您的所有资源(并非所有资源都受 terraformer 支持,因此这不是一个完整的解决方案),在您拥有此列表后,只需从中减去您的 terraform 状态管理的所有资源。运行时,terraform plan您可以看到您的资源 ID。

如果您有所有 terraform 托管资源的标签,则可以使用terraformer过滤它们

于 2021-01-07T10:01:29.920 回答