[アップデート] AWS Systems Manager Parameter Storeにintegerやjsonなど13種類のデータ型が追加されました
こんにちは。サービス開発部の武田です。
2026年11月5日に、AWS Systems Manager Parameter Storeのパラメーターに付けられるデータ型が13種類増えました。型を付けておくと、PutParameterの時点で型に合わない値が弾かれます。
これまでのDataTypeは、検証しないデフォルトのtextと、AMI ID用のaws:ec2:image、AutomationのWebhook用のaws:ssm:integrationだけでした。ポート番号やIPアドレスの形式チェックは、アプリケーション側で書くか、正規表現のAllowedPatternで済ませるしかありませんでした。今回はAWS CLIから13種類すべてを試してみました。
追加されたデータ型
ユーザーガイドに載っている13種類は次のとおりです。
| 型 | 検証内容 | StringList | 階層 |
|---|---|---|---|
aws:region |
実在するリージョン名 | 不可 | 標準可 |
aws:account:id |
12桁の形式。アカウントの実在は確認しない | 可 | 標準可 |
boolean |
true / false(小文字・大文字・先頭大文字)と0 / 1 |
不可 | 標準可 |
integer |
符号付き32ビット整数 | 不可 | 標準可 |
float |
64ビット浮動小数点数 | 不可 | 標準可 |
binary |
0と1のみ |
不可 | 標準可 |
hostname |
ホスト名 | 不可 | 標準可 |
email |
メールアドレス | 可 | 標準可 |
ipv4-address |
単一のIPv4アドレス | 可 | 標準可 |
ipv6-address |
単一のIPv6アドレス | 可 | 標準可 |
url |
スキームとホストを含むURL | 不可 | アドバンスドのみ |
json |
トップレベルがオブジェクトか配列のJSON | 不可 | アドバンスドのみ |
jsonc |
コメント付きJSON | 不可 | アドバンスドのみ |
追加された13種類は、すべてSecureStringにも対応しています。
検証環境
- AWS CLI 2.36.30
- 東京リージョン(ap-northeast-1)
- 検証日は2026年11月9日
型に合わない値はPutParameterで弾かれる
--data-typeを付けてput-parameterを呼ぶだけです。
aws ssm put-parameter --name /myapp/port --type String --data-type integer --value 443
型に合わない値を渡すとValidationExceptionになります。
An error occurred (ValidationException) when calling the PutParameter operation: The parameter value is not a valid integer. A value must be an optional minus sign followed by digits, with no leading zeros, no plus sign, no decimal point and no whitespace.
標準階層で使える10種類について、通る値と弾かれる値を試しました。結果は次のとおりです。
| 型 | 通った値 | 弾かれた値 |
|---|---|---|
aws:region |
us-east-1、af-south-1 |
us-east-9、Tokyo |
aws:account:id |
123456789012 |
1234-5678-9012、11桁 |
boolean |
true、FALSE、1 |
tRue、yes |
integer |
443、-42、2147483647 |
2147483648、007、+7、7.0 |
float |
3.14、1e5 |
NaN、Infinity、1e-999、1e999 |
binary |
0011 |
012、QUJD |
hostname |
www.example.com、myhost、xn--wgv71a119e.jp |
_dmarc.example.com、192.0.2.1、日本語.jp |
email |
user@example.com |
Mary <mary@example.com>、user@localhost |
ipv4-address |
192.0.2.1 |
10.0.0.0/16、192.168.001.1、192.0.2.1:80 |
ipv6-address |
2001:db8::1、2001:db8:0:0:0:0:0:1 |
2001:db8::/32、[2001:db8::1]、fe80::1%en0 |
結果はすべてドキュメントの記載どおりでした。エラーメッセージは理由まで書いてくれます。integerの範囲外は「outside the supported integer range」と返ってきました。hostnameのアンダースコアは「It contains an underscore」です。日本語ドメインには「Give an internationalized name in punycode (xn--).」と、punycodeで書くよう案内が出ます。
emailのMary <mary@example.com>のような表示名付きの形式は、空白を含むという理由で弾かれました。
The parameter value is not a valid email address. It contains whitespace or a control character.
型名を間違えたときは、型名がすべて小文字であることを教えてくれます。
The following data type is not supported: int. (Data type names are all lowercase.)
url、json、jsoncはアドバンスド階層が必要
アドバンスド階層で試した結果は次のとおりです。
| 型 | 通った値 | 弾かれた値とメッセージ |
|---|---|---|
url |
https://example.com、ftp://example.com/path |
example.comとmailto:user@example.comは「It must start with a scheme followed by ://」、https://user:pass@example.comは「It contains a password. Store secrets in AWS Secrets Manager.」 |
json |
{"port":443}、[1,2] |
42は「must be a JSON object or array」、{"a":1,"a":2}は「duplicate object key」、末尾カンマとコメントは「not valid JSON」 |
jsonc |
{"port":443 /* HTTPS */}、//の行コメント入り |
末尾カンマは「not valid JSONC」 |
パスワード入りのURLには、Secrets Managerを使うよう促すメッセージが返ってきます。
標準階層でjsonを指定すると、次のようなエラーになります。--tierを省略した場合も同じでした。
The json data type is only supported for advanced parameters.
--tier Intelligent-Tieringを付けると、アドバンスド階層で作られました。アドバンスド階層のパラメーターは保管料金がかかるので、json型を使いたいだけの場合も料金を確認しておきましょう。
StringListとSecureString
StringListでは要素ごとに検証され、何番目の要素が不正かがメッセージに出ます。
aws ssm put-parameter --name /myapp/notify-to --type StringList --data-type email \
--value 'a@example.com,bad'
Element 2 of the StringList: The parameter value is not a valid email address. It has no @.
StringListに対応していない型を指定すると、作成自体が失敗します。
The integer data type is not supported for the following input type: StringList
SecureStringでも検証は同じように動きます。S3cretValueをinteger型で入れたときのメッセージは、Stringのときと同じでした。メッセージに値は含まれていません。
上書きで型を省略すると、既存の型が引き継がれる
既存のパラメーターの型は後から変えられます。1つのパラメーターに対して、上から順に操作した結果は次のとおりです。
| 手順 | 結果 | 型 |
|---|---|---|
1. abcを型指定なしで作成 |
成功 | text |
2. --data-type integerでabcに上書き |
失敗 | textのまま |
3. --data-type integerで1に上書き |
成功 | integer |
4. 型指定なしでnotanintに上書き |
失敗 | integerのまま |
5. 型指定なしで2に上書き |
成功 | integer |
6. --data-type textでnotanintに上書き |
成功 | text |
注意したいのは手順4です。--data-typeを省略して上書きすると、型はデフォルトのtextに戻らず、既存のintegerが引き継がれて検証が続きます。
値の変更で型が外れないのは安全側の動きです。検証を外したいときは--data-type textを明示します。
jsonなどアドバンスド専用の型に変えるときは、--tier Advancedも一緒に指定しないと失敗します。
取得すると値は文字列で返る
integer型のパラメーターを取得しても、値は文字列です。
aws ssm get-parameter --name /myapp/port \
--query 'Parameter.{Value:Value,Type:Type,DataType:DataType}'
{
"Value": "443",
"Type": "String",
"DataType": "integer"
}
アプリケーション側で数値に変換する処理は、これまでどおり必要です。型が保証するのは、数値に変換できる値が入っていることだけです。
describe-parametersでは型で絞り込めます。
aws ssm describe-parameters --parameter-filters Key=DataType,Values=json,jsonc
存在しない型名を渡すとInvalidFilterValueになりました。
まとめ
13種類とも、ドキュメントに書かれた境界値のとおりに検証されました。既存のput-parameterに--data-typeを足すだけで使え、上書きで型を省略しても検証は外れません。
これまでAllowedPatternの正規表現で書いていたポート番号やIPアドレスのチェックは、標準階層のまま型に置き換えられそうです。
どなたかの参考になりましたら幸いです。


