CloudFormation
AWS のインフラをテンプレート (YAML/JSON) で宣言的に定義・管理する IaC サービス
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 リソース
| ツール | 入力 | 出力 |
|---|---|---|
| CloudFormation | YAML/JSON テンプレート | AWS リソース |
| SAM | サーバーレス拡張 YAML | CloudFormation テンプレート |
| CDK | TypeScript/Python | CloudFormation テンプレート |
組み込み関数
組み込み関数を以下に示す。
| 関数 | 用途 | 例 |
|---|---|---|
!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 を扱う関連書籍も多い。
この記事は役に立ちましたか?
関連用語
AWS SAM
AWS のサーバーレスアプリケーションを定義・デプロイするためのフレームワーク
Terraform
HashiCorp の IaC ツールで、マルチクラウドのインフラをコードで宣言的に管理する
CDK
TypeScript や Python などのプログラミング言語で AWS インフラを定義する IaC フレームワーク
Infrastructure as Code
インフラの構成をコードで定義し、バージョン管理・自動化・再現性を実現する手法
インフラストラクチャドリフト
IaC で定義した状態と実際のインフラの状態が乖離する問題
Helm
Kubernetes のパッケージマネージャーで、アプリケーションのデプロイをテンプレート化して管理する
関連する記事
DevOps 本ガイド - CI/CD とインフラ自動化を学ぶ技術書の選び方
DevOps の文化・原則から CI/CD、IaC、オブザーバビリティまで学べる技術書の選び方と学習順序を紹介します。
技術書の読書ログを GitHub で管理する - エンジニアらしい記録法
技術書の読書記録を GitHub リポジトリで管理する方法を紹介します。Markdown で読書ノートを書き、コミット履歴で読書の軌跡を残す、エンジニアならではの読書ログ術です。
本についてくるダウンロード素材を使い倒す
プログラミングの本には、サンプルコードや素材のダウンロード特典がついていることがあります。この特典を活用するだけで、学習効率が大きく変わります。