You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Terraform创建包含CloudFormation栈资源的AWS资源组?

解决Terraform创建关联CloudFormation栈的AWS资源组问题

你遇到的错误是因为Terraform的aws_resourcegroups_group资源目前仅支持TAG_FILTERS_1_0类型的资源查询,不直接支持CLOUDFORMATION_STACK_1_0类型。要实现将指定CloudFormation栈的资源纳入资源组,可通过以下两种方式解决:

方法一:通过标签过滤(推荐)

给CloudFormation栈中的所有资源统一添加标签(比如StackName=your-stack-name),然后在Terraform中用标签过滤规则创建资源组:

provider "aws" {
  # 按需配置区域等信息
}

terraform {
  # 按需配置Terraform版本等
}

resource "aws_resourcegroups_group" "test" {
  name        = "test"
  description = "test"

  resource_query {
    type = "TAG_FILTERS_1_0"
    query = jsonencode({
      ResourceTypeFilters = ["AWS::AllSupported"]
      TagFilters = [
        {
          Key    = "StackName"
          Values = ["your-stack-name"]
        }
      ]
    })
  }
}

补充:给CloudFormation栈资源自动打标签

如果你的CloudFormation栈还没给资源打标签,可以在栈模板中添加栈级别标签,让所有资源自动继承:

# CloudFormation模板示例
Tags:
  - Key: StackName
    Value: !Ref AWS::StackName

Resources:
  YourEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      # 实例其他配置属性

方法二:导入手动创建的资源组

如果必须使用CLOUDFORMATION_STACK_1_0查询类型,可以先通过AWS CLI创建资源组,再将其导入Terraform管理:

  1. 使用AWS CLI创建资源组:
aws resource-groups create-group \
  --name test \
  --description "test" \
  --resource-query '{"Type": "CLOUDFORMATION_STACK_1_0", "Query": "{\"ResourceTypeFilters\": [\"AWS::AllSupported\"], \"StackIdentifier\": \"arn:aws:cloudformation:XXXXXX:XXXXXX:stack/endofarn\"}"}'
  1. 将该资源组导入Terraform:
terraform import aws_resourcegroups_group.test test
  1. 导入后,Terraform会将该资源纳入状态管理,但注意Terraform仍不支持在配置文件中定义CLOUDFORMATION_STACK_1_0类型的查询,后续修改建议切换到标签过滤方式,或通过AWS控制台/CLI操作。

内容的提问来源于stack exchange,提问作者plouer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:02:21