入門 AWS CloudFormation #3（EC2とパラメータ編）

インフラやクラウドの専門というわけではないのですがそろそろIaC周りもちゃんと勉強しておきたい・・・という感じなのでAWSのCloudFormationについて入門しつつ復習として記事にまとめておきます。

※とりあえず最初ということでEC2を絡めたごく基本的なところの記事を書いていきます。将来もしかしたら3記事目以降を執筆して追加のEC2関係や他の様々なサービスや機能などにも触れていくかもしれません。

# 注意事項と前記事までの振り返り

本記事の処理を動かすとEC2関係などで色々と追加になったり起動したりします。その辺はリソースの停止や削除などをしないとお金がかかったりしてくる可能性があるためご注意ください。

また、本記事は3記事目となります。前回までの内容を踏襲していく形となっているのでご注意ください。

1記事目:

https://qiita.com/simonritchie/items/330391e741f394897550

2記事目:

https://qiita.com/simonritchie/items/a1922199a5b6d131dca9

前回までに設定した主な内容:

- CloudFormationのテンプレートへのEC2インスタンスリソースの追加
  - キーペアやセキュリティグループなども含む
- CloudFormationのテンプレートへのセキュリティグループのリソースの追加

前回までの時点でYAMLテンプレートは以下のようになっておりこの内容を踏襲していきます。

```yaml
AWSTemplateFormatVersion: "2010-09-09"
Resources:
  MyFirstEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0590f3a1742b17914
      InstanceType: t2.nano
      KeyName: cloudformation-test-2
      SecurityGroups:
        - default
        - Ref: MySecurityGroup
  MySecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: My new security group
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0
```

また、前回の記事中で追加したインスタンスリソースを（コストなどの面を加味して）停止状態などにしていた場合には再開前に起動しておく必要があります（起動していないとCloudFormationの操作でエラーになったりします）。

# 本記事で触れること

- CloudFormationのパラメータ関係

# CloudFormationのパラメータの概要

CloudFormationのパラメータの機能ではテンプレートの内容を反映する際に設定しておいたパラメータを変動させたりすることができます。

たとえばいくつかのインスタンスタイプをパラメータとして選択できるようにしておいて、テンプレートの内容反映時に必要なものを選択する・・・といった制御を行うことができます。環境変数とかに少し雰囲気が近い感じでしょうか。

書き方としては以下のような記述になります。`Parameters`部分は`Resources`などと同じ階層（インデント数）に配置します。

```yaml
Parameters:
  <パラメータの論理ID>:
    Type: <パラメータの型>
    # ...以降は必要な各種設定
```

設定できる主な各キーは以下のようになっています。それぞれ詳しくは後の節で触れていきます。また、Typeなどのキーを除いて多くの各キーの値は省略可です。

- Type: パラメータの型（文字列や数値、リストなど）を指定します。
- Description: パラメータの説明文です（本記事執筆時点では最大4000文字）。
- AllowedPattern: 設定されたパラメータに対して正規表現でチェックを設定できます。正規表現のパターンにマッチしない場合弾かれます。
- AllowedValues: 選択できるパラメータのリストを指定します。CloudFormationのwebコンソール上では選択フォームとして扱われます。
- ConstraintDescription: 不正なパラメータが設定された際に表示されるエラーの説明文です。
- Default: パラメータの初期値です。パラメータ未指定時などにはこの値になります。
- パラメーターの説明文です。webコンソール使用時にはUI上にも表示されます。
- MaxLength: パラメータの型に文字列（String）を指定した際に使用できる最大文字数の設定です。
- MinLength: パラメータの型に文字列（String）を指定した際に使用できる最小文字数の設定です。
- MaxValue: パラメータの型に数値（Number）を指定した際に使用できる最大値の設定です。
- MinValue
- NoEcho: パラメータの値をマスクしてコンソール、CLI、APIなどで表示されないようにするかどうかの設定です。※機密情報などはこの設定で扱わず、基本的にテンプレート内にも埋め込まないように・・・といったことがドキュメントに記載されています。

例としてインスタンスタイプの選択式のパラメータを扱う場合、型は文字列（String）、デフォルト値はt2.nano、選択可能な値はm1.nano、t2.micro、m1.smallの場合、以下のようなテンプレートの記述になります。

