AWS Systems Manager Parameter Store を使ったアプリケーションを開発するときに,ローカル環境ではできる限り AWS アカウントに依存しないようにしたく,LocalStack を使う機会があったので調査ログをまとめておく.結果的に AWS Systems Manager Parameter Store のほとんどの API がサポートされていて良かった❗️CI/CD パイプラインで自動テストするときにも使える〜
LocalStack のセットアップ方法は複数あるからドキュメント参照で📝最近だと Docker Desktop の Extensions にも対応していて,1番簡単かも👌今回は Extensions を使った.
AWS Systems Manager Parameter Store API
LocalStack では AWS Systems Manager Parameter Store 関連の API がほとんどサポートされている❗️
- DeleteParameter
- DeleteParameters
- DescribeParameters
- GetParameter
- GetParameterHistory
- GetParameters
- GetParametersByPath
- LabelParameterVersion
- PutParameter
(現時点だと)唯一 UnlabelParameterVersion
だけはサポートされてなく,使う場合は要注意〜
- UnlabelParameterVersion
PutParameter
AWS CLI を実行するときに --endpoint-url http://localhost:4566
オプションを付けると LocalStack を操作できる.AWS Systems Manager Parameter Store の PutParameter
を AWS CLI で実行する場合は以下のようになる.もちろん SecureString も使える👌(暗号化自体はされないけど)
$ aws --endpoint-url http://localhost:4566 ssm put-parameter --name '/parameter/string' --type 'String' --value 'value/String' { "Version": 1 } $ aws --endpoint-url http://localhost:4566 ssm put-parameter --name '/parameter/secure-string' --type 'SecureString' --value 'value/SecureString' { "Version": 1 }
さらに LocalStack AWS CLI (awslocal
コマンド) を使うと --endpoint-url
オプションを付けなくても実行できて,もっとシンプルになる.本記事では awslocal
コマンドを使った例を載せていく.
$ export DEFAULT_REGION=ap-northeast-1 $ awslocal ssm put-parameter --name '/parameter/awslocal' --type 'String' --value 'value/awslocal' { "Version": 1 }
GetParameter
$ awslocal ssm get-parameter --name '/parameter/string' { "Parameter": { "Name": "/parameter/string", "Type": "String", "Value": "value/String", "Version": 1, "LastModifiedDate": "2023-04-24T00:00:00.000000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1:000000000000:parameter/parameter/string", "DataType": "text" } }
DeleteParameter
$ awslocal ssm delete-parameter --name '/parameter/string' $ awslocal ssm delete-parameter --name '/parameter/secure-string'
DescribeParameters
今度はパラメータを3個追加してから DescribeParameters
を実行する.
$ awslocal ssm put-parameter --name '/service1/parameter1' --type 'String' --value 'value1' $ awslocal ssm put-parameter --name '/service1/parameter2' --type 'String' --value 'value2' $ awslocal ssm put-parameter --name '/service1/parameter3' --type 'String' --value 'value3' $ awslocal ssm describe-parameters { "Parameters": [ { "Name": "/service1/parameter1", "Type": "String", "LastModifiedDate": "2023-04-24T00:00:00.000000+09:00", "LastModifiedUser": "N/A", "Version": 1, "DataType": "text" }, { "Name": "/service1/parameter2", "Type": "String", "LastModifiedDate": "2023-04-24T00:00:00.000000+09:00", "LastModifiedUser": "N/A", "Version": 1, "DataType": "text" }, { "Name": "/service1/parameter3", "Type": "String", "LastModifiedDate": "2023-04-24T00:00:00.000000+09:00", "LastModifiedUser": "N/A", "Version": 1, "DataType": "text" } ] }
GetParameters
$ awslocal ssm get-parameters --names /service1/parameter1 /service1/parameter2 { "Parameters": [ { "Name": "/service1/parameter1", "Type": "String", "Value": "value1", "Version": 1, "LastModifiedDate": "2023-04-24T00:00:00.000000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1:000000000000:parameter/service1/parameter1", "DataType": "text" }, { "Name": "/service1/parameter2", "Type": "String", "Value": "value2", "Version": 1, "LastModifiedDate": "2023-04-24T00:00:00.000000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1:000000000000:parameter/service1/parameter2", "DataType": "text" } ], "InvalidParameters": [] }
GetParametersByPath
$ awslocal ssm get-parameters-by-path --path /service1/ { "Parameters": [ { "Name": "/service1/parameter1", "Type": "String", "Value": "value1", "Version": 1, "LastModifiedDate": "2023-04-24T00:00:00.000000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1:000000000000:parameter/service1/parameter1", "DataType": "text" }, { "Name": "/service1/parameter2", "Type": "String", "Value": "value2", "Version": 1, "LastModifiedDate": "2023-04-24T00:00:00.000000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1:000000000000:parameter/service1/parameter2", "DataType": "text" }, { "Name": "/service1/parameter3", "Type": "String", "Value": "value3", "Version": 1, "LastModifiedDate": "2023-04-24T00:00:00.000000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1:000000000000:parameter/service1/parameter3", "DataType": "text" } ] }
DeleteParameters
$ awslocal ssm delete-parameters --names /service1/parameter1 /service1/parameter2 /service1/parameter3 { "DeletedParameters": [ "/service1/parameter1", "/service1/parameter2", "/service1/parameter3" ], "InvalidParameters": [] }
GetParameterHistory
ssm put-parameter --overwrite
コマンドを使ってパラメータを更新してから GetParameterHistory
を実行する.
$ awslocal ssm put-parameter --name 'parameter1' --type 'String' --value 'version1' { "Version": 1 } $ awslocal ssm put-parameter --name 'parameter1' --type 'String' --value 'version2' --overwrite { "Version": 2 } $ awslocal ssm put-parameter --name 'parameter1' --type 'String' --value 'version3' --overwrite { "Version": 3 } $ awslocal ssm get-parameter-history --name 'parameter1' { "Parameters": [ { "Name": "parameter1", "Type": "String", "LastModifiedDate": "2023-04-24T00:00:00.000000+09:00", "LastModifiedUser": "N/A", "Value": "version1", "Version": 1, "Labels": [], "DataType": "text" }, { "Name": "parameter1", "Type": "String", "LastModifiedDate": "2023-04-24T00:00:00.000000+09:00", "LastModifiedUser": "N/A", "Value": "version2", "Version": 2, "Labels": [], "DataType": "text" }, { "Name": "parameter1", "Type": "String", "LastModifiedDate": "2023-04-24T00:00:00.000000+09:00", "LastModifiedUser": "N/A", "Value": "version3", "Version": 3, "Labels": [], "DataType": "text" } ] }
LabelParameterVersion
最後は LabelParameterVersion
を実行してパラメータに verified
ラベルを追加する例を載せる.パラメータ parameter1
の最新バージョンにのみ verified
ラベルが追加されている.
$ awslocal ssm label-parameter-version --name parameter1 --labels verified { "InvalidLabels": [], "ParameterVersion": 3 } $ awslocal ssm get-parameter-history --name 'parameter1' { "Parameters": [ { "Name": "parameter1", "Type": "String", "LastModifiedDate": "2023-04-24T00:00:00.000000+09:00", "LastModifiedUser": "N/A", "Value": "version1", "Version": 1, "Labels": [], "DataType": "text" }, { "Name": "parameter1", "Type": "String", "LastModifiedDate": "2023-04-24T00:00:00.000000+09:00", "LastModifiedUser": "N/A", "Value": "version2", "Version": 2, "Labels": [], "DataType": "text" }, { "Name": "parameter1", "Type": "String", "LastModifiedDate": "2023-04-24T00:00:00.000000+09:00", "LastModifiedUser": "N/A", "Value": "version3", "Version": 3, "Labels": [ "verified" ], "DataType": "text" } ] }
まとめ
LocalStack でサポートされている AWS Systems Manager Parameter Store 関連の API を調査した.結果的にほとんどの API がサポートされていて良かった❗️LocalStack をどんどん使っていくぞ〜🚀