- ロードマップ
- 1. CloudFormationとは何か
- 2. はじめてのCloudFormation
- 3. Templateの基本文法を理解する
- 4. AWSリソースをCloudFormationで構築する
- 5. AWS環境を「設計」してからCloudFormationを書く
- 6. 複数のリソースからなる環境を構築する
- 7. ParametersとOutputsを使ってTemplateを実用的にする
- 8. Dev / Stg / Prodなど複数環境を管理する
- 9. CloudFormation Stackを分割する
- 10. CloudFormationの変更と運用
- 11. CloudFormationの設計・運用で気をつけること
- 12. CloudFormationを使った実践的なAWS環境構築
- このシリーズを読み終えたときのゴール
ロードマップ
このシリーズでは、AWSの基本的なサービスや概念は知っているものの、CloudFormationはまだよくわからないという方を対象に、CloudFormationを使ったAWS環境の設計・構築ができるようになることを目指します。
単にCloudFormationの構文を覚えるのではなく、実際のAWS環境を題材にしながら、
「AWSの構成を考える → CloudFormationでコード化する → デプロイする → 変更する → 運用する」
という一連の流れを身につけていきます。
1. CloudFormationとは何か
まずは、CloudFormationが何のためのサービスなのかを理解します。
- CloudFormationでできること
- なぜAWSをコードで管理するのか
- マネジメントコンソールで構築する場合との違い
- Infrastructure as Code(IaC)とは
- CloudFormationの基本的な仕組み
- Stack / Template / Resourceの関係
- CloudFormationを使うメリット・注意点
まずは「CloudFormationの書き方」ではなく、CloudFormationを使う理由を理解します。
2. はじめてのCloudFormation
実際にCloudFormationを動かしてみます。
- CloudFormation Templateの基本構造
- YAMLとJSON
- Resourceの定義
- Stackの作成
- Stackの削除
- CloudFormationからAWSリソースが作られる流れ
- マネジメントコンソールとの対応関係
ここでは、できるだけ小さな構成から始め、CloudFormationの基本的な操作に慣れていきます。
3. Templateの基本文法を理解する
CloudFormation Templateを書くために必要な基本機能を学びます。
ResourcesParametersOutputsMappingsConditionsMetadataDescriptionRefFn::GetAttFn::Sub- その他の主要なIntrinsic Functions
単に構文を暗記するのではなく、**「どのような場面で使うのか」**をAWSリソースの構築を通して理解します。
4. AWSリソースをCloudFormationで構築する
ここから少しずつ実践的な構成を作っていきます。
例えば、以下のようなAWSリソースをCloudFormationで定義します。
- VPC
- Subnet
- Route Table
- Internet Gateway
- Security Group
- IAM Role
- S3 Bucket
- EC2
- RDS
ここでは、AWSコンソールで作成した場合にどのような設定が必要なのかと、それをCloudFormationでどう表現するのかを対応させながら学びます。
5. AWS環境を「設計」してからCloudFormationを書く
CloudFormationを書く前に、AWS環境そのものを設計する方法を扱います。
例えば、Webアプリケーションを構築するとして、
- どのAWSサービスを使うのか
- VPCをどう分割するのか
- Public / Private Subnetをどう配置するのか
- Security Groupをどう設計するのか
- IAM Roleをどう設計するのか
- リソース同士をどう関連付けるのか
といったことを考えます。
そして、
AWS構成図 → リソース一覧 → CloudFormation Template
という流れで、設計をコードへ落とし込んでいきます。
6. 複数のリソースからなる環境を構築する
ここまでの知識を使って、実際に一つのAWS環境を構築します。
例えば、
Internet
|
v
ALB
|
v
EC2
|
v
RDS
のようなWebアプリケーション環境を題材にします。
- ネットワークの構築
- IAMの構築
- セキュリティ設定
- アプリケーションサーバーの構築
- データベースの構築
- リソース間の依存関係
- Stackの作成・更新・削除
最終的に、CloudFormationだけでAWS環境を一から構築できる状態を目指します。
7. ParametersとOutputsを使ってTemplateを実用的にする
実際の運用を想定して、Templateを柔軟にしていきます。
- 環境ごとの値をParametersで切り替える
- Outputsでリソース情報を受け渡す
Ref/Fn::GetAttを活用するFn::Subを使った文字列生成- 固定値を減らす
- Templateを再利用できる形にする
ここでは、単に「動くTemplate」から、何度も利用できるTemplateへ発展させます。
8. Dev / Stg / Prodなど複数環境を管理する
実際の開発では、一つのAWS環境だけを管理するケースばかりではありません。
- 開発環境
- ステージング環境
- 本番環境
など、複数の環境をどのようにCloudFormationで管理するのかを考えます。
- Parametersの使い分け
- Stackの分離
- 環境ごとの設定
- Templateの共通化
- 環境ごとの差分をどう管理するか
などを扱います。
9. CloudFormation Stackを分割する
AWS環境が大きくなると、一つのTemplateですべてを管理することが難しくなります。
そこで、
- ネットワーク
- IAM
- アプリケーション
- データベース
など、役割ごとにStackを分割する方法を学びます。
- Stackを分割するメリット
- Stack間の依存関係
- OutputsとExports
- Nested Stack
- Stack分割の考え方
ここでは、**「どこまでを一つのStackにするのか」**という設計面も考えます。
10. CloudFormationの変更と運用
CloudFormationは「作って終わり」ではありません。
実際の運用で重要になる、
- Stackの更新
- Change Sets
- 更新時のリソース置換
- リソースの削除
- DeletionPolicy
- UpdateReplacePolicy
- Drift Detection
- ロールバック
などについて学びます。
特に、**「Templateを変更したらAWS上で何が起こるのか」**を理解することを目標にします。
11. CloudFormationの設計・運用で気をつけること
実際にCloudFormationを使っていく中で遭遇しやすい問題を扱います。
- Templateが巨大になる
- Parameterが増えすぎる
- Stack間の依存関係が複雑になる
- リソース名をどう設計するか
- Secretsや機密情報をどう扱うか
- IAM権限をどう設計するか
- 本番環境での変更をどう安全に行うか
単に「CloudFormationが書ける」だけではなく、保守しやすいInfrastructure as Codeを書くための考え方を身につけます。
12. CloudFormationを使った実践的なAWS環境構築
最後に、これまで学んだ内容を組み合わせて、実践的なAWS環境を設計・構築します。
例えば、
- VPC
- Public / Private Subnet
- ALB
- EC2
- RDS
- S3
- IAM
- Security Group
などを組み合わせたWebアプリケーション環境を題材にします。
最初にAWS構成を設計し、
- 要件を整理する
- AWS構成を設計する
- 構成図を作る
- CloudFormation Templateを設計する
- Templateを書く
- Stackを作成する
- 動作確認する
- Templateを変更する
- 安全に更新する
- 不要になった環境を削除する
という一連の流れを実践します。
このシリーズを読み終えたときのゴール
このシリーズを通して、最終的には次のことができる状態を目指します。
- CloudFormationの基本的な仕組みを説明できる
- AWSリソースをCloudFormationで定義できる
- AWSの構成をCloudFormationに落とし込める
- ParametersやOutputsなどを使ってTemplateを設計できる
- 複数のStackに分割してAWS環境を管理できる
- Stackの変更・更新・削除を安全に行える
- CloudFormationを使ってAWS環境を再現可能な形で構築できる
- CloudFormationを使うことを前提にAWSインフラを設計できる
つまり、「CloudFormationの書き方を知っている」から「CloudFormationを使ってAWS環境を設計・構築できる」へ進むことを、このシリーズのゴールとします。