CloudFormation の CommaDelimitedList でも AllowedValues と AllowedPattern が使えるようになりました

2022.12.28

いわさです。

CloudFormation のパラメータで複数値での自由入力を許可したい場合には CommaDelimitedList 型を使うことが出来ます。

自由入力の場合に AllowedValues や AllowedPattern でチェックを行いたいシーンがあっても文字列でないため使えなかったのですが、今回のアップデートでサポートされました。

CloudFormation のドキュメント更新履歴からは確認出来ていないですが、数週間前から公式ドキュメントではサポートされた旨が追記されていそうです。
東京リージョン、大坂リージョンでも利用が可能です。

本日は実際にテンプレートをアップロードして動作を確認してみました。

CommaDelimitedList

以下の記事のテンプレートが検証しやすくて良い感じだったので、本記事ではこちらを流用させて頂きます。
大村さんありがとうございます!

このテンプレートの場合はデフォルト値を指定しています。
実際に CloudFormation でパラメータ入力時に以下のようにカンマ区切りで行うことで、テンプレート上では配列として扱うことで来ます。

AllowedValues

AllowedValues自体は従来からある機能ですが、CommaDelimitedListタイプでも使えるようになったので以下のように指定してみます。

AWSTemplateFormatVersion: 2010-09-09
Description: WAF IPSet

Parameters:
  AllowAddresses:
    Description: IP list to allow access.
    Type: CommaDelimitedList
    AllowedValues: 
      - 10.0.0.1/32
      - 10.0.0.2/32
      - 10.0.0.3/32
      - 10.0.0.4/32
      - 10.0.0.5/32
      - 10.0.0.6/32

Resources:
  IPWhiteList:
    Type: "AWS::WAFv2::IPSet"
    Properties:
      Name: Custom-ipaddress-whitelist
      Scope: REGIONAL
      IPAddressVersion: IPV4
      Addresses: !Ref AllowAddresses

10.0.0.1/32 ~ 10.0.0.6/32 だけ許可するような設定になったはずです。
以下のようにAllowedValuesで許可されていない値を含む形でカンマ区切りで入力してみます。

おお、エラーになりましたね。

続いて以下のように許可される値だけでカンマ区切りで入力してみます。

問題なく作成されました。
このように、今までどおりカンマ区切りのフリー入力が可能ですが入力エラーを加える形で事前検証出来るようになりました。

AllowedPattern

続いてAllowedPatternも使ってみます。
こちらもAllowedPattern自体は従来から使える機能です。

今回使っているテンプレートは CIDR 形式で入力するパラメータなので、以下の記事が相性良さそうなので正規表現を流用させて頂きました。
西野さんありがとうございます!

AWSTemplateFormatVersion: 2010-09-09
Description: WAF IPSet

Parameters:
  AllowAddresses:
    Description: IP list to allow access.
    Type: CommaDelimitedList
    AllowedPattern: (^10\..+)|(^172\.(1[6-9]|2[0-9]|3[0-1])\..+)|(^192\.168\..+)

Resources:
  IPWhiteList:
    Type: "AWS::WAFv2::IPSet"
    Properties:
      Name: Custom-ipaddress-whitelist
      Scope: REGIONAL
      IPAddressVersion: IPV4
      Addresses: !Ref AllowAddresses

以下のように正規表現と一致しない値を含めてカンマ入力してみましょう。

エラーになりましたね。良いですね。

続いて正規表現に一致する値だけでカンマ区切りで構成した場合も確認してみます。

良いですね、無事作成することが出来ました。

さいごに

本日は CloudFormation の CommaDelimitedList でも AllowedValues と AllowedPattern が使えるようになったので試してみました。

今回の参考にさせて頂いた記事のように「個々の値としては特定 CIDR のみ許可したいが、でもCommaDelimitedList型で複数入力かつフリーテキスト形式で入力させたい」などの場合の入力チェックとして特に活用出来そうです。