AWS CodeDeploy の EC2/オンプレミスデプロイ - AppSpec とライフサイクルフックの設計

CodeDeploy の EC2/オンプレミスデプロイにおける AppSpec ファイルの設計、ライフサイクルフックの活用、デプロイグループの管理を解説します。

AppSpec ファイルの構造

この記事は約 3 分で読めます。 EC2/オンプレミスデプロイの AppSpec ファイル (appspec.yml) は、files セクションでソースファイルのデプロイ先パスを定義し、permissions セクションでファイルの所有者と権限を設定し、hooks セクションでライフサイクルの各段階で実行するスクリプトを指定します。files セクションでは source (リビジョン内のパス) と destination (インスタンス上のパス) のマッピングを定義します。permissions セクションでは owner、group、mode を指定し、デプロイされたファイルの権限を適切に設定します。

この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。

ライフサイクルフックの活用

ライフサイクルフックはデプロイの各段階で実行されるスクリプトです。BeforeInstall はファイルのデプロイ前に実行され、古いバージョンのクリーンアップや依存パッケージのインストールに使用します。AfterInstall はファイルのデプロイ後に実行され、設定ファイルの生成やデータベースマイグレーションに使用します。ApplicationStart はアプリケーションの起動スクリプトを実行します。ValidateService はデプロイ後のヘルスチェックを実行し、アプリケーションが正常に動作していることを検証します。ValidateService が失敗するとデプロイが失敗として記録され、自動ロールバックが設定されている場合は前バージョンに戻ります。

デプロイグループとフリート管理

デプロイグループはデプロイ対象のインスタンスをグループ化する単位です。タグフィルターで Environment:Production かつ Role:WebServer のインスタンスを選択するといった動的な指定が可能です。Auto Scaling グループとの統合では、スケールアウトで新しく起動したインスタンスに自動的に最新のリビジョンがデプロイされます。デプロイ設定で最小正常ホスト数を指定し、デプロイ中に常に一定数のインスタンスがリクエストを処理し続けることを保証します。CodeDeployDefault.OneAtATime は 1 台ずつ、CodeDeployDefault.HalfAtATime は半数ずつデプロイする事前定義の設定です。

さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。

まとめ

CodeDeploy の EC2/オンプレミスデプロイは AppSpec ファイルとライフサイクルフックで宣言的にデプロイプロセスを定義します。タグベースのデプロイグループで動的なフリートに対応し、最小正常ホスト数でデプロイ中の可用性を保証します。オンプレミスサーバーも対象に含められるため、ハイブリッド環境の統一的なデプロイ管理に有効です。

AWS の優位点

  • AppSpec ファイルでデプロイ先のファイル配置、権限設定、ライフサイクルフックのスクリプトを宣言的に定義できる
  • BeforeInstall、AfterInstall、ApplicationStart、ValidateService の各フックでデプロイの各段階にカスタムスクリプトを実行できる
  • デプロイグループでタグベースのインスタンス選択と Auto Scaling グループの統合を設定し、動的なフリートに対応できる
  • 最小正常ホスト数の設定でデプロイ中のサービス可用性を保証し、一定数のインスタンスが常にリクエストを処理し続ける
  • オンプレミスサーバーにも CodeDeploy エージェントをインストールしてデプロイ対象に含められ、ハイブリッド環境に対応する

同じテーマの記事

自動デプロイメント戦略 - AWS CodeDeploy と CodePipeline で実現する継続的デリバリー AWS CodeDeploy と CodePipeline を活用した自動デプロイメントの構築方法を解説します。EC2、Lambda、ECS への多様なデプロイ戦略と、パイプラインによる継続的デリバリーの実践手法を紹介します。 カオスエンジニアリング実践 - AWS Fault Injection Simulator で耐障害性を検証する AWS Fault Injection Simulator (FIS) を使ったカオスエンジニアリングの実践を解説。障害注入シナリオの設計、EC2・ECS・RDS への障害注入、安全な実験の進め方を紹介します。 CI/CD パイプライン自動化 - AWS CodePipeline で実現する継続的デリバリー AWS CodePipeline と CodeBuild を活用した CI/CD パイプラインの自動化を解説します。 AWS CodeDeploy のデプロイ戦略 - EC2・ECS・Lambda へのブルーグリーンデプロイ CodeDeploy による EC2、ECS、Lambda へのデプロイ戦略、ブルーグリーンデプロイの設計、自動ロールバックの設定を解説します。 AWS CodePipeline で構築する CI/CD パイプライン - ソースからデプロイまでの自動化 CodePipeline によるマルチステージパイプラインの構築、承認アクション、クロスアカウントデプロイを解説します。 Elastic Beanstalk で始めるアプリケーションデプロイ自動化 - 環境構築からローリングデプロイまで Elastic Beanstalk によるアプリケーションデプロイの自動化を解説。環境構築、デプロイポリシーの選定、.ebextensions によるカスタマイズ手法を紹介します。 Elastic Beanstalk の Docker マルチコンテナ環境 - ECS 連携と本番運用のベストプラクティス Elastic Beanstalk の Docker プラットフォームによるマルチコンテナ構成、ECS との連携、ヘルスチェックとログ管理を解説します。 AWS Proton でプラットフォームエンジニアリングを実現 - インフラテンプレートのセルフサービス提供 Proton によるインフラテンプレートの管理、環境とサービスの分離、開発者セルフサービスの設計を解説します。