この記事でできること

CloudFormation のテンプレートファイルを書いたことがない人、
書いて忘れた人が、CFN独特の記法を把握でき、
残りは大体読んでればわかる。というレベルになる
死ぬまでに必読シリーズ

目次

  • この記事でできること
  • テンプレート固有のメソッド
    • Resources
    • Parameters
    • !Ref
    • !GetAtt
    • !Sub
    • !ImportValue
    • Outputs
  • aws cloudformation deployパラメータ
    • template-file
    • stack-name
    • parameter-overrides

 

キーワード

cloudformation,AWS CloudFormation,CFN,yaml,AWS

テンプレート固有のメソッド

Resources

以下のように書く

Resources:
  InferenceTestDynamoDBTable:
    Type: AWS::DynamoDB::Table

InferenceTestDynamoDBTableはスタック内での参照用の名前(外部テンプレートからの参照は難しい)
Type: AWS::DynamoDB::Tableといった形でデプロイするリソースを指定する。

Parameters

以下のように記載することで、
テンプレートファイルに引数で値を与えることができる

Parameters:
  Project:
    Type: String
    Description: <env>-app

  AllowOrigin:
    Type: String

!Ref

用途: リソースの基本的なプロパティ(ID、名前など)を取得する。
例: !Ref MyBucket はバケット名を取得します。

!GetAtt

用途: リソースの特定の属性(例: ARN、IP アドレスなど)を取得する。
例: !GetAtt MyBucket.Arn はバケットの ARN を取得します。

!Sub

用途: 文字列内に変数を埋め込む。
例: !Sub “${BucketPrefix}-my-bucket” は、変数 ${BucketPrefix} を埋め込んだ文字列を生成します。

!ImportValue

用途: 他のスタックでエクスポートされた値をインポートする。
例: !ImportValue ExportedBucketName は、別のスタックでエクスポートされたバケット名を取得します。

Outputs

以下のように記載する。
ImportValueで参照するのはExport配下の部分

Outputs:
ApiOutputs1:
Description: API Gateway ID
Value: !Ref Api
Export:
Name: ApiGatewayId

aws cloudformation deploy

クラウドフォーメーションをデプロイする際のコマンド

template-file

はスタックが記載されたファイル

stack-name

はそれぞれのスタック名。テンプレートファイルにつき一つ

parameter-overrides

Project=$PROJECT
のような形でスタックのパラメータを指定する

aws cloudformation deploy \
--template-file cfn/cognito.yaml \
--stack-name $STACKNAME \
--parameter-overrides Project=$PROJECT

良いIaCライフを!