コンテンツにスキップ

AWS CloudFormation

1. サービス概要

AWS CloudFormation は、AWS リソースのプロビジョニングと管理を自動化するためのサービスである。
インフラストラクチャをコードとして定義し、テンプレートを使用して AWS リソースを一貫性を持ってデプロイ、更新、削除することができる。
これにより、手動による設定ミスを防ぎ、インフラの再現性とスケーラビリティを向上させる。

主なユースケースとして、

  • 複雑なインフラ環境の一括デプロイ
  • インフラのバージョン管理
  • 自動化された環境設定
  • テスト環境の迅速な構築
  • 本番環境の安定運用

などが挙げられる。

2. 主な特徴と機能

2.1 テンプレートベースの定義

CloudFormation では、JSON または YAML 形式のテンプレートを使用して、AWS リソースの構成を宣言的に定義する。
テンプレートには、リソース、パラメータ、マッピング、条件、出力などのセクションを含めることができる。

2.2 スタック管理

テンプレートを基に作成される CloudFormation の単位を「スタック」と呼ぶ。
スタックはリソースの集合体であり、スタック単位でデプロイ、更新、削除を管理できる。
これにより、関連するリソースを一括して操作することが可能である。

2.3 インフラストラクチャのバージョン管理

CloudFormation では、テンプレートのバージョン管理を行うことで、インフラの変更履歴を追跡できる。
これにより、特定のバージョンにロールバックすることも容易になる。

2.4 依存関係の自動管理

リソース間の依存関係を自動的に解決し、正しい順序でリソースをプロビジョニングする。
これにより、手動での依存関係管理の手間を省き、エラーを減少させる。

2.5 カスタムリソース

標準の AWS リソースに加えて、カスタムリソースを使用して独自のリソースを定義できる。
これにより、特定のビジネスロジックや外部サービスとの統合が可能になる。

2.6 Change Sets

Change Sets を使用すると、スタックに対する変更を事前に確認できる。
これにより、実際に変更を適用する前に影響範囲を把握し、予期しない変更を防止できる。

2.7 Drift Detection(ドリフト検出)

Drift Detection 機能により、スタックの現在の状態がテンプレートと一致しているかを確認できる。
テンプレートから外れた変更が検出された場合、アラートを受け取ることができる。

3. アーキテクチャおよび技術要素

  1. ユーザーは AWS Management Console、AWS CLI、または AWS SDK を使用して CloudFormation テンプレートをアップロードまたは指定。
  2. CloudFormation はテンプレートを解析し、必要な AWS リソースを特定。
  3. テンプレート内のリソース間の依存関係を評価し、適切な順序でリソースをプロビジョニング。
  4. プロビジョニングされたリソースはスタックとして管理され、更新や削除もスタック単位で実行。
  5. ユーザーは Change Sets や Drift Detection を利用してスタックの変更状況を監視。

CloudFormation のアーキテクチャはスケーラブルで高可用性を備えており、AWS の各種サービスとシームレスに統合されている。
テンプレートの再利用性やモジュール化により、複雑なインフラ構成も効率的に管理可能である。

4. セキュリティと認証・認可

CloudFormation では、セキュリティを確保するために以下の機能を提供しています:

  • AWS Identity and Access Management (IAM): CloudFormation スタックの作成、更新、削除に対するアクセス権限を細かく制御。
  • テンプレートのセキュリティ: テンプレート内に機密情報(パスワードやキー)を含めないようにするベストプラクティスを推奨。
  • Stack Policies: スタック内の特定のリソースに対する変更を制限するポリシーを設定可能。
  • Secure Parameter Store Integration: AWS Systems Manager Parameter Store と連携し、機密情報を安全に管理。
  • サービスロールの使用: CloudFormation がリソースをプロビジョニングする際に使用する IAM ロールを指定。

これらのセキュリティ機能により、CloudFormation を通じたインフラ管理が安全かつコンプライアンスに準拠した形で実施できる。

5. 料金形態

AWS CloudFormation 自体は無料で利用できる。
ただし、テンプレートを使用して作成・管理する AWS リソースに対しては、通常の料金が適用される。以下は主な料金要素です:

  • CloudFormation サービス: テンプレートの作成、スタックの管理は無料。
  • AWS リソース: CloudFormation を使用してプロビジョニングする AWS リソース(EC2 インスタンス、S3 バケット、RDS データベースなど)の利用料金が適用。
  • 追加機能: CloudFormation StackSets や Drift Detection などの一部機能には追加料金が発生する場合がある。

6. よくあるアーキテクチャ・設計パターン

一般的なパターンは以下の通りです:

  • インフラストラクチャ・アズ・コード (IaC): コードベースでインフラを定義し、バージョン管理と自動デプロイを実現。
  • マルチアカウント・管理: 複数の AWS アカウントに跨るリソースを一元管理。
  • パラメータ化されたテンプレート: 再利用性の高いテンプレートを作成し、環境ごとにパラメータを変更。
  • モジュール化とスタック分割: 大規模なテンプレートを小さなモジュールに分割し、管理を容易に。
  • CI/CD パイプラインとの統合: 継続的インテグレーションとデリバリーのパイプラインに CloudFormation を組み込み、自動デプロイを実現。

