🪂

CloudFormationでパラメータ入力順を指定する方法

2021/06/29に公開

こんにちは、Masuyama です。

CloudFormation が大好きなので検証する時は大抵テンプレートからリソースを作成しているのですが、
いくつかパラメータを入力する時に思った通りの順番にならないことが地味に気になっていました。

パラメータ入力順を指定しない時

例を示します。

下記のテンプレート内では以下 5 つのパラメータを上から指定しています。

  1. EnvironmentName
  2. VPCCIDR
  3. PrivateSubnetCIDR
  4. Ec2ImageId
  5. Ec2InstanceType
  6. 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
...

テンプレートをアップロード

上記テンプレートをアップロードすると、パラメータグループごとに分かれており、更にテンプレート内で上から指定した順序でパラメータを入力するように欄が作られました。

入力時の可視性も上がりますし、毎回同じ順番で入力することになるので入力ミスも減ることにも繋がります。
また、テンプレート自体も読みやすくなりますので、積極的にパラメータグループは使っていこうと思います。

Discussion