AWS CloudFormationとは

AWS CloudFormationは、AWSのインフラストラクチャをプログラムコードのように記述し、自動的に構築・管理できるサービスです。この概念は「Infrastructure as Code(IaC)」と呼ばれます。開発者や管理者は、JSON(JavaScript Object Notation)またはYAML形式で書かれた「テンプレート」と呼ばれる設計図のファイルを用意します。CloudFormationにこのテンプレートを読み込ませると、EC2インスタンス、VPC、S3バケット、RDSデータベースなど、テンプレートに記載された通りのAWSリソース群を、正しい順番と依存関係を考慮しながら自動で構築してくれます。インフラをコード化することで、手作業による設定ミスを排除し、何度でも同じ環境を寸分違わず迅速に再現できるようになるのが最大の強みです。
具体例
CloudFormationの役割は、「料理のレシピと自動調理ロボット」の関係に例えることができます。レシピ(テンプレート)に「人参を切り、肉を炒め、カレー粉を入れて煮込む」と正確に書いておけば、自動調理ロボット(CloudFormation)は毎回全く同じ味のカレー(インフラ環境)をミスなく作ってくれます。
システム開発の現場では、以下のようなシーンで絶大な効果を発揮します。
- 開発環境と本番環境の完全な統一: 手作業で管理画面からポチポチと設定していると、開発環境と本番環境で微妙な設定のズレが生じ、バグの原因になります。CloudFormationを使えば、同じテンプレートを使ってパラメータ(サーバーのサイズなど)だけを変更して構築できるため、環境の差異をなくすことができます。
- 障害復旧(ディザスタリカバリ)の迅速化: メインのリージョン(例:東京)で大規模障害が発生した場合でも、バックアップしておいたCloudFormationテンプレートを別のリージョン(例:大阪)で実行するだけで、全く同じシステムインフラを数分から数十分で復元できます。
- 不要になった環境の一括削除: プロジェクトが終了した際や、検証用の環境が不要になった際、CloudFormationを通して作成されたリソース群をボタン一つで一括して削除できるため、消し忘れによる無駄なコストの発生を防ぎます。
もう少し詳しく
CloudFormationでは、テンプレートをもとに作成されたリソースの集合体を「スタック(Stack)」と呼びます。インフラの管理はこのスタック単位で行われます。たとえば、Webシステムのネットワーク(VPC群)と、アプリケーション(EC2やRDS)を別々のスタックとして管理することで、変更の影響範囲を小さく保つことができます。
インフラの構成を変更したい場合、管理画面から直接リソースをいじるのではなく、テンプレートのコードを書き換えてCloudFormationに「スタックの更新」を指示します。CloudFormationは現在の状態と新しいテンプレートの差分を計算し、必要な部分だけを安全に変更してくれます。もし更新中にエラーが発生した場合は、自動的に元の状態に戻す(ロールバックする)機能も備わっているため、安全にインフラの運用を行うことが可能です。
また、便利な機能として「ドリフト検出機能」があります。これは、誰かがCloudFormationを通さずにAWSマネジメントコンソールから直接リソースの設定を変更してしまった場合(例:セキュリティグループのポートを手動で開けたなど)に、テンプレートの定義と実際のリソース状態に差異(ドリフト)が生じていることを検知して警告してくれる機能です。これにより、インフラ状態の一貫性を保つことができます。
試験でのポイント
試験においてAWS CloudFormationは、「Infrastructure as Code (IaC)」「テンプレートによる自動化」「インフラの複製」「環境の一貫性」といったキーワードと強く結びついて出題されます。手作業による人為的エラーの削減や、複数のリージョンに同じインフラを迅速に展開したいといった要件が提示された場合、正解はほぼ間違いなくCloudFormationです。
また、類似サービスである「AWS Elastic Beanstalk」との違いも頻出です。Elastic Beanstalkは主にWebアプリケーションのソースコードをアップロードするだけで、背後のインフラ(EC2やロードバランサーなど)を自動で構築・デプロイしてくれる「PaaS」寄りの開発者向けサービスです。一方、CloudFormationはネットワーク設計からデータベース設定まで、より広範で詳細なインフラ全体を設計図(コード)ベースで細かくコントロールしたい場合に利用される、インフラエンジニア向けのサービスであるという違いを明確にしておきましょう。
関連する用語
インフラをコードで管理・自動化する概念そのものを指す「Infrastructure as Code (IaC) Simon」、CloudFormationによって一括管理されるリソースのまとまりである「スタック」、アプリケーションのコードをアップロードするだけで必要なインフラ環境を自動構築・管理してくれるPaaS型サービスの「AWS Elastic Beanstalk」などが関連用語として挙げられます。