Overview
ssm のパラメータを1個ずつ環境変数にセットするのがめんどくさいのでまとめてやっちまうか、っていう話。
cf.
https://dev.classmethod.jp/articles/aws-cli-all-ssm-parameter-get/
https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameters.html
aws ssm get-parameters
の結果
ってこういう形になってるじゃないですか。
{
"Parameters": [
{
"Name": "AAAAAAA",
"Type": "String",
"Value": "あああああああ",
"Version": 1,
"LastModifiedDate": 1585235884.237,
"ARN": "arn:aws:ssm:ap-southeast-1:123456789012:parameter/AAAAAAA"
},
{
"Name": "BBBBBBB",
"Type": "String",
"Value": "12345678",
"Version": 1,
"LastModifiedDate": 1585235895.919,
"ARN": "arn:aws:ssm:ap-southeast-1:123456789012:parameter/BBBBBBB"
},
{
"Name": "CCCCCCC",
"Type": "String",
"Value": "いいいいいいい",
"Version": 1,
"LastModifiedDate": 1585235959.944,
"ARN": "arn:aws:ssm:ap-southeast-1:123456789012:parameter/CCCCCCCC"
},
{
"Name": "DDDDDDD",
"Type": "String",
"Value": "0987654321",
"Version": 1,
"LastModifiedDate": 1585235975.3,
"ARN": "arn:aws:ssm:ap-southeast-1:123456789012:parameter/DDDDDDD"
}
]
}
で、これを
Name=Value
の形で環境変数にセットして、
export AAAAAAA=あああああああ
export BBBBBBB=12345678
export CCCCCCC=いいいいいいい
export DDDDDDD=0987654321
以降のシェル芸で使いたい
$ echo ${AAAAAAA}
あああああああ
っていうよくあるアレ。
まぁ ssm
に限らず、セットしたい key と value を含む json であれば(つまり json に変換できれば)だいたいこれで対応できます。
やりかた
Name=Value
の形に整形
jq
使います。
$ cat sample.json | jq -r '.Parameters[] | [.Name, .Value] | join("=")'
AAAAAAA=あああああああ
BBBBBBB=12345678
CCCCCCC=いいいいいいい
DDDDDDD=0987654321
Name
が /foo/bar/baz/AAAAAAA
みたいにパス形式になってるときは
.Parameters[] | [(.Name|split("/")[-1]), .Value] | join("=")
みたいに .Name
を適当に整形すればおk。
export
に食わせる
export
コマンドって複数まとめて設定できるの知ってた?
$ export $(cat sample.json | jq -r '.Parameters[] | [.Name, .Value] | join("=")')
$ env | grep -e AAAAAAA -e BBBBBBB -e CCCCCCC -e DDDDDDD
AAAAAAA=あああああああ
CCCCCCC=いいいいいいい
BBBBBBB=12345678
DDDDDDD=0987654321
まとめると
ワンライナーのシェル芸だとこんな感じ。
$ export $(aws ssm get-parameters --with-decryption \
--names AAAAAAA BBBBBBB CCCCCCC DDDDDDD \
| jq -r '.Parameters[] | [.Name, .Value] | join("=")')
jq スクリプト
に外出しした方が、シェルのクォートとか気にしなくていいのでオススメ。
.Parameters[]
| [.Name, .Value]
| join("=")
$ export $(aws ssm get-parameters --with-decryption \
--names AAAAAAA BBBBBBB CCCCCCC DDDDDDD | jq -r -f cnv.jq)
別解
いったんファイルに落として source してもOK。
$ cat sample.json | jq -r '.Parameters[] | [.Name, .Value] | join("=")' >.env
$ set -a
$ . .env
$ set +a
$ env | grep -e AAAAAAA -e BBBBBBB -e CCCCCCC -e DDDDDDD
AAAAAAA=あああああああ
CCCCCCC=いいいいいいい
BBBBBBB=12345678
DDDDDDD=0987654321
set -a
って何?
普通に AAAAAAA=あああああああ
だけを .
してもシェル変数になってしまうので、
すべて環境変数としてセットするためのオプション。
set -o allexport
と同等。
cf. https://atmarkit.itmedia.co.jp/ait/articles/1805/10/news023.html
シェル変数と環境変数の違いについてはこちらを参照。
→ https://qiita.com/kure/items/f76d8242b97280a247a1
っていう話。