```yaml
Parameters:
  InstanceTypeParameter:
    Type: String
    Default: t2.nano
    AllowedValues:
      - t2.nano
      - t2.micro
      - t2.small
```

用意したパラメータをテンプレート上の別のリソースから参照するには2記事目で触れたRefなどの組み込み関数を使用することで対応することができます。`Ref <パラメータ名>`といったように書きます。

例えばEC2インスタンスのリソース上でインスタンスタイプのパラメーターを参照したい場合以下のような感じになります。

```yaml
...
Resources:
  MyFirstEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0590f3a1742b17914
      InstanceType: Ref InstanceTypeParameter
...
```

# パラメータで使用できる型

パラメータのTypeのキーに指定できる型には主に以下のようなものが存在します。

- `String`: 文字列。例 : `t2.nano`
- `Number`: 整数や浮動小数点数の数値。例 : `8888`
- `List<Number>`: コンマ区切りの整数もしくは浮動小数点数。例 : `10,20`
- `CommaDelimitedList`: コンマ区切りの文字列。例 : `development,staging,production`
- AWS固有のパラメータ: `AWS::EC2::Instance::Id`などのAWS固有の値。サポートされている定義などは以下のドキュメントをご参照ください。
  - https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html#aws-specific-parameter-types

その他にもSSM (AWS System Manager)パラメータと呼ばれるパラメータストア内のパラメータも参照することができます。その場合`AWS::SSM::Parameter::Name`みたいな記述になるようです（この辺までは恐らく本記事では触れません）。

# インスタンスタイプを選択する形のパラメータ設定をしたテンプレートをアップロードしてみる

実際にパラメータをテンプレートに設定してYAMLファイルをアップロードして挙動を試してみます。

なお、パラメーター名を参照する部分で`Ref`関数を使用していたのですが短縮系ではない場合cfn-lintのチェックでE3030のエラーにて引っかかったようです。理由はドキュメント眺めていた感じはっきりとしていませんが代わりに短縮系の`!Ref`を使ったらチェックに通りました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/493fd3bc-ce3b-534e-56b1-acb1c32eefad.png)

そのため以降の節では`!Ref`の短縮系の方を使用していきます。

パラメータの設定としては選択方式のインスタンスタイプとして`InstanceTypeParameter`という論理名で設定しています。以下のようになっています。

```yaml
Parameters:
  InstanceTypeParameter:
    Type: String
    Default: t2.nano
    AllowedValues:
      - t2.nano
      - t2.micro
      - t2.small
```

EC2インスタンスリソース側では以下のように`!Ref`関数でインスタンスタイプのパラメータの論理名を指定しています。

```yaml
      InstanceType: !Ref InstanceTypeParameter
```

yaml全体としては以下のようになっています。

```yaml
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
  InstanceTypeParameter:
    Type: String
    Default: t2.nano
    AllowedValues:
      - t2.nano
      - t2.micro
      - t2.small
Resources:
  MyFirstEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0590f3a1742b17914
      InstanceType: !Ref InstanceTypeParameter
      KeyName: cloudformation-test-2
```

前記事までと同様にスタックのページで既存のスタックを選択してスタックアクション → 既存スタックの変更セットを作成 → 既存テンプレートを置き換える → テンプレートファイルのアップロードを選択して対象のYAMLファイルをアップロードしていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/bdfa295e-05ae-e60c-3940-8cfcc7a88a21.png)

アップロード後に次へボタンをクリックするとパラメータの画面になります。

今回は`InstanceTypeParameter`という論理名のパラメータをYAML内で設定していたのでそのパラメータのUIのみ表示されています。`AllowedValues`キーに値を設定していたので選択フォームになっています。また、初期選択は`Default`に指定した`t2.nano`になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/7745990b-3129-030f-095b-357068c07c85.png)

選択フォームの中身は`AllowedValues`のリストで指定した各値になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/6c566377-c61f-c09a-df41-0946b9baafe8.png)

今回は試しに`t2.micro`を選択して進めていってみます。タグなどの設定はデフォルトのまま変えずに進めます。

変更セット名は`add-instance-type-parameter`としました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/456aa0a8-d1cc-8286-556e-dfbeb0692cb7.png)

あとはそのまま変更セットの実行を行っていきます。イベントのステータスで`UPDATE_COMPLETE`などになるまで待ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/426836b8-8dc4-b3ea-73cb-32ff535222b1.png)

