見出し画像

ゼロから体系立てて学ぶCloudFormation(2)

今回は、CloudFormationのテンプレートのフォーマットについてまとめたいと思います。

CloudFormationのテンプレートは、JSONまたはYAML形式で記載します。本連載では、Ansibleなどでも使用されているYAML形式で記載していこうと思います。

▼|テンプレートのフォーマットとセクション

以下は、YAML形式でのテンプレートのフォーマットになります。

AWSTemplateFormatVersion: "version date"

Description:
    String

Metadata:
    template metadata

Parameters:
    set of parameters

Mappings:
    set of mappings

Conditions:
    set of conditions

Transform:
    set of transforms

Resources:
    set of resources

Outputs:
    set of outputs

テンプレートには、いくつかの主要なセクションから構成されています。

中でも、Resourcesセクションは、唯一必須となるセクションになります。

基本的には一部のセクションを除き記述する順序は任意ですが、あるセクションの値が前のセクションの値を参照している場合などがあるため、テンプレートを記述する際は以下に記載する順序で記述することを推奨します。

▶|AWSTemplateFormatVersion セクション(任意)

AWSTemplateFormatVersionセクションは任意のセクションで、テンプレートの形式バージョンを設定します。最新のテンプレートの形式バージョンは「2010-09-09」であり、現時点で唯一の有効な値になります。

AWSTemplateFormatVersion: "2010-09-09"

▶|Description セクション(任意)

Descriptionセクションは任意のセクションで、テンプレートに関するコメントを記述できます。記述可能な値は、長さ0~1024バイトのリテラル文字列(0文字以上の連続した文字列を示す定数)である必要があります。

なお、Descriptionセクションは、AWSTemplateFormatVersionセクションの後に記述する必要があります。

AWSTemplateFormatVersion: "2010-09-09"
Description: This is sample template. 

▶|Metadata セクション(オプション)

Metadataセクションはオプションとして使用可能な任意のセクションで、テンプレートに関する付帯情報を設定することができます。

テンプレートに含まれるデータについてのデータという付帯的なデータになります。

▶|Parameters セクション(オプション)

Parametersセクションはオプションとして使用可能な任意のセクションで、スタックを作成したり更新したりする際に、テンプレート内のResourcesおよびOutputsセクションに記述しているパラメータに渡すことができる値を設定することができます。

▶|Mappings セクション(任意)

Mappingsセクションは任意のセクションで、2つのキーの組み合わせ(2次元)で値を特定するような場合にキーと値のマッピングを設定することができます。

テンプレート内のResourcesおよびOutputsセクションにて組み込み関数「Fn::FindInMap」を使用することで、キーに対応する値をパラメータに渡すことができます。

▶|Conditions セクション(オプション)

Conditions セクションはオプションとして使用可能な任意のセクションで、特定の条件の場合のみリソースを作成するなど、条件分岐に必要となる条件を設定することができます。

▶|Transform セクション(オプション)

Transform セクションはオプションとして使用可能な任意のセクションで、テンプレートから呼び出すマクロや別のテンプレートファイルを設定することができます。

▶|Resources セクション(必須)

Resources セクションは唯一必須のセクションで、スタックに含めるAWSリソースと各リソースのプロパティを設定することができます。

▶|Outputs セクション(オプション)

Outputs セクションはオプションとして使用可能な任意のセクションで、
他のスタックにインポートする値、処理実行時の戻り値、またはCloudFormationのコンソールに表示する出力値などを設定できます。

▼|コードの記述例

以下は、AWSTemplateFormatVersion、Description、及びResourcesセクションのみを使用した最小構成のテンプレートの一例です。

AWSTemplateFormatVersion: "2010-09-09"
Description: VPC build Template

Resources:
  MyVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 172.16.0.1/16
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:
      - Key: Name
        Value: my_vpc

このテンプレートでは、VPCを作成するように記述してあります。

▼|まとめ

ざざっとテンプレートのフォーマットについてまとめてみましたが、最初からすべてのセクションをフルに使いこなす必要はないかなと思っています。

実際に設定上必須のセクションはResourcesセクションだけですしね。

ということで、各セクションの詳細な記述方法については今後記載したいと思いますが、次回はまずはResourcesセクションの記述方法について記載したいと思います。

▼|過去の記事

ゼロから体系立てて学ぶCloudFormation(1)
→ CloudFormationで使用する用語について