Amazon DOP-C02: Infrastructure as Codeと構成管理 — 学習ガイド
こちらの一部です: AWS DevOps Engineer Professional DOP-C02 — 学習ガイド. 検証済みの解答で練習: Amazon試験ハブ, または時間制限付き模擬試験に挑戦: ExamRoll.io.
概要
AWSにおけるコードとしてのインフラストラクチャ (IaC) と構成管理は、再現性、監査性、ガバナンスを備えたインフラストラクチャとアプリケーションのプロビジョニングおよび構成を実現します。CloudFormationとAWS Cloud Development Kit (CDK) は、リソースを宣言的に、またはCloudFormationに合成されるコードを介して記述します。AWS OpsWorksやAWS Systems Managerなどの構成レイヤーは、EC2およびハイブリッド環境のフリート全体にわたるインスタンスの望ましい状態を強制し、報告します。シークレット、パラメータ、イメージのベーキングがライフサイクルを完成させ、イミュータブルでセキュアなデプロイを大規模に可能にします。
CloudFormationスタック、変更管理、ガバナンス
CloudFormationスタックはデプロイの単位です。影響範囲 (ブラスト半径) を最小限に抑えるため、ライフサイクルの境界と所有権に基づいてスタックを設計します。パラメータの使用は控えめにし、マッピングやSSMルックアップを用いた推奨されるデフォルト値を優先します。密結合を避けるため、OutputsとFn::ImportValueを介してエクスポートおよびインポートするのは、安定的で共有される値のみに限定します。
ネストされたスタックは、再利用可能なコンポーネントをカプセル化し、親テンプレートを小さく保ちます。親スタックは子スタックにパラメータを渡し、その出力を利用できるため、モジュラーアーキテクチャ (例: アプリケーションスタックが利用する共有ネットワークのネストされたスタック) が可能になります。ネストされたスタックは単一の関心事 (VPC、データ層、アプリ層) に集中させ、独立してバージョン管理します。
StackSetsは、単一のテンプレートを複数のアカウントやリージョンにわたってデプロイします。AWS Organizationsと連携したサービスマネージド型のアクセス許可モデルを使用すると、OUへの自動デプロイや新しいアカウントの自動インクルードが可能になります。ロールアウトを制御するために、オペレーション設定 (最大同時アカウント/リージョン数、障害耐性) を構成します。アカウントまたはリージョンごとのパラメータオーバーライドにより、標準テンプレートをローカルの制約に適応させることができます。StackSetおよびスタックインスタンスのドリフトを監視し、テンプレート外の変更を検出します。
変更セットは、安全で人間がレビュー可能な更新を提供します。常にCreateChangeSetを実行し、ExecuteChangeSetを実行する前に、リソースごとの影響、置換、潜在的なデータ損失を検査します。承認ゲート付きの自動化パイプラインに変更セットを統合します。
ドリフト検出は、スタックリソースがテンプレートと一致しているかを検証します。重要なスタックやStackSetsに対して定期的にドリフト検出を実行します。すべてのリソースタイプですべてのプロパティが評価されるわけではないこと (サポートされていないプロパティは「チェックされていません」と報告される) を理解してください。ドリフトはインシデントとして扱い、調査し、コンテキストを把握し、スタックの更新またはドリフトをコード化して再適用することで修正します。
スタックポリシーは、更新時に重要なリソースを保護するJSONドキュメントです。置き換え不可能なリソース (例: 本番データベース、Route 53ゾーン) への更新を拒否し、StackPolicyDuringUpdateBodyを使用して特定の変更のために一時的に限定的なパスを開き、その後より厳格なポリシーに戻します。これを終了保護やDeletionPolicy (Retain/Snapshot) と組み合わせてガードレールとします。外部状態を持つリソース (S3バケットなど) については、削除時の動作を計画します。バケットを削除前に空にする必要がある場合は、スタック削除時にオブジェクトをパージするカスタムリソースを実装します。
AWS CDKとCloudFormationの拡張性
AWS CDKは、使い慣れた言語 (TypeScript、Python、Java、.NET、Go) でインフラストラクチャをモデル化します。ConstructはCDKのビルディングブロックです。
- L1コンストラクト (CfnXxx) はCloudFormation仕様から生成され、リソースと1対1でマッピングされます。
- L2コンストラクトは、高レベルの意図と適切なデフォルト値を追加します (例: ApplicationLoadBalancedFargateService)。
- L3の「パターン」は、複数のL2を組み合わせてすぐに使えるアーキテクチャを提供します。
CDKアプリは1つ以上のスタックを含みます。cdk synthの実行中、アプリはコンテキストルックアップ (例: VPC ID) を解決し、アセットをレンダリングし、CloudFormationテンプレートを生成します。デプロイする前に、cdk bootstrapが環境のアセットバケットとロールを作成します。cdk diffで変更をプレビューし、cdk deployでテンプレートとアセットを送信します。CDKは内部で変更セットを使用し、セキュリティに影響のある変更 (IAMやリソースの置換) を表示して確認を求めます。Aspectsを通じてスタックとリソースにタグを付け、組織全体のタグ付けポリシーを強制します。L2の抽象化では不十分な場合は、エスケープハッチ (node.defaultChild) を使用するか、L1コンストラクトに落とし込みます。
CloudFormationカスタムリソースは、API経由でアクセス可能なあらゆるものにIaCを拡張します。Lambdaベースのカスタムリソースは、RequestId、PhysicalResourceId、およびプロパティを含むCreate、Update、Deleteイベントを受け取ります。この関数は以下の要件を満たす必要があります。
- べき等性を持ち、タイムアウト期間内に署名付きのResponseURLに対して成功/失敗を返すこと。
- 更新を追跡し、Delete時のクリーンアップを駆動するために、安定したPhysicalResourceIdを設定すること。
- 結果整合性のあるダウンストリームサービスのためのリトライや安定化待機を処理すること。
Lambdaには最小権限のIAM実行ロールを使用し、API呼び出しにエクスポネンシャルバックオフを組み込み、RequestIdを介してログの相関付けを行います。大規模または長時間実行されるオペレーションには、実行トークンを待機するカスタムリソースを持つStep Functionsを検討してください。該当する場合は、再利用可能でバージョン管理されたプロバイダーとしてCloudFormation Registryを優先します。
Infrastructure as Codeにおけるシークレットとパラメータ
テンプレートやコードにシークレットをハードコーディングしないでください。デプロイ時に機密性の高い値を解決するには、動的参照を使用します。
- Secrets Manager: {{resolve:secretsmanager:secret-id:SecretString:json-key:version-stage}}
- SecureString Parameter Store: {{resolve:ssm-secure:parameter-name:version}}
動的参照を使用すると、シークレットがスタックテンプレートやイベントに保存されるのを防ぐことができます。CloudFormationが平文でログに記録するOutputsやリソースプロパティにシークレットを配置しないでください。CloudFormationの実行ロールに、参照される値を復号または取得する権限を付与し、KMS CMKのスコープをアクセスが必要なプリンシパルに限定します。
Parameter Storeは、シークレットではない設定(機能フラグ、AMI ID、エンドポイントなど)に最適です。バージョン管理されたSSMパラメータを使用して、安全なロールバックと環境間でのアトミックなプロモーションを実現します。CDKでは、ssm.StringParameter.fromStringParameterNameを使用して値をインポートするか、セキュアな値の場合はfromSecureStringParameterAttributesを使用し、パラメータの読み取りをユーザーデータやアプリケーションのブートストラップに組み込みます。
Secrets Managerは、ライフサイクル管理、ローテーション、監査のために設計されています。サポートされているエンジン(RDS、Aurora)やカスタムLambdaとローテーションを統合します。古いマテリアルの拡散を避けるため、AMIに焼き込むのではなく、実行時にシークレットを参照します。コンテナ化されたワークロードやサーバーレスワークロードの場合、Secrets Managerの参照をバックエンドとする環境変数を介してシークレットを注入するか、ECS/TaskDefinitionのsecretsを介してマウントします。短いTTLの接続プールとリトライを使用することで、最小限のダウンタイムでローテーションを行います。
構成管理と不変インフラストラクチャ
AWS OpsWorksは、特定の思想に基づいた構成管理を提供します。OpsWorks Stacksは、Chefのクックブックとライフサイクルイベント(Setup, Configure, Deploy, Undeploy, Shutdown)を使用して、アプリケーションの構成とデプロイをオーケストレーションし、ヘルスチェックによるインスタンスの停止/起動または置換を行う自動修復をサポートします。以前は、OpsWorksはマネージド型のChef AutomateやPuppet Enterpriseも提供していましたが、今日では多くのチームが、エージェントベースのオーケストレーションにはSystems Managerを標準として採用するか、Ansible/Chef/Puppetのコントロールプレーンを自身で実行しています。AnsibleはOpsWorksとネイティブに統合されていません。代わりに、Systems Manager State Managerを使用してプレイブックを実行するか、AWX/Ansible Automation PlatformをSSM Session Manager接続とEC2動的インベントリと組み合わせて使用します。
AWS Systems Managerは、ハイブリッド構成のための最新のコントロールプレーンです。
- State Managerは、スケジュール、イベント、またはインスタンス起動時にSSMドキュメント(YAML/JSON)を実行するアソシエーションを通じて、望ましい状態を強制します。AWS-RunShellScript、AWS-ApplyAnsiblePlaybooks、AWS-ConfigureDocker、およびカスタムドキュメントを使用して構成を収束させます。フリート全体への変更を行うために、アソシエーションをパラメータ化し、タグでターゲットを指定します。
- 構成コンプライアンスは、アソシエーションのステータスとPatch Managerの結果を表示します。パッチベースラインを使用して承認済みの分類を定義し、メンテナンスウィンドウに関連付け、インスタンスタグ、パッチグループ、またはリソースグループごとにコンプライアンスを追跡します。ハイブリッドアクティベーションは、オンプレミスノードをマネージドインスタンスとしてオンボーディングし、統一されたガバナンスを実現します。
- インベントリは、パッケージ、ファイル、Windowsアップデートを記録します。リソースデータ同期は、エンタープライズレポート作成のためにS3とAthenaにエクスポートします。SSMコンプライアンスをAWS Configルールと自動修復(Systems Manager Automationランブック)と組み合わせることで、検出から修正までの一連のプロセスを完結させます。
不変インフラストラクチャは、ドリフトを排除し、ロールバックを高速化します。EC2 Image Builderは、以下の要素でイメージパイプラインをコード化します。
- コンポーネント(インストール、ハードニング、検証ステップ)はドキュメントとして表現されます。
- イメージレシピは、コンポーネントとベースイメージを組み合わせたものです。
- インフラストラクチャ設定は、サブネット、セキュリティグループ、インスタンスプロファイル、およびロギングを定義します。
- 配布設定は、AMIをリージョンに複製し、アカウント間で共有するためのものです。
CISベンチマーク、エージェントのヘルス(SSM/CloudWatch)、アプリケーションのスモークチェックを検証するためのテストコンポーネントを追加します。イメージをバージョン管理し、セマンティックタグでラベル付けします。AMI IDをParameter Store(例: /app/frontend/ami)に発行し、Auto Scalingの起動テンプレートで参照します。ローリングまたはブルー/グリーン戦略でデプロイし、不変性を維持するためにインプレースパッチ適用の代わりにインスタンスを置換します。脆弱性スキャン(Amazon Inspector)の結果をパイプラインのプロモーションゲートにフィードします。イメージにシークレットを焼き込まず、起動時にInstance Metadata Service v2およびSSM/Secrets Managerの参照を介して取得します。
実践的な問題シナリオ
Capital Oneは、顧客向けプラットフォームのマルチアカウント、マルチリージョンでのデプロイを標準化する必要があり、同時に厳格なガバナンス、シークレット管理を徹底し、構成ドリフトを排除する必要があります。環境はAWS Organizations内の数百のアカウントにまたがり、データベースアクセスとOSのハードニングに関して厳しい統制が敷かれています。
- AWS CDKでインフラストラクチャをモデル化し、CloudFormationに合成する
- VPC、ALB、Auto Scalingグループ、Aurora用にL2/L3コンストラクトを実装します。CIで
undefined
と
undefined
を使用して、テンプレートと変更セットを生成・検証します。
- なぜCDKか: コンストラクトによる強力な構成と再利用、組織全体のタギングとガードレールのためのアスペクトを介したプログラム的なポリシー、監査可能性のためのCloudFormationとのネイティブな統合が可能です。
- CloudFormation StackSetsを介してベースラインネットワークとガードレールのスタックを配布する
- セキュリティおよびサンドボックスOUをターゲットとするサービスマネージドStackSetsを作成し、共有VPCエンドポイント、標準のCloudWatchアラーム、IAM境界を展開します。障害耐性と同時実行制御を備えた、新規アカウントへの自動デプロイを有効にします。
- なぜStackSetsか: 組織規模での一貫した展開、新規アカウントの自動インクルード、組み込みのドリフト検出が可能です。
- スタックポリシーと変更セットで重要なリソースを保護する
- AuroraクラスターとRoute 53ゾーンへの更新を拒否するスタックポリシーを適用します。本番環境のパイプラインでは、
undefined
の前に
undefined
と手動承認を必須とします。
- なぜスタックポリシー/変更セットか: 最小権限での変更を強制し、リスクの高い変更の前に人によるレビューを提供します。
- LambdaベースのカスタムリソースでIaCを拡張する
- スタック削除時にアプリケーションバケットを空にする
undefined
と、作成後にエンジンパラメータを適用する
undefined
を実装します。
- なぜカスタムリソースか: ライフサイクルをスタックに紐付けたまま、宣言的なプロビジョニングにおける機能的なギャップを埋めることができます。
- Secrets ManagerとParameter Storeでシークレットと設定を集中管理する
- データベースの認証情報とAPIキーをローテーション用Lambdaと共にSecrets Managerに保存します。AMI ID、機能フラグ、エンドポイントをParameter Storeに発行します。CloudFormationの動的参照や、アプリケーションの実行時にCDKのインポートを介して値を参照します。
- なぜこれらのサービスか: 関心の分離—ローテーションと監査が可能なシークレット、非シークレット設定と容易なプロモーションのためのパラメータ。
- Systems Manager State Managerを介して望ましい状態とコンプライアンスを強制する
- エージェントのインストール、OS設定の構成、および必要に応じてAnsibleプレイブックを適用するためのアソシエーションを作成します。営業時間外のパッチ適用のためにPatch Managerをメンテナンスウィンドウと共に使用し、Resource Data Syncによって集約されたコンプライアンスダッシュボードを利用します。
- なぜState Managerか: EC2とオンプレミスにまたがるエージェントベースの収束、継続的なコンプライアンスレポート、大規模な修復が可能です。
- EC2 Image Builderで不変インフラストラクチャを採用する
- CISベースライン、SSM/Inspectorエージェント、アプリのランタイム依存関係のためのコンポーネントを含む、ハードニングされたAMIを構築します。テストを実行し、AMI IDをParameter Storeに発行し、Auto Scalingの起動テンプレートをバージョン管理されたパラメータに結びつけます。ローリングアップデートでデプロイし、AMIの更新時にインスタンスの更新をトリガーします。
- なぜImage Builderか: ドリフトを排除し、高速なロールバックによって平均修復時間(MTTR)を短縮する、再現可能でテスト可能なイメージが作成できます。
- パイプラインのオーケストレーションとガバナンス
undefined
を実行し、変更セットを作成し、承認のために一時停止してから実行する、というマルチステージのパイプラインを実装します。リポジトリの変更時にStackSetの更新をトリガーするためにEventBridgeを使用します。毎晩ドリフト検出スキャンを追加し、差異が見つかった場合はOpsCenterアイテムを作成します。
- なぜこのアプローチか: 監査可能なプロモーション、プロアクティブなドリフト検出、そして明確に定義されたサービスの責任分担による自動修復を備えた継続的デリバリーが実現できます。
← CI · すべてのドメイン · モニタリング、ロギング、可観測性 →
これらの問題を練習する → · ExamRoll.ioで時間制限付き練習 →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
試験に合格する →