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

使用jq将JSON从AWS SSM转换为环境变量,json,regex,environment-variables,jq,Json,Regex,Environment Variables,Jq,我对此做了一些研究,感觉好像我大约有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

我对此做了一些研究,感觉好像我大约有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的输出,注意我只在环境变量后面的last/后面。在某些情况下,这可能是/qa/es/something/nested/ENV_VAR

AWS_ACCESS_KEY_ID=ABC123
AWS_SECRET_ACCESS_KEY=abcdefghijkl
ENDPOINT=https://amazonaws.com
一旦我有了这个,我可以利用这里的答案来设置环境变量

最近的一次是

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

很近,但还不够近!有人能给我指出正确的方向吗?

使用-r命令行选项

.[]
| "\(.Name|split("/")|.[-1])=\(.Value)"
收益率:

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

这似乎符合您的要求,但这种方法有一个潜在的缺点,即它假设了“=”的某些内容,因此请小心

使用-r命令行选项

.[]
| "\(.Name|split("/")|.[-1])=\(.Value)"
收益率:

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

这似乎符合您的要求,但这种方法有一个潜在的缺点,即它假设了“=”的某些内容,因此请小心

与前面的注释相同,但使用“@sh”来转义该值

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

与前面的注释相同,但使用“@sh”转义该值

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