7. 設定・デプロイ手順(ハンズオン例)

  1. AWS Management Console にログインし、AWS CloudFormation を開く。
  2. 「スタックの作成」ボタンをクリックし、「新しいリソースを使用 (標準)」を選択。
  3. テンプレートの指定方法を選択(例: ファイルのアップロード、S3 バケットからの指定、サンプルテンプレートの利用)。
  4. テンプレートファイル(JSON または YAML)をアップロードし、「次へ」をクリック。
  5. スタック名を入力し、必要に応じてパラメータ(例: インスタンスタイプ、VPC ID)を指定。
  6. オプション設定(タグ、IAM ロール、通知オプションなど)を行い、「次へ」をクリック。
  7. 設定内容を確認し、「スタックの作成」をクリックしてデプロイを開始。
  8. スタックの進捗状況を「イベント」タブで監視し、リソースが正常に作成されることを確認。
  9. スタックが「CREATE_COMPLETE」となったら、リソースが正常にデプロイされたことを確認。
  10. 必要に応じてテンプレートを更新し、「スタックの更新」を実行。
  11. 不要になったスタックを削除する場合は、「スタックの削除」を選択。

このハンズオン例では、基本的な CloudFormation スタックの作成からデプロイ、更新、削除までの一連の手順を通じて、CloudFormation の主要機能を実際に体験できる。

8. 試験で問われやすいポイント

8.1 テンプレートの構造と要素

  • 基本構造: AWSTemplateFormatVersion、Description、Parameters、Mappings、Conditions、Resources、Outputs。
  • 主要セクション: Resources セクションでリソースを定義、Parameters で入力パラメータを設定。
  • 試験例:
  • 「CloudFormation テンプレートの主要なセクションは何か?」
  • 「Parameters セクションの用途は?」...など。

8.2 スタックの管理と操作

  • スタックの作成・更新・削除: 各操作の手順と影響。
  • Change Sets: 変更のプレビューと影響範囲の確認方法。
  • 試験例:
  • 「スタックの更新時に Change Sets を使用する利点は?」
  • 「スタック削除時に注意すべき点は?」...など。

8.3 ドリフト検出

  • 概念: テンプレートとスタックの現在の状態との差異を検出。
  • 用途: 不正な変更や手動でのリソース変更の検出。
  • 試験例:
  • 「ドリフト検出の目的は?」
  • 「ドリフトが検出された場合の対処方法は?」...など。

8.4 条件とマッピング

  • Conditions: 特定の条件に基づいてリソースの作成を制御。
  • Mappings: 固定のキーと値のペアを定義し、テンプレート内で参照。
  • 試験例:
  • 「Conditions を使用するメリットは?」
  • 「Mappings の使用例は?」...など。

8.5 IAM ロールと権限管理

  • サービスロール: CloudFormation がリソースをプロビジョニングする際に使用する IAM ロール。
  • ポリシー設定: 最小権限の原則に基づくポリシー設定方法。
  • 試験例:
  • 「CloudFormation でサービスロールを設定する理由は?」
  • 「適切な IAM ポリシーの設定方法は?」...など。

8.6 再利用可能なテンプレートとモジュール化

  • Nested Stacks: スタック内に他のスタックを含めることで、テンプレートをモジュール化。
  • Macros: テンプレートを動的に変換・拡張する機能。
  • 試験例:
  • 「Nested Stacks の利点は?」
  • 「Macros を使用するシナリオは?」...など。

8.7 エラーとトラブルシューティング

  • 一般的なエラー: リソースの競合、パラメータの不一致、依存関係の問題。
  • ログの活用: CloudFormation イベントログや CloudWatch Logs を使用したトラブルシューティング。
  • 試験例:
  • 「スタック作成時にリソースの競合エラーが発生した場合の対処方法は?」
  • 「トラブルシューティングに役立つ CloudFormation の機能は?」...など。

8.8 類似・関連サービスとの比較

  • AWS CDK (Cloud Development Kit): プログラミング言語を使用してインフラを定義。
  • AWS Elastic Beanstalk: アプリケーションのデプロイと管理に特化。
  • AWS OpsWorks: Chef や Puppet を使用した構成管理。
  • 試験例:
  • 「CloudFormation と CDK の違いは?」
  • 「CloudFormation と OpsWorks の適用シナリオは?」...など。

8.9 試験で頻出となる具体的な問われ方と答え

  • Q: AWS CloudFormation の主な目的は何か?
  • A: AWS リソースのプロビジョニングと管理を自動化し、インフラストラクチャをコードとして定義すること。
  • Q: CloudFormation テンプレートでリソースの依存関係をどのように管理するか?
  • A: デフォルトでリソース間の依存関係を自動的に解決するが、必要に応じて DependsOn 属性を使用して明示的に指定できる。
  • Q: Change Sets の主な利点は何か?
  • A: スタックに対する変更を事前に確認し、影響範囲を把握してから実際に変更を適用できる。
  • Q: Drift Detection の目的は何か?
  • A: スタックの現在の状態がテンプレートと一致しているかを検出し、不整合を特定する。
  • Q: CloudFormation と AWS CDK の違いは何か?
  • A: CloudFormation は JSON/YAML テンプレートを使用してインフラを定義するのに対し、CDK はプログラミング言語を使用してインフラを定義・管理する。