【问题标题】:Using JQ to generate AWS CloudFormation Parameters File使用 JQ 生成 AWS CloudFormation 参数文件
【发布时间】:2025-12-22 11:20:08
【问题描述】:

尝试使用 JQ 生成 AWS 参数文件以用于调用 CloudFormation

aws cloudformation create-stack --stack-name test --parameters file://params.json --template-body file://cfn.yaml

我正在考虑采用这样的模板:

'[{"ParameterKey":"KEY","ParameterValue":"VALUE","UsePreviousValue":false}]'

然后在 JQ 中添加一些参数并尝试对 arg 进行一些字符串操作,例如 jq --arg params 'key1,value1:key2,value2' 然后拆分 ':' 以复制它并用逗号分隔值。

我能做的最好的事情是提前创建正确数量的*节点,然后进行静态替换,分别提供每个参数。不够动态,甚至不能打扰 - 最好只编写一个 bash 脚本并在循环中进行替换。

任何帮助将不胜感激。

目前我能做的最好的就是这个

echo '[{"ParameterKey":"KEY","ParameterValue":"VALUE","UsePreviousValue":false}]' | jq --arg vars "key1,val1:key2,val2" '.[0].ParameterKey = ($vars|split(":")|.[]|split(",")|.[0]) | .[0].ParameterValue = ($vars|split(":")|.[]|split(",")|.[1])'

但输出是所有值的组合(例如 key1 val1、key1 val2 等)

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation jq


    【解决方案1】:

    【讨论】:

    • 我想这个想法是将一些变量从 jenkins 作业传递到模板中,并使其足够动态,以便 Jenkins 管道代码可以在不更改的情况下重复使用。这样,可以在 groovy 代码之外指定 cfn 模板和参数列表。如果我必须创建一个用于 jq 的 json 文件,那么我不妨使用相同的工具(不是 jq)创建 cfn 参数文件
    • 这听起来很合理。还有一个你可能感兴趣的答案:Get json field value with JQ from different directory,特别是jq --argfile p cloudformation/parameters_v13.json -f manage.jq input.json