AWS CodeDeploy の EC2/オンプレミスデプロイ - AppSpec とライフサイクルフックの設計
CodeDeploy の EC2/オンプレミスデプロイにおける AppSpec ファイルの設計、ライフサイクルフックの活用、デプロイグループの管理を解説します。
AppSpec ファイルの構造
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 エージェントをインストールしてデプロイ対象に含められ、ハイブリッド環境に対応する