AWS CloudFormation Master Class を受けてみた④「Parameters について」

##はじめに
引き続き、Udemy にて Stephane Maarek 氏 が提供している「 [AWS CloudFormation Master Class](https://www.udemy.com/aws-cloudformation-master-class/) 」コースについて紹介していきます。今回の内容は、「 CloudFormation Parameters 」 です。

- これまでの AWS CloudFormation Master Class の記事
 - [その①](https://qiita.com/Yoshiyuki03/items/ad21f72dbfb9c9eb32fa) 
 - [その②](https://qiita.com/Yoshiyuki03/items/3ad97bbb8b9d905fa9d9)
 - [その③](https://qiita.com/Yoshiyuki03/items/0a07133a24fc6806de15)


##CloudFormation Parameters
###CloudFormation Parameters について

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/f00b0b80-1e61-b083-f59b-26f235719584.png)

 - パラメータは CloudFormation のテンプレートに入力する値を設定する方法
 - テンプレートの作成においてパラメータの設定は重要
 - パラメータを設定することで、テンプレートのミスを減らすことができる



###パラメータについて
パラメータを作成する際は、以下の設定を行うことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/94c09e81-baf2-cd12-4385-9bf5bac3e9e6.png)

- Type：パラメータのデータの型
 - String：文字列
 - Number：数値
 - List<Type>：上記の Type を配列
 - AWS Parameter：AWS 独自のパラメータ
- Description：パラメータの詳細や内容
- Constraints, ConstraintDescription(String)：制約、制約の詳細
- Min/MaxLength：string 型の最小/最大文字数
- Mi/MaxValue：num 型の最小/最大文字数
- Defaults：値を指定しなかった場合の標準設定値
- AllowedValues（array）：パラメータで使用できる値の配列
- AllowedPattern（regexp）：string 型のパターンに使用する正規表現
- NoEcho（Boolean）：値をパスワード入力時の非表示みたいに設定可能


###パラメータの見方について
それでは、実際に YAML ファイルの内容を見ながら、パラメータを見ていきましょう。
ダウンロードしたコードから「 0-parameters-hands-on.yaml 」YAML ファイルを選択して表示します。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/85e768d8-59f2-8ce6-3024-95fb50483188.png)

この1つの YAML のブロックが1つのパラメータで、これはセキュリティグループのパラメータを表しております。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/d51cafbb-3351-7d30-8f0b-bfe695c65155.png)

- SecurityGroupDescription：このパラメータの名称
 - Description：セキュリティグループの詳細
 - Type：string 型 

セキュリティグループポートのパラメータ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/6528e76c-d62a-478d-cf4c-ae4018b92cb0.png)

- SecurityGroupPort：このパラメータの名称
 - Description：最小値と最大値を含む、数値パラメータの詳細
 - Type：number 型
 - MinValue：最小数値
 - MaxValue：最大数値

EC2 インスタンスのパラメータ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/63b4c2f6-3583-4cfb-8d99-f061696f03cb.png)

- InstanceType：このパラメータの名称
 - Description：Web サーバ EC2 インスタンスタイプ
 - Type：string 型
 - Default：この場合、「t2.small」が標準設定とされている
 - AllowedValues：この場合、「t2.small」以外に選べるインスタンスタイプの値

このように、パラメータを設定することで利用できる EC2 のインスタンスタイプを制限することができます。
また、default で t2.small を設定しているため、インスタンスタイプの選択に迷っても問題なく作成することができます。

次のパラメータは、DBパスワードと KeyName というパラメータです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/2928f8f1-6187-46a0-3e9e-65f99595e354.png)

- DBPwd：パラメータの名称
 - NoEcho：「 true 」と設定しているため、値を隠す事が可能 
 - Description： データベース admin アカウントパスワード
 - Type：このパラメータは string 型

- KeyName：パラメータの名称 
 - Description：インスタンスに SSH アクセス可能な既存の EC2 キーペア名
 - Type：サポートされている AWS 固有のパラメータータイプ（ 内容は「 Amazon EC2 のキーペア名 」 ）
 - ConstraintDescription：既存の EC2 キーペア名であること 

セキュリティグループ Ingress CIDR のパラメータ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/9aea88f9-5424-346d-7de0-83a130c92340.png)

- SecurityGroupIngressCIDR：パラメータの名称
 - Description：EC2 インスタンスとの疎通に使う IP アドレス範囲
 - Type：string 型
 - MinLength：最短値
 - MaxLenght：最長値
 - Default：標準設定の IP アドレス
 - AllowedPattern：この形式に沿った IP アドレスのパターンを許可
 - ConstraintDescription：有効な IP CIDR 範囲で x.x.x.x/x. 形式が条件（制約）

一気に3つのパラメータを見てみましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/581a4e34-2dae-b15a-cc17-6c058c4f7f7a.png)

- MyVPC：パラメータの名称
 - Description：VPC の動作について
 - Type：AWS 固有のパラメータータイプ（ 内容は「 VPC ID (vpc-a123baa3 など) 」 ） 

- MySubnetIDs：パラメータの名称
 - Description：サブネット ID のリスト
 - Type：AWS 固有のパラメータータイプ（ 内容は「サブネット ID (subnet-123a351e など)」 ） 

- DbSubnetIpBlocks：パラメータの名称
 - Description：カンマで区切られた3つの CIDR ブロック
 - Type：カンマで区切られたリテラル文字列の配列
 - Default："10.0.48.0/24", "10.0.112.0/24", "10.0.176.0/24" の3つを標準利用


パラメータは AWS が公式でテンプレートを紹介しているので、そちらを元に作成するのをオススメします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/00628c7c-01de-6d20-fd71-84a5c9f2ea41.png)


###パラメータの内容を確認
パラメータの内容を見てきたことで、この YAML ファイルの内容を知ることができました。それでは、実際にこのファイルをアップロードして、作成していきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/96ba4849-10f0-2f3f-7905-dc3164f07d52.png)

作成するスタックの名前を入力し、下のパラメータを確認すると、先ほど確認したパラメータの条件が、それぞれ反映されているのが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/c2138c4b-4141-4f96-64ef-837b5f9c387f.png)

パラメータを全て設定したら、「次へ」をクリックして作成していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/45b23350-7a48-8567-2bd5-c99e59814fa2.png)

もし入力したパラメータの内容に間違いがあれば、「 ERROR 」と表示され、その理由も表記されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/5d552760-4e33-0689-ebef-c359e70d543a.png)

このYAML ファイルのコードを CloudFormation Desinger にコピペすれば、図で内容を確認することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/cebfb756-af0c-fc18-6950-6d72b7773606.png)


###おわりに
CloudFormation の parameters についての紹介は以上です。これで、これまでアップロードしてきた YAML ファイルの内容について詳しくなっただけでなく、ユーザ自身で YAML を書く方法も学べたかと思います。
次回は、Resource について紹介していく予定ですので、お楽しみに。