こんにちは、Masuyama です。
CloudFormation が大好きなので検証する時は大抵テンプレートからリソースを作成しているのですが、
いくつかパラメータを入力する時に思った通りの順番にならないことが地味に気になっていました。
パラメータ入力順を指定しない時
例を示します。
下記のテンプレート内では以下 5 つのパラメータを上から指定しています。
- EnvironmentName
- VPCCIDR
- PrivateSubnetCIDR
- Ec2ImageId
- Ec2InstanceType
- KeyPair
...
Parameters:
EnvironmentName:
Type: String
Default: xxxxxxxx-env
VPCCIDR:
Type: String
Default: 10.3.0.0/16
PrivateSubnetCIDR:
Type: String
Default: 10.3.0.0/24
Ec2ImageId:
Type: AWS::SSM::Parameter::Value<String>
Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
Ec2InstanceType:
Type: String
Default: t3.nano
KeyPair:
Type: String
Default: CfKeyPair
...
しかし、テンプレートをアップロードした時にはランダムなパラメータ入力順となり、テンプレート内で (上から) 記述している順番とは全く異なっています。
パラメータ数が少ないうちならそこまで気になりませんが、多くなってくると混乱や入力ミスのもとになりますので、入力順を指定するようにしてみましょう。
パラメータ入力順を指定する
パラメータグループを設定
入力順を指定するにあたり、まずはパラメータをいくつかのグループに分けるという作業をします。
例えば VPC 関連のパラメータ、EC2 関連のパラメータと分けるといった作業です。
(入力順を指定するだけであれば、すべてのパラメータを 1 つのグループに入れてしまっても構いませんが、グルーピングしてあげた方が可視性が上がるのでオススメです。)
ここでは次のようにグルーピングします。
- Stack 関連
- EnvironmentName
- VPC 関連
- VPCCIDR
- PrivateSubnetCIDR
- EC2 関連
- Ec2ImageId
- Ec2InstanceType
- KeyPair
テンプレート上でパラメータグループを指定
この場合、テンプレート内の冒頭に [MetaData] > [AWS::CloudFormation::Interface] > [ParameterGroups] という枠を作って指定してあげます。
AWSTemplateFormatVersion: "2010-09-09"
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
-
Label:
default: Stack Configuration
Parameters:
- EnvironmentName
-
Label:
default: VPC Configuration
Parameters:
- VPCCIDR
- PrivateSubnetCIDR
-
Label:
default: EC2 Configuration
Parameters:
- Ec2ImageId
- Ec2InstanceType
- KeyPair
...
テンプレートをアップロード
上記テンプレートをアップロードすると、パラメータグループごとに分かれており、更にテンプレート内で上から指定した順序でパラメータを入力するように欄が作られました。
入力時の可視性も上がりますし、毎回同じ順番で入力することになるので入力ミスも減ることにも繋がります。
また、テンプレート自体も読みやすくなりますので、積極的にパラメータグループは使っていこうと思います。