列出未通过 Terraform 管理的资源

Listing out the resources that are not managed via terraform

我有一个资源组,其中许多资源都是通过 Terraform 管理的。但是,最近几天,我注意到有一些资源是由用户手动创建的。有没有一种简单的方法可以找出或列出未通过 Terraform 管理的资源?

Terraform 仅跟踪连接到 Terraform 资源的对象,因此我认为您需要通过提出以下问题来进行此分析:

  1. 资源组中的所有对象是什么?将那组资源称为 A.
  2. Terraform 跟踪的所有对象有哪些?调用那组资源 B.
  3. 如果我们从集合A中减去集合B还剩下什么?这就是你的结果。

这里的主要挑战是资源集 A 仅以 Azure 的术语表示,而资源集 B 以 Terraform 的术语表示,因此可能需要进行一些自定义分析才能将它们都转换为一种形式可以决定上面的问题3。

幸运的是,hashicorp/azurerm 提供商非常一致地将完全限定的 Azure 资源 ID 放在大多数资源类型的 id 字段中,因此如果您使用 terraform show -json获取状态中保存的内容的 JSON 表示,然后使用您自己的一些脚本从类型名称以 azurerm_ 开头的任何资源中仅提取 id 属性,这应该很有希望为资源集 B 作为资源集 IDs.

给你一个合理的答案

然后你可以希望使用 Azure API 到 retrieve all of the objects belonging to your resource group 并取每个结果的 id 来获得一组资源 A.

对此没有现成的运行答案,因为 Terraform 是有意设计的而不是与它不管理的对象交互,除非明确要求使用 terraform import,但希望以上内容足以构建足以满足您需求的解决方案。