使用jq将JSON从AWS SSM转换为环境变量

问题描述 投票:1回答:2

我已经对此做了一些研究,感觉好像我在那里大约80%,但由于分裂其中一个字符串而努力根据需要调整jq输出。

我正在尝试将AWS SSM的JSON输出转换为环境变量。

AWS命令

aws ssm get-parameters-by-path \
--path /qa/es \
--with-decryption \
--query 'Parameters[*].{Name:Name,Value:Value}' \

产量

[
    {
        "Name": "/qa/es/AWS_ACCESS_KEY_ID",
        "Value": "ABC123"
    },
    {
        "Name": "/qa/es/AWS_SECRET_ACCESS_KEY",
        "Value": "abcdefghijkl"
    },
    {
        "Name": "/qa/es/ENDPOINT",
        "Value": "https://amazonaws.com"
    }
]

我需要从jq输出,注意我只是在环境变量之后的最后一个/。可能存在这样的情况:/ qa / es / something / nested / ENV_VAR

AWS_ACCESS_KEY_ID=ABC123
AWS_SECRET_ACCESS_KEY=abcdefghijkl
ENDPOINT=https://amazonaws.com

有了这个,我可以利用这里的答案来设置环境变量。 Exporting JSON to environment variables

我最接近的是

jq -r "map(\"\(try(.Name |= split(\"/\")))=\(.Value|tostring)\")|.[]" params.json

哪能给我

{"Name":["","qa","es","AWS_ACCESS_KEY_ID"],"Value":"ABC123"}=ABC123
{"Name":["","qa","es","AWS_SECRET_ACCESS_KEY"],"Value":"abcdefghijkl"}=abcdefghijkl
{"Name":["","qa","es","ENDPOINT"],"Value":"https://amazonaws.com"}=https://amazonaws.com

关闭,但不够近!任何人都能指出我在正确的方向吗?

json regex environment-variables jq
2个回答
1
投票

使用-r命令行选项,

.[]
| "\(.Name|split("/")|.[-1])=\(.Value)"

收益率:

AWS_ACCESS_KEY_ID=ABC123
AWS_SECRET_ACCESS_KEY=abcdefghijkl
ENDPOINT=https://amazonaws.com

这似乎与你所要求的相对应,但是这种方法有一个潜在的缺点,它假设某些“=”,所以请小心!


1
投票

作为前面的评论,但使用'@sh'来逃避价值

| "\(.Name|split("/")|.[-1])=\(.Value | @sh)"
© www.soinside.com 2019 - 2024. All rights reserved.