如何在Bash中合并SSM参数为name=value格式写入文件
合并AWS SSM参数提取为单命令解决方案
好问题!你完全可以通过单次API调用+一次性数据处理实现需求,既减少了AWS API请求次数,也避免了多命令拼接的冗余。
完整命令
aws ssm get-parameters-by-path --region eu-central-1 --path /dev/stagefirst/ --with-decryption | jq -r '.Parameters[] | "\(.Name | split("/")[-1])=\(.Value)"' > your-output-file.txt
命令拆解说明
我们一步一步看这个命令的作用:
- AWS API调用:和你原来的命令一致,获取指定路径下的所有SSM参数并解密。
- jq核心处理:
.Parameters[]:遍历返回结果中的每个参数对象\(.Name | split("/")[-1]):将参数名称按/分割,直接取最后一段(替代你原来用sed截取后缀的操作)=\(.Value):将处理后的参数名和参数值拼接成name=value格式-r:让jq输出原始字符串(不带JSON引号)
- 写入文件:通过
> your-output-file.txt将结果直接写入目标文件,替换成你实际需要的文件名即可。
可选:按参数名排序
如果需要像你示例中那样按参数名排序输出,可以在管道后追加sort命令:
aws ssm get-parameters-by-path --region eu-central-1 --path /dev/stagefirst/ --with-decryption | jq -r '.Parameters[] | "\(.Name | split("/")[-1])=\(.Value)"' | sort > your-output-file.txt
验证结果
用你提供的示例JSON输入,运行上述基础命令会输出:
param-password=password param-username=username
(如果加了sort,就会得到你期望的param-username=username在前的顺序)
这种方案的优势在于:
- 仅调用一次AWS SSM API,避免了两次请求的延迟和潜在的数据不一致风险
- 所有数据处理逻辑在
jq内部完成,无需额外调用sed等工具,更简洁高效
内容的提问来源于stack exchange,提问作者We are Borg
相关产品推荐
相关产品推荐

