この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
パラメーターを保存する AWS SSM Parameter Store はタイプとして、以下の3種類が存在します。
- String
- StringList
- SecureString
SecureString はKMSで暗号化して機密データを管理するためにあります。
ドキュメントを読んだ限りでは、残り2つの String と StringList の違いがわかりにくかったため、違いを確認しました
3行まとめ
- String も StringList も参照時の動作は同じ
- StringListの場合、更新時にセパレーター(
,
)で分けた上でバリデーション可能 - StringListの場合、AWSコンソールのテキストエリアで編集すると、改行がセパレーター(
,
)に変換される
StringListタイプはほぼStringタイプだけど一部挙動が異なる
ドキュメントから String タイプと StringList タイプの定義を確認します。
String
By default, String parameters consist of any block of text you enter. For example:
abc123
Example Corp
<img src="images/bannerImage1.png"/>
StringList
StringList parameters contain a comma-separated list of values, as shown in the following examples.
Monday,Wednesday,Friday
CSV,TSV,CLF,ELF,JSON
StringList タイプはコンマで区切られた文字列というのはわかりましたが、そのコンマ区切りの文字列を String タイプとして管理しても良さそうに思えます。
参照時には、値を文字列としてまるっと取得できるだけのため、違いはありません。 しかし、更新時には、微妙な差異があります。
コンマ分割後の文字列に対してバリデーション
パラメーターを追加・更新する場合、 SSM:PutParameter API を利用します。
このAPI には AllowedPattern
オプションがあり、値の文字列パターンをバリデートできます。
String タイプの場合、値全体に対してバリデートするのに対して、 StringList タイプの場合、コンマで分割後の各文字列に対してバリデートします。
この動作を確認します。
値は文字列だけで構成されるべき(--allowed-pattern="^\d+$
)とします。
123
を String タイプで登録します。
$ aws ssm put-parameter \
--name "foo" \
--value "123" \
--allowed-pattern="^\d+$" \
--type String \
--overwrite
{
"Version": 1,
"Tier": "Standard"
}
成功です。
数字でない文字(,
)を含んだ 123,456
を String タイプで登録します。
$ aws ssm put-parameter \
--name "foo" \
--value "123,456" \
--allowed-pattern="^\d+$" \
--type String \
--overwrite
An error occurred (ParameterPatternMismatchException) when calling the PutParameter operation:
Parameter value, cannot be validated against allowedPattern: ^\d+$
バリデーションに引っかかりました。
この値を StringList タイプで登録してみましょう。
$ aws ssm put-parameter \
--name "foo" \
--value "123,456" \
--allowed-pattern="^\d+$" \
--type StringList \
--overwrite
{
"Version": 2,
"Tier": "Standard"
}
登録成功です。
値 123,456
をコンマで分割し、 123
, 456
それぞれに対してバリデートしているからです。
AWS コンソール利用時は改行がコンマとして扱われる
AWSコンソールのテキストエリアで値を編集している場合は注意が必要です。
StringList タイプの場合、保存時にテキストエリアの改行が ,
に変換されます。
例えば、テキストエリアに
123
456
と入力して保存すると、123,456
として登録されます。
コンソールの編集画面で開くと、コンマが改行に変換されることなく、初期状態は文字列そのままです。
123,456
SDK を使い、改行を含んだ値を StringList タイプとして登録してみましょう。
import boto3
ssm_client = boto3.client('ssm')
ssm_client.put_parameter(
Name='bar',
Overwrite=True,
Value="123\n456",
)
パラメーターの値としては 123\n456
として保存されます。
このパラメーターをコンソールの編集画面で開くと、
123
456
というようにテキストエリアに改行が反映されます。
このまま保存を実行すると、先に紹介した仕様の通り、改行がコンマに変換され、 123,456
として登録されます。
編集画面を一切弄らずに保存しただけなのに、違う値として更新されました。
最後に
AWS SSM Parameter Storeの String タイプと StringList タイプの細かすぎて伝わりにくい違いについて解説しました。
違いは以下の2点です
- StringList はコンマ分割後の文字列に対してバリデートされる
- StringList はコンソール編集時に改行がコンマに変換される
パラメーターにコンマ区切りの文字列を登録しており、バリデート機能を活用したい場合は StringList タイプ、それ以外の場合では、コンソールの編集画面と保存される値が一致する String タイプが余計な混乱を招かず向いているかもしれません。
それでは。