
AWS System Manager Parameter Storeでは入力値のバリデーションを設定できる
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、CX事業本部 IoT事業部の若槻です。
最近知ったのですが、AWS System Manager Parameter StoreのPutParameter APIにはAllowedPatternというオプションがあり、これを使えば指定した正規表現パターンでパラメーターの入力値をバリデーションできるようです。
AllowedPattern
A regular expression used to validate the parameter value. For example, for String types with values restricted to numbers, you can specify the following: AllowedPattern=^\d+$
これにより、ユーザーが運用管理のためにコンソールなどからパラメーターの設定値を変更する際に、誤って異常な値を指定してしまうオペミスをある程度防ぐことができます。
やってみた
まず、AWSマネジメントコンソールからのパラメーターの作成だと、AllowedPatternの設定メニューが無いようです。

よってAllowedPatternを設定したい場合はAWS CLIやAWS SDKなどからAPIを用いてパラメーターを作成する必要があります。ここではAWS CLIで試してみます。
AllowedPatternで^(true)|(false)$と指定することにより、Boolean値(trueまたはfalse)のみを指定できるようにしています。
$ aws ssm put-parameter \ --name "hoge" \ --value "true" \ --allowed-pattern "^(true)|(false)$" \ --type String
マネジメントコンソールを見ると、パラメーターが作成されています。ただしAllowedPatternが設定されている場合でもコンソールからはそのことは分からないようです。

パラメーターの値を変更してみます。

true、false以外の値を指定して保存してみます。

Parameter value, cannot be validated against allowedPattern: ^(true)|(false)$
するとエラーとなり保存が失敗しました。ここで初めて^(true)|(false)$というバリデーションが設定されていることがコンソールからも確認できました。

falseを指定すると、正常に保存できました。

値がちゃんと上書きされていますね。

AllowedPatternを無効にする
ここで、AllowedPatternが設定されたパラメーターに対して、AllowedPatternを指定せずに値を上書きしてみます。
$ aws ssm put-parameter \ --name "hoge" \ --value "true" \ --type String \ --overwrite
コマンド実行は成功しました。
コンソールから値の変更を試してみると、エラーとなりました。先程のバリデーションがまだ有効なようです。

それではAllowedPatternの設定値を変更できるのでしょうか。先程とは異なるバリデーションを設定してみます。
$ aws ssm put-parameter \ --name "hoge" \ --value "true" \ --allowed-pattern "^(true)|(false)|(abc123)$" \ --type String \ --overwrite
コマンド実行は成功しました。
コンソールから値の変更を試してみると、新しいバリデーションの値を指定できました。

つまり下記のように^.*$と指定すれば、設定されているAllowedPatternを実質的に無効化することができるようです。
aws ssm put-parameter \ --name "hoge" \ --value "true" \ --allowed-pattern "^.*$" \ --type String \ --overwrite
上記を実行すると、ここまで設定したバリデーションに一致しない値でも指定できるようになりました。

おわりに
AWS System Manager Parameter StoreでAllowedPatternを試してみました。
AWS AppConfigでは設定値のバリデーションが使えますが、Parameter Storeでも正規表現を使って可能というのは知りませんでした。実装でParameter Storeを使う機会はとても多いので、今後活用していきたいと思います。
参考
- AWS SSM Parameter StoreのString型とStringList型はどう違う? | DevelopersIO
- Regular expressions - JavaScript | MDN
以上