EC2インスタンスのページに遷移してみるとちゃんとインスタンスタイプが`t2.micro`になっていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/c808d81a-610e-f079-ec14-195a4452d68b.png)

# 様々な型と設定でのUI表示を確認してみる

以降の節では各型や設定を変更した際のwebコンソール上のUIの変化などを試しつつ確認していきます。

## 単純なString型の指定の場合には自由入力となる

`AllowedValues`などを指定せずに単純に`Type`に`String`を指定すると単純な自由入力のフォームのみ表示されます。

試しに以下のようにシンプルなパラメータをYAML上で行ってみます。

```yaml
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
  InstanceTypeParameter:
    Type: String
Resources:
  MyFirstEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0590f3a1742b17914
      InstanceType: !Ref InstanceTypeParameter
      KeyName: cloudformation-test-2
```

変更セットの実行などまでは行いませんがテンプレートファイルのアップロードを行ってみてパラメータ画面まで進めてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/2f9eb386-f6d0-5eeb-ae84-28f8e70e2a51.png)

自由入力のフォームのみ表示されました。デフォルト値などは設定していないのですが、変更セットの場合前回の設定値が参照されているのか`t2.micro`という値が最初から入っていました。

## 単純なNumber型の指定の場合には数値調整のUI付きの自由入力となる

`AllowedValues`などを指定せずに単純に`Type`に`Number`を指定してみます。試しに`IndexParameter`という適当な論理名で設定しました。

```yaml
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
  IndexParameter:
    Type: Number
Resources:
  MyFirstEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0590f3a1742b17914
      InstanceType: t2.nano
      KeyName: cloudformation-test-2
```

今度は自由入力の形式のままで、ただしキーボードの上下のキーで増減できたり右端の上下のUIで数値を上下できる形になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/794c2b42-22eb-8227-4f3c-fcb7d656cac5.png)

## 単純な`List<Number>`や`CommaDelimitedList`型の指定の場合には自由入力となる

`AllowedValues`などを指定せずに単純に`List<Number>`や`CommaDelimitedList`の型を指定すると単純な自由入力のフォームのみ表示されます。値はフォーム上でコンマ区切りで指定します。

まずは`List<Number>`で指定してみます。

```yaml
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
  IndicesParameter:
    Type: List<Number>
Resources:
  MyFirstEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0590f3a1742b17914
      InstanceType: t2.nano
      KeyName: cloudformation-test-2
```

数値を上下させるUIなども表示されない形でシンプルな自由入力のフォームとなりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/34d2cb13-408b-fca6-8996-38d2c5e45aff.png)

続いて`EnvParameter`という論理名で`CommaDelimitedList`を指定してみます。

```yaml
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
  EnvParameter:
    Type: CommaDelimitedList
Resources:
  MyFirstEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0590f3a1742b17914
      InstanceType: t2.nano
      KeyName: cloudformation-test-2
```

こちらもシンプルな自由入力のフォームとなりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/5197257b-264c-95de-2e52-ac7c77962c67.png)

## AWS固有のパラメータを指定した場合にはプルダウンとなる（一部例外有り）

AWS固有のパラメータ（例 : `AWS::EC2::KeyPair::KeyName`など）を指定した場合にはプルダウンとなります。

指定できる固有のパラメータは以下のページで一覧を確認できます。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html#aws-specific-parameter-types

今回はキーペア名のリスト参照となる`AWS::EC2::KeyPair::KeyName`という指定を`KeyNameParameter`という論理名で指定してみます。

なお、現在の環境ではCloudFormationの[1記事目](https://qiita.com/simonritchie/items/330391e741f394897550)で準備したように2つのキーペアが追加してあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/187bfbce-893f-bd30-d329-df1ff2db0e9e.png)

YAMLは以下のようにしました。

```yaml
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
  KeyNameParameter:
    Type: AWS::EC2::KeyPair::KeyName
Resources:
  MyFirstEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0590f3a1742b17914
      InstanceType: t2.nano
      KeyName: !Ref KeyNameParameter
```

アップロードしてみると既存のキーペア名の一覧に対するプルダウンが表示されます。検索もできるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/0c89f5a5-82b6-10ae-3795-8101b5eb926a.png)

