生成非Terraform创建的资源列表的最佳方式



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

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

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

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

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

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

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

  1. 是否有方法要求Terraform或任何其他工具创建状态文件中不可用的资源列表

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


就我个人而言,我认为你处理这个问题的角度不对。询问地形";关于";如果可能的话会很方便(事实并非如此(,但如果你查阅一份关于它所了解的内容的列表,并从中推断资源是否是Terraform的一部分,你会得到更好的答案。

我不知道你正在使用的工具或你希望的工作流程,但你可以这样做:

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

  • 使用工具jq为资源ID 列表解析JSON

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

  • 循环浏览"所有资源"列表中的每个条目;对于每一个,循环浏览"Terraform托管"列表中的每个条目;如果不匹配,请将资源ID添加到"不由Terraform管理"资源的列表中

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

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

如果你有所有地形管理资源的标签,你可以用地形成型过滤它们

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

最新更新