CloudFormation

AWS のインフラをテンプレート (YAML/JSON) で宣言的に定義・管理する IaC サービス

AWSIaC
CloudFormation」の技術書を見る (12 冊) →

CloudFormation とは

AWS CloudFormation は、AWS のインフラをテンプレート (YAML/JSON) で宣言的に定義し、スタックとして作成・更新・削除する IaC サービスである。SAM は CloudFormation の拡張、CDK は CloudFormation のコード生成ツール。

テンプレートの構造

CloudFormation テンプレートは YAML または JSON で記述し、Parameters (パラメータ)、Resources (リソース定義)、Outputs (出力値) の 3 つが主要セクションである。Resources にデプロイしたい AWS リソースを宣言的に定義し、Parameters で環境ごとの値を切り替える。

AWSTemplateFormatVersion: '2010-09-09'
Description: My Stack

Parameters:
  Environment:
    Type: String
    Default: dev

Resources:
  UsersTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: !Sub users-${Environment}
      BillingMode: PAY_PER_REQUEST
      AttributeDefinitions:
        - { AttributeName: id, AttributeType: S }
      KeySchema:
        - { AttributeName: id, KeyType: HASH }

Outputs:
  TableName:
    Value: !Ref UsersTable

SAM / CDK との関係

SAM / CDK との 関係を図で示す。

CDK (TypeScript) → CloudFormation テンプレート → AWS リソース
SAM (YAML)       → CloudFormation テンプレート → AWS リソース
CloudFormation    → AWS リソース
ツール入力出力
CloudFormationYAML/JSON テンプレートAWS リソース
SAMサーバーレス拡張 YAMLCloudFormation テンプレート
CDKTypeScript/PythonCloudFormation テンプレート

組み込み関数

組み込み関数を以下に示す。

関数用途
!Refリソースの参照!Ref UsersTable
!Sub文字列の置換!Sub users-${Environment}
!GetAtt属性の取得!GetAtt UsersTable.Arn
!Join文字列の結合!Join ['-', [my, stack]]
!If条件分岐!If [IsProd, 5, 1]

スタックの操作

スタックの操作の例を示す。

# スタックの作成
aws cloudformation create-stack --stack-name my-stack --template-body file://template.yaml

# スタックの更新
aws cloudformation update-stack --stack-name my-stack --template-body file://template.yaml

# 変更セットの作成 (プレビュー)
aws cloudformation create-change-set --stack-name my-stack --template-body file://template.yaml

# スタックの削除
aws cloudformation delete-stack --stack-name my-stack

ドリフト検出

ドリフト検出の例を示す。

aws cloudformation detect-stack-drift --stack-name my-stack

手動変更 (コンソール操作) によるテンプレートと実態の乖離を検出する。

ロールバック

デプロイ失敗時に自動的に前の状態にロールバックする。--on-failure ROLLBACK がデフォルト。

CloudFormation を扱う関連書籍も多い。

この記事は役に立ちましたか?

関連用語

関連する記事