如何通过Terraform查看AWS中(或指定区域)的所有资源?
其实Terraform本身的核心定位是基础设施即代码管理工具,它主要聚焦于跟踪和管理自己已经声明过的资源(也就是状态文件里的那些),所以直接用Terraform CLI没法一步到位获取AWS账号里的所有资源——毕竟它不是专门做资源盘点的工具。不过我们可以通过一些变通方法实现类似需求,下面给你两种可行的思路:
方法一:用Terraform的external数据源调用AWS CLI命令
既然你已经知道AWS CLI的aws resourcegroupstaggingapi get-resources --region us-east-1能实现需求,那可以通过Terraform的external数据源来调用这条命令,把结果拉进Terraform里处理。示例代码如下:data "external" "aws_all_resources" { program = ["aws", "resourcegroupstaggingapi", "get-resources", "--region", "us-east-1"] } output "all_aws_resources" { value = jsondecode(data.external.aws_all_resources.result) }执行
terraform apply后,就能在输出里看到指定区域的所有AWS资源了。注意前提是你的环境已经配置好AWS CLI的权限和凭证,能正常执行那条命令。方法二:用AWS Provider的多个数据源组合(繁琐但原生)
Terraform的AWS Provider针对每种资源类型都提供了对应的数据源,比如aws_s3_buckets(获取所有S3桶)、aws_ec2_instances(获取所有EC2实例)、aws_security_groups(获取所有安全组)等等。如果你需要精准获取某几类资源,可以单独声明这些数据源,但如果要覆盖所有资源类型,就得逐个添加对应的数据源,这种方式比较繁琐,不如第一种方法高效。
另外,HashiCorp旗下的工具里,暂时没有专门用来批量盘点AWS全量资源的工具,所以上面两种方法是目前最实用的方案啦。
备注:内容来源于stack exchange,提问作者uday kiran reddy