ただし一部のものはプルダウンにはならずに自由入力となるようです。ドキュメント上に「このパラメータータイプの値のドロップダウンリストが表示されないことに注意してください。」といったような記述があるとプルダウンが表示されません。

たとえば`AWS::EC2::Image::Id`は表示されません。理由に関しては正確なものは分かりませんがクラスメソッドさんの記事には以下のように書かれていました。

> おそらくAMI IDは選択肢が多すぎるからでしょう。

https://dev.classmethod.jp/articles/list-of-cloudformation-parameters-by-data-type/

試しに`ImageIdParameter`という名前で`AWS::EC2::Image::Id`を指定してみます。

```yaml
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
  ImageIdParameter:
    Type: AWS::EC2::Image::Id
Resources:
  MyFirstEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0590f3a1742b17914
      InstanceType: t2.nano
      KeyName: cloudformation-test-2
```

シンプルな自由入力のフォームとなりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/6675e237-a753-c85f-7148-19e18d773326.png)

# Descriptionのキーを設定してみる

続いて`Description`キーに値を設定してみて挙動を確認していきます。「設定するキーペア名を指定してください。」というメッセージを設定してみました。

```yaml
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
  KeyNameParameter:
    Type: AWS::EC2::KeyPair::KeyName
    Description: 設定するキーペア名を指定してください。
Resources:
  MyFirstEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0590f3a1742b17914
      InstanceType: t2.nano
      KeyName: !Ref KeyNameParameter
```

いつも通り変更セットを作成する形で進めます。

アップロードが完了すると「???????????????????」という表示になってしまいました。どうやらこの辺も日本語はサポートされていないようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/a5bf8502-944e-a128-ff12-55583b2e63bc.png)

気を取り直して日本語の部分を「Select a key pair name to use.」と調整します。スペースが含まれているのでクォーテーションで囲っています。

```yaml
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
  KeyNameParameter:
    Type: AWS::EC2::KeyPair::KeyName
    Description: "Select a key pair name to use."
Resources:
  MyFirstEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0590f3a1742b17914
      InstanceType: t2.nano
      KeyName: !Ref KeyNameParameter
```

再度アップしてみます。今度はちゃんとパラメータの論理名の下にDescriptionで指定した説明が表示されました。このような形で`Description`の設定はwebコンソールのUI上に表示されるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/56b540cb-0654-2d43-3e49-3e9d0273c27a.png)

# AllowedPatternのキーを設定してみる

続いて`AllowedPattern`のキー設定を試していきます。

受け付けるパラメータの値の正規表現のパターン設定となります。

お試しとして適当に3桁の数字をハイフン区切りで3つ設定されるパラメータを考えてみます（例 : 000-111-222）。論理名も雑ですが`TestParameter`としました。

```yaml
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
  TestParameter:
    Type: String
    AllowedPattern: \d{3}-\d{3}-\d{3}
Resources:
  MyFirstEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0590f3a1742b17914
      InstanceType: t2.nano
```

YAMLをアップロードして、試しにわざとエラーになるようにハイフン無しの数字で入力してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/4bf91775-3a52-b104-e73b-c045fbcd2d37.png)

そのまま変更セットの作成のところまで画面を進めました（特にパラメータ入力直後にエラーになったりはしないようです）。

変更セット作成の箇所でどうやらエラーで弾かれ、レビュー画面に戻されるようです（`Parameter 'TestParameter' must match pattern \d{3}-\d{3}-\d{3}`とエラーメッセージが表示されました）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/f69bd00f-16ea-b2d8-2795-ab70d1b8e18c.png)

パラメータ部分の編集ボタンを押して正常な値を指定してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/729bbb8f-600c-7c69-0560-b4bb8ed7f126.png)

今度はエラーなく変更セットの作成ボタン押下後の処理が進んでくれました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/e1c70906-112c-1f05-be16-c4935ea153cf.png)

# ConstraintDescriptionのキーを設定してみる

`ConstraintDescription`のキーに対する設定を進めます。エラー時に表示される補助的なエラーメッセージの設定・・・と各資料を読んだ感じ考えています。

恐らくこちらも英語で設定する必要がありそうな印象なので「TestParameter must be specified as three 3-digit numbers separated by hyphens.」と指定しておきました。

