AWS CLIですべてのSSM Parameterを一括取得する

2020.03.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、CX事業本部の若槻です。

AWS CLIでAWS Systems Manager パラメーターストア(SSM Parameter)からすべてのパラメータの名前や値などの情報を一括取得するコマンドを確認したのでご紹介します。

コマンド

AWS CLIで以下のコマンドを実行すればすべてのパラメータの名前と値を一括取得できます。(ただし、階層が設定されていないパラメータに限る)

  • aws ssm get-parameters-by-path --path "/"
$ aws ssm get-parameters-by-path --path "/"
{
    "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": "CCCCCCCC",
            "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"
        }
    ]
}

なぜget-parameters-by-pathコマンドなのか

AWS CLIのaws ssmコマンドにはパラメータを取得するコマンドとしてget-parameterget-parametersがありますが、いずれもコマンド実行時に取得したいパラメーターの名前を以下の実行例のように明示的に指定する必要があります。

//実行例

$ aws ssm get-parameter --name "MyStringParameter"
$ aws ssm get-parameters --names "MyStringParameter" "MyStringListParameter" "MyInvalidParameterName"

また、パラメータを一括取得するlist-parametersなるコマンドがありそうな気がしますが、このようなコマンドは用意されていません。

じゃあどうすればいいかと言うと、SSM Parameterにはパラメータ階層というパラメータ名にパスを利用してパラメータ管理をしやすくする機能があります。

パラメータ階層を使用すると、パラメータの編成や管理がしやすくなります。階層は、スラッシュを使用して定義するパスを含むパラメータ名です。

そしてこのパラメータ階層を階層ごとに取得できるget-parameters-by-pathコマンドでルートパス/を指定することにより、階層が設定されていないパラメータを一括取得することができるのです。

逆に、階層が設定されているパラメータ(例:/AAA/BBB)はaws ssm get-parameters-by-path --path "/"では取得できません。--pathに明示的に/AAAと指定してあげる必要があります。

// 「/AAA/BBB」という名前のパラメータを取得する場合

$ aws ssm get-parameters-by-path --path "/AAA"
{
    "Parameters": [
        {
            "Name": "/AAA/BBB",
            "Type": "String",
            "Value": "fff",
            "Version": 1,
            "LastModifiedDate": 1585237540.855,
            "ARN": "arn:aws:ssm:ap-southeast-1:123456789012:parameter/AAA/BBB"
        }
    ]
}

おわりに

設定済みのパラメータを洗い出す際に今回のコマンドが役に立ちました。また今までパラメータ階層という機能は知らなかったですが、便利そうなので機会があれば利用したいです。

参考