AWS Systems Manager
Page content
systems manager パラメータストア
Lambda からあるパラメータを分離し、かつ程々安全に管理したい。そう思った時に出てくるのがパラメータストア。
仕様等
可用性: 記載なし
リージョン: グローバルではなく、リージョンごとにパラメータストアを持つ仕様
GetParam***
オペレーションの最大性能 (1 秒あたりのトランザクション数)- Parameter Storage
Parameter type | Pricing |
---|---|
Standard | No additional charge |
Advanced | $0.05 per advanced parameter per month (prorated hourly if the parameter is stored less than a month) |
- API Interactions
Parameter type | Pricing - Standard Throughput | Pricing - Higher Throughput |
---|---|---|
Standard | No additional charge | $0.05 per 10,000 Parameter Store API interactions |
Advanced | $0.05 per 10,000 Parameter Store API interactions | $0.05 per 10,000 Parameter Store API interactions |
- 100 rps で 30 日回したら `100 * 86400 * 30 * 0.05 / 10000 = $1,296/mth` たけぇ!
- 参考: DynamoDB table でやると `0.0001484 * 100 * 24 * 30 = $10.6848/mth`
高頻度でアクセスするようなものは割高になるので、Secure String parameter で秘匿性をどうしても高めたいような場合以外は不採用の気持ちです(´・ω・`)
管理方法 (検討中)
/
で区切るとパスとして扱えるようなので、うまくツリー状に管理したい。/prod/rooms/users/01_hoge: 11111 /prod/rooms/users/03_fuga: 33333 /prod/rooms/admins/02_hehe: 22222 /test/rooms/users/01_test: testest
cli でお試し
# メタデータ参照
bash-3.2$ aws ssm describe-parameters
{
"Parameters": [
{
"Name": "/prod/rooms/users/01_hoge",
"Type": "String",
"LastModifiedDate": 1559822768.138,
"LastModifiedUser": "arn:aws:iam::1111111111:users/hogedeveloper",
"Version": 1
}
]
}
# メタデータ参照 (filterが可能)
bash-3.2$ aws ssm describe-parameters --filters "Key=Name, Values=/prod/rooms/users/01_hoge"
# 追加
bash-3.2$ aws ssm put-parameter --name "/prod/rooms/users/01_hoge" --value "11111" --type String
{
"Version": 1
}
# 追加
bash-3.2$ aws ssm put-parameter --name "/prod/rooms/users/02_fuga" --value "22222" --type String
{
"Version": 1
}
# 別パスに追加
bash-3.2$ aws ssm put-parameter --name "/prod/rooms/admins/01_hoho" --value "hohoho" --type String
{
"Version": 1
}
# get-parameters-by-path ではパラメータ名まで指定したら応答なし
bash-3.2$ aws ssm get-parameters-by-path --path "/prod/rooms/users/01_hoge"
{
"Parameters": []
}
# get-parameters-by-path では指定したパスの直下のパラメータたちが取得される
bash-3.2$ aws ssm get-parameters-by-path --path "/prod/rooms/users"
{
"Parameters": [
{
"Name": "/prod/rooms/users/01_hoge",
"Type": "String",
"Value": "11111",
"Version": 1,
"LastModifiedDate": 1559879718.529,
"ARN": "arn:aws:ssm:ap-northeast-1:1111111111:parameter/prod/rooms/users/01_hoge"
},
{
"Name": "/prod/rooms/users/02_fuga",
"Type": "String",
"Value": "22222",
"Version": 1,
"LastModifiedDate": 1559879734.29,
"ARN": "arn:aws:ssm:ap-northeast-1:1111111111:parameter/prod/rooms/users/02_fuga"
}
]
}
# get-parameters-by-path では2階層以上下のパスは手に入らない
bash-3.2$ aws ssm get-parameters-by-path --path "/prod/rooms"
{
"Parameters": []
}
# 上書き (誤り)
bash-3.2$ aws ssm put-parameter --name "/prod/rooms/admins/01_hoho" --value "ufufufu" --type String
An error occurred (ParameterAlreadyExists) when calling the PutParameter operation: The parameter already exists. To overwrite this value, set the overwrite option in the request to true.
# 上書き (正しい)
bash-3.2$ aws ssm put-parameter --name "/prod/rooms/admins/01_hoho" --value "ufufufu" --type String --overwrite
{
"Version": 2
}
# 参照 (get-parameters) ... invalidParametersって?
bash-3.2$ aws ssm get-parameters --name "/prod/rooms/users/01_hoho"
{
"Parameters": [
{
"Name": "/prod/rooms/users/01_hoho",
"Type": "String",
"Value": "ufufufu",
"Version": 2,
"LastModifiedDate": 1559823379.852,
"ARN": "arn:aws:ssm:ap-northeast-1:1111111111:parameter/prod/rooms/users/01_hoho"
}
],
"InvalidParameters": []
}
# 参照 (get-parameter)
bash-3.2$ aws ssm get-parameter --name "/prod/rooms/users/01_hoho"
{
"Parameter": {
"Name": "/prod/rooms/users/01_hoho",
"Type": "String",
"Value": "ufufufu",
"Version": 2,
"LastModifiedDate": 1559823379.852,
"ARN": "arn:aws:ssm:ap-northeast-1:1111111111:parameter/prod/rooms/users/01_hoho"
}
}