🍣

CloudFormationテンプレート Parameters 解説

2022/09/12に公開約2,800字

はじめに

Parametersセクションを活用するとCloudFormationテンプレートに外部パラメータ渡せるようになります。
これによりテンプレートに変更を加えずに、別環境、別プロジェクト等、幅広く活用できるようになります。
この記事では「基本」から「現場でのユースケース」まで紹介したいと思います。

Parametersセクションの使い方

サンプルのCloudFormationテンプレート

template.yaml
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  BucketName:
    Type: String
    Description: Sample value. Default is sample1-bucket.
Resources: 
  s3Bucket:
    Type: AWS::S3::Bucket
    Properties: 
      BucketName: !Ref BucketName

このサンプル例ではBucketNameというパラメータを用意してRef関数で値を参照することで、動的にバケット名を定義できるようになっています。
また例ではTypeDescriptionしか定義していませんが、「パラメータが渡されなかった場合の値を定義できるDefault」や「バリデーション機能のようなAllowValues」など便利なプロパティが他にもあります。
気になる方はこちらから確認してみてください!
Parametersセクションで定義できるプロパティ

スタック作成時にパラメータを入力する。

Parametersセクションを含むCloudFormationテンプレートをアップロードするとパラメータ入力欄が表示されるようになります。
上記のサンプルテンプレートの場合はBucketNameの入力欄が表示されます。

ユースケース

ケース1:環境名をリソース名に付与する。

template.yaml
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  EnvPrefix:
    Type: String
    Default: dev
    AllowValues:
      - dev
      - stg
      - prd
    Description: Enviroment Name
Resources: 
  s3Bucket:
    Type: AWS::S3::Bucket
    Properties: 
      BucketName: !Sub 'zenn-kokorozashi-bucket-${EnvPrefix}'

開発環境、検証環境、商用環境の3環境に1つのテンプレートからデプロイする場合、Parametersセクションを活用してリソース名に環境名を付与することが多いです。

S3バケットのようなリソースはグローバルで一意の名前にしないといけないので、尚更プレフィックスは必須になります。

ケース2:RDSの性能を動的に変更する。

template.yaml
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  AuroraMinCapacity:
    Type: Number
    Default: 2
    Description: Aurora Min Capacity. Default is 2.
  AuroraMaxCapacity:
    Type: Number
    Default: 2
    Description: Aurora Max Capacity. Default is 2.
Resources: 
  DBCluster:
    Type: AWS::RDS::DBCluster
    Properties:
      DatabaseName: mysql_db
      DBClusterIdentifier: db-cluster
      DBSubnetGroupName: subnet-group-name
      EnableHttpEndpoint: true
      Engine: aurora
      EngineMode: serverless
      EngineVersion: 5.6.10a
      MasterUsername: aurora
      MasterUserPassword: aurorapassword
      ScalingConfiguration:
        AutoPause: true
        MinCapacity: !Ref AuroraMinCapacity
        MaxCapacity: !Ref AuroraMaxCapacity
        SecondsUntilAutoPause: 300
      VpcSecurityGroupIds: 
        - sg-xxxxxxxxxxxxxx

DBを構築する場合、「開発、検証環境では低スペック」「商用環境では高スペック」にすることが多いです。
上記の例では、Aurora Serverlessのキャパシティの振れ幅をパラメータ化しておくことで開発環境は低コストに抑えつつ、商用環境では適切なプロビジョニングをすることができます。

最後に

この記事で、「Parametersセクションを活用すると、CloudFormaitonテンプレートの汎用性を大幅に向上させることができること」についてご理解いただけたと思います。
皆さんもぜひParametersセクションをご活用ください!
以上、CloudFormationテンプレートのParmeters解説でした。

Discussion

ログインするとコメントできます