また、わざとエラーとしたいため前節の`AllowedPattern`の内容をそのまま流用しています。

```yaml
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
  TestParameter:
    Type: String
    AllowedPattern: \d{3}-\d{3}-\d{3}
    ConstraintDescription: "TestParameter must be specified as three 3-digit numbers separated by hyphens."
Resources:
  MyFirstEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0590f3a1742b17914
      InstanceType: t2.nano
```

YAMLをアップロードして再度エラーになるパターンのパラメータを設定していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/ec394494-c7c2-d0c8-1ff5-b692498d576d.png)

そのまま変更セットの作成まで進めると、AWSのデフォルトのエラーの代わりに`ConstraintDescription`キーに設定したエラーメッセージが表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/c7424732-a74a-7881-bffd-def7fb9e7899.png)

# MinLengthとMaxLengthのキーを設定してみる

文字列の最大の長さと最小の長さを指定する`MinLength`と`MaxLength`のキーを設定して試していきます。`MinLength`の方を3、`MaxLength`の方を6としました。

```yaml
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
  TestParameter:
    Type: String
    MinLength: 3
    MaxLength: 6
Resources:
  MyFirstEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0590f3a1742b17914
      InstanceType: t2.nano
```

ついでに英語なら文字数判定大丈夫でしょう・・・ということで、試しにわざと日本語でパラメータを入力してみます。

なお、余談ですが本記事執筆中に変更セット名の入力の画面がパラメータ入力の画面と同時になりました（ちょうどアップデートが入った感じでしょうか・・・？）。

パラメータは日本語7文字で弾かれるようにしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/98283334-060d-9f48-e6e9-a3846625a7fb.png)

レビュー画面の送信ボタンクリック時にちゃんとエラーで弾かれました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/97c51d22-312d-1058-7291-6ce875c40d30.png)

パラメータの編集ボタンをクリックして、今度は`MinLength`側で引っかかるように2文字でパラメータを設定してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/fc257d21-27ef-df33-ef1e-093af2c1dd1b.png)

こちらも同様にエラーで弾かれました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/4d21a177-10b0-2fe3-9455-15cc09a3a8d1.png)

こんどは正常に通るように3文字でパラメータを設定してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/d1fed14c-bb1d-b41a-ec80-a309ec8928ec.png)

今度は正常に変更セットの作成が通りました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/23e5a005-58a5-fd31-f461-a90858fd9be6.png)

# MinValueとMaxValueのキーを設定してみる

本記事の最後として数値の型のパラメータの最小値と最大値の制限を加えるための`MinValue`と`MaxValue`のキーについて触れていきます。基本的には`MinLength`などと同じように動作すると考えています。

今回は`MinValue`を10、`MaxValue`を`100`としてみました。

```yaml
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
  TestParameter:
    Type: Number
    MinValue: 10
    MaxValue: 100
Resources:
  MyFirstEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0590f3a1742b17914
      InstanceType: t2.nano
```

YAMLをアップロードして`MinValue`側で引っかかるようにパラメータに9を指定してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/ed578484-96c0-952e-8273-4f001edbb19a.png)

今までと同じようにエラーになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/8cef414f-4020-9985-b525-52f216fcc623.png)

今度は`MaxValue`側で引っかかるようにパラメータに101を指定して進めてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/a2d7c700-8804-d928-d759-bb5b45acd6dd.png)

こちらも違和感無くエラーで引っかかっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/6960ee7f-7c63-6390-f6ca-a7dd4a99c847.png)

最後に正常に通る条件として10をパラメータに指定してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/81ae8696-b510-a6c2-4306-95a872c2a838.png)

正常に変更セットの作成が通りました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228778/8ab5b71c-3d47-e116-1771-b242753bcb17.png)

# 参考文献・参考サイト・参考講座まとめ

https://www.udemy.com/course/aws-cloudformation-simplified-hands-on-learning/

https://dev.classmethod.jp/articles/cloudformation-increased-limits/

https://dev.classmethod.jp/articles/validate-vpc-cidr-block-by-terraform-and-cloudformation/

https://qiita.com/nakaken0629/items/4f599becb44ca8f2b6e6

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html

https://dev.classmethod.jp/articles/cloudfromation-used-commadelimitedlist/

https://dev.classmethod.jp/articles/list-of-cloudformation-parameters-by-data-type/