🗂

CloudFormation の AllowedValues を使ってパラメータを制御する

に公開

はじめに

AWS CloudFormation を使っていると、スタック作成時にユーザーに入力させたい値を Parameters で定義することがよくあります。
例えば、EC2 インスタンスタイプや環境名(dev, stg, prod など)を入力させたいケースです。

ただし、入力を自由にしてしまうと タイプミス や 意図しない値 が入ってしまい、スタックの作成に失敗したり、想定外のリソースが作られたりする可能性があります。
そこで役立つのが AllowedValues です。

AllowedValues とは?

AllowedValues は、CloudFormation パラメータに入力できる値を 候補リストで制限する機能 です。
ユーザーはそのリストに含まれる値しか指定できなくなり、それ以外を入力するとエラーになります。

使い方は下記になります。

Parameters:
  InstanceTypeParameter:
    Type: String
    Default: t3.micro
    AllowedValues:
      - t3.micro
      - t3.small
      - t3.medium
    Description: "EC2 インスタンスタイプを選択してください(t3.micro / t3.small / t3.medium)"

この例では、ユーザーは t3.micro / t3.small / t3.medium のいずれかしか選べません。
もし t2.micro を入力した場合、CloudFormation はエラーを返してくれます。

典型的なユースケースだと、下記になります。

AllowedValues:
  - dev
  - stg
  - prod

上記は、dev、staging、production といったように、環境の選択を行っており、誤って develop と入力しても弾かれるようになっています。

AllowedValues:
  - Yes
  - No

上記は、Yes / No フラグとし、true/false の代わりに文字で制御する場合に便利です。さらに、利用可能なリージョンの制御として、マルチリージョン対応のテンプレートで、デプロイ可能なリージョンを絞りたい場合などにも、AllowedValuesは、使用できます。

AllowedPattern との違い

CloudFormation には AllowedPattern というオプションもあります。これは 正規表現で値を制限する機能です。

  • AllowedValues: 値を リストで列挙
  • AllowedPattern: 値の形式を 正規表現で制御

たとえば、メールアドレス形式をチェックしたいときは AllowedPattern のほうが適しています。
一方で「候補が限られている場合」は AllowedValues のほうがシンプルで使いやすいです。

まとめ

AllowedValues についてまとめると下記のようになります。

  • AllowedValues は Parameters に入力できる値をリストで制御するオプション
  • ユーザーの入力ミスや不正な値を防ぐのに有効
  • AllowedPattern と組み合わせることで、より強力に入力を制御できる

CloudFormation テンプレートをメンテナンスしていると、スタック作成時のちょっとした入力ミスが原因で無駄なデバッグ時間を使うこともあります。
そんなときこそ、AllowedValues を活用してテンプレートの堅牢性を高めると良いでしょう。

Discussion