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

使用JQ删除CloudFormation.template.json中指定资源块的方法

jq删除CloudFormation模板指定资源实现方法

现有实现

你当前已经通过匹配Type字段实现了AWS::CodePipeline::Pipeline类型资源的删除,所用命令如下:

jq '(del(.Resources | .[] | select(.Type=="AWS::CodePipeline::Pipeline")))' $fileName > newTemplate1.json

这个写法的局限是只能遍历Resources下的资源值做判断,无法获取上层资源键名,因此无法匹配「键名包含cdkpipelinePipeline」的删除规则。

待删除资源示例

需要额外删除的是所有键名包含cdkpipelinePipeline的资源,结构参考如下:

{
  "developcdkpipelinePipeline": {
    "Type": "AWS::CodePipeline::Pipeline",
    "Properties": {
      "RoleArn": {
        "Fn::GetAtt": [
          "developcdkpipelinePipelineRole",
          "Arn"
        ]
      }
    }
  },
  "developcdkpipelinePipelineRole": {
    "Type": "AWS::IAM::Role",
    "Properties": {
      "AssumeRolePolicyDocument": {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "Service": "codepipeline.amazonaws.com"
            }
          }
        ],
        "Version": "2012-10-17"
      },
      "Tags": [
        {
          "Key": "Application",
          "Value": "develop"
        }
      ]
    },
    "DependsOn": [
      "AuroraNestedStackAuroraNestedStackResource"
    ],
    "Metadata": {
      "aws:cdk:path": "develop-cicd-stack/develop-cdkpipeline/Pipeline/Role/Resource"
    }
  }
}

最终实现命令

使用with_entries同时获取资源键名和值,将两个删除条件合并,一次性完成两类资源的删除:

jq 'del(.Resources | with_entries(select(.key | contains("cdkpipelinePipeline") or .value.Type == "AWS::CodePipeline::Pipeline")))' $fileName > newTemplate1.json

命令逻辑说明

  • with_entries会将Resources对象转换为{key: 资源键名, value: 资源内容}的数组结构,筛选完成后自动转回原对象结构
  • select()中配置两个删除规则,满足任意一个规则的资源都会被选中删除:
    • 资源键名包含cdkpipelinePipeline字符串
    • 资源的Type字段值为AWS::CodePipeline::Pipeline
  • 单条命令即可覆盖全部删除需求,无需分多次处理模板

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 15:51:37