🔧

AWS CloudFormation でスタック作成時にパラメータを入力する方法

2021/04/11に公開

こんにちは、Masuyama です。

他の記事、AWS CloudFormation で VPC とサブネットを作ってみる では以下のような構成を CloudFormation でコードベースで作成しました。

  • VPC x 1
  • サブネット x 2
    • パブリックサブネット x 1
    • プライベートサブネット x 2
  • インターネットゲートウェイ x 1
  • NAT ゲートウェイ (プライベートサブネット用)

その際には、各種タグ名や IP アドレスはコードに固定値として入力していました。
しかし、同じような構成のスタックをもう一つ作ろうとなった時にはタグ名や IP アドレスをいちいち編集する必要があって面倒です。

そんな時 Parameters という設定を使うことで、スタック作成時に好きなパラメータを受け付けるようにすることが出来るのでその方法を紹介します。

Parameters を使わない時

まずは Parametes を使わない時を見ていきます。
簡単のため、VPC 1 つとサブネット一つだけ作る場合のテンプレートファイル見てみます。

AWSTemplateFormatVersion: 2010-09-09

Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.1.0.0/16
      Tags:
        -
          Key: Name
          Value: ${EnvironmentName}-VPC

  Subnet:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.1.1.0/24
      MapPublicIpOnLaunch: true
      VpcId: !Ref VPC
      AvailabilityZone: ap-northeast-1a
      Tags:
        - Key: Name
          Value: test-PrivateSubnet

Parametes を使う方法

次に、スタック作成時に一部のパラメータを毎回入力する方式です。
毎回入力というと面倒に聞こえますが、少しずつ環境を変えたいときや、使い回したい時にこそ便利な機能です。

AAWSTemplateFormatVersion: 2010-09-09

Parameters:
  EnvironmentName:
    Type: String
    Default: test-environment

  VpcCIDR:
    Type: String
    Default: 10.0.0.0/16

  SubnetCIDR:
    Type: String
    Default: 10.0.0.0/24

Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Ref VpcCIDR
      Tags:
        -
          Key: Name
          Value: !Sub ${EnvironmentName}-VPC

  Subnet:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: !Ref SubnetCIDR
      MapPublicIpOnLaunch: true
      VpcId: !Ref VPC
      AvailabilityZone: ap-northeast-1a
      Tags:
        - Key: Name
          Value: !Sub ${EnvironmentName}-Subnet

Parameters の欄でユーザに入力させたいパラメータを定義します。
ここではデフォルト値も設定しています。

さらに入力した値は組み込み関数 !Ref を使って参照できるので、VPC やサブネット設定時の値としてそれぞれ利用したり、Name タグの文字列の一部として使用することができます。
ポイントとしてはパラメータをそのまま使うときは "!Ref xxxxx" の形式で使うことができることです。
また、上記例での Name タグのように文字列の一部として使うときには !Sub (CloudFormation の組み込み関数 Fn::Sub の短縮形) の後に "${xxxxx}" の形式で埋め込む必要があるという点です。

CloudFormation でこのテンプレートファイルをアップロードすると、スタック作成時に定義したパラメータの入力を求められるので設定していきます。
今回はデフォルト値から変更した値を設定します。

実際に作成された VPC とサブネットを確認してみると、確かに Name と CIDR はそれぞれパラメータとして入力した値が埋め込まれていることが分かります。

その他の記載方法

Parameters は文字列以外にも数値を入力させたり、予め定義した選択肢から選択させる入力方法も設定できます。

数値

インスタンス数を入力させたい場合などは数値型で受け付けるようにします。

Parameters:
  Number:
    Type: Number

選択式

予め定義したいくつかの値から選択できるようにも設定でいます。
EC2 インスタンスタイプを選択させたい場合などに便利です。

Parameters:
  StringAllowedValues:
    Type: String
    AllowedValues:
      - 選択肢1
      - 選択肢2
      - 選択肢3

既存のリソースを選択

コンソールからサブネット作成時に VPC を指定する時、既存の VPC の一覧をプルダウンで選択できるようになっています。
それと同じように既存のリソースを選択できるようにもできます。
例えば作成済みの EC2 インスタンスを選択させたい場合は次のように設定します。

Parameters:
  InstanceId:
    Type: AWS::EC2::Instance::Id

まとめ

今回は一部のみの紹介でしたが、他にも様々なパラメータ設定方法があります。
公式ドキュメントによくまとめられているページがあるので、必要に応じ確認してみてください。

Discussion