如何用jq从Terraform Plan中提取变更资源的指定字段?
解决Terraform Plan变更资源快速查看的问题
修正你的jq命令
你遇到的错误是因为.change.actions是数组类型(比如["no-op"]),而contains("create")试图直接拿数组和字符串做包含检查,jq不支持这种操作。需要改为检查数组元素中是否存在目标动作:
方案1:筛选完整变更资源信息
terraform show -json tfplan | jq '.resource_changes[] | select(.change.actions | any(. == "create", . == "update"))'
any()函数会遍历.change.actions数组,只要有元素等于create或update,就会返回true,从而筛选出对应的资源变更条目。
方案2:精简输出关键信息
如果只需要查看资源类型、名称和变更动作,可以进一步简化输出:
terraform show -json tfplan | jq '.resource_changes[] | select(.change.actions | any(. == "create", . == "update")) | {资源类型: .type, 资源名称: .name, 变更动作: .change.actions}'
更简单的替代方法
从Terraform 0.15版本开始,官方提供了-summary参数,无需借助jq就能直接输出变更资源的摘要:
terraform plan -summary -no-color
这个命令会直接列出所有要创建、更新、销毁的资源,输出简洁直观,完全满足快速查看变更列表的需求。
内容的提问来源于stack exchange,提问作者ErnieAndBert
相关产品推荐
相关产品推荐

