AWS CodeDeploy デプロイメント戦略詳細解説
AWS CodeDeployでは、アプリケーションの特性やビジネス要件に応じて最適なデプロイメント戦略を選択できます。本記事では、各デプロイメント戦略の詳細な設定方法と実践的な使い分けについて解説します。
デプロイメント戦略の分類
CodeDeployで利用可能なデプロイメント戦略は、プラットフォーム別に以下のように分類されます。
プラットフォーム別対応表
プラットフォーム | In-Place | Blue/Green | Canary | Linear |
---|---|---|---|---|
EC2/オンプレミス | ✅ | ✅ | ❌ | ❌ |
Lambda | ❌ | ❌ | ✅ | ✅ |
ECS | ❌ | ✅ | ✅ | ✅ |
EKS | ❌ | ✅ | ✅ | ✅ |
EC2/オンプレミス環境でのデプロイメント戦略
In-Place デプロイメント
In-Place デプロイメントは、既存のインスタンス上でアプリケーションを直接更新するアプローチです。
メリット
- 追加リソースが不要でコスト効率が良い
- シンプルな設定で実装できる
- ロールバックが高速(前バージョンのバックアップから復元)
デメリット
- 更新中のサービス停止(ダウンタイム発生)
- 更新失敗時の影響が大きい
- データベース変更を伴う場合のリスクが高い
適用ケース
- 開発・検証環境
- メンテナンス時間が確保できるシステム
- コスト最優先のプロジェクト
Blue/Green デプロイメント
Blue/Green デプロイメントは、新しいインスタンスセットを作成してトラフィックを切り替えるアプローチです。
詳細設定オプション
Blue/Green デプロイメントでは、以下の詳細な設定が可能です。
トラフィック再ルーティング設定
- 即座にトラフィックを再ルーティング:検証完了後すぐに切り替え
- 指定時間後に自動再ルーティング:一定時間の監視後に自動切り替え
- 手動承認後に再ルーティング:人的確認を経てから切り替え
終了設定
- 即座に元のインスタンスを終了:コスト最適化
- 指定時間後に元のインスタンスを終了:ロールバックに備えて保持
- 元のインスタンスを保持:手動での削除
デプロイメント設定の詳細
EC2/オンプレミス環境では、以下の定義済みデプロイメント設定から選択できます。
In-Place デプロイメント設定
設定名 | 説明 | 健全性しきい値 | 使用ケース |
---|---|---|---|
CodeDeployDefault.EC2AllAtOnce | すべて同時更新 | 最低0台が健全 | 開発環境 |
CodeDeployDefault.EC2HalfAtATime | 半分ずつ更新 | 50%が健全 | 小規模本番環境 |
CodeDeployDefault.EC2OneAtATime | 1台ずつ更新 | 75%が健全 | 高可用性要求 |
カスタム設定 | 独自の設定 | 任意設定 | 特別な要件 |
Blue/Green デプロイメント設定
設定名 | 説明 | 特徴 | 使用ケース |
---|---|---|---|
CodeDeployDefault.EC2BlueGreenDeployment | 標準Blue/Green | 新インスタンス作成、段階的トラフィック移行 | 本番環境での無停止デプロイ |
CodeDeployDefault.EC2BlueGreenDeploymentValidateOnly | 検証のみ | デプロイ後の検証フェーズのみ実行 | 検証環境での動作確認 |
Lambda 関数でのデプロイメント戦略
Lambda 関数では、関数エイリアスを使用したトラフィック制御により、Canary・Linearデプロイメントが実現されます。
Canary デプロイメント
新バージョンに一定割合のトラフィックを送り、段階的に切り替えるアプローチです。
Canary設定例
設定名 | 正式名称 | トラフィック移行 | 監視時間 | 用途 |
---|---|---|---|---|
Canary10Percent5Minutes | CodeDeployDefault.LambdaCanary10Percent5Minutes | 10% → 100% | 5分 | 迅速な検証 |
Canary10Percent10Minutes | CodeDeployDefault.LambdaCanary10Percent10Minutes | 10% → 100% | 10分 | 標準的な検証 |
Canary10Percent15Minutes | CodeDeployDefault.LambdaCanary10Percent15Minutes | 10% → 100% | 15分 | 慎重な検証 |
Linear デプロイメント
一定間隔で段階的にトラフィックを移行するアプローチです。
Linear設定例
設定名 | 正式名称 | 増分 | 間隔 | 特徴 |
---|---|---|---|---|
Linear10PercentEvery1Minute | CodeDeployDefault.LambdaLinear10PercentEvery1Minute | 10%ずつ | 1分間隔 | 迅速展開 |
Linear10PercentEvery2Minutes | CodeDeployDefault.LambdaLinear10PercentEvery2Minutes | 10%ずつ | 2分間隔 | 標準展開 |
Linear10PercentEvery3Minutes | CodeDeployDefault.LambdaLinear10PercentEvery3Minutes | 10%ずつ | 3分間隔 | 慎重展開 |
ECS サービスでのデプロイメント戦略
ECS環境では、サービスの更新とローリングデプロイメントにより、様々なデプロイメント戦略が実現できます。
ECS Blue/Green デプロイメント
ECS設定のポイント
- タスク定義の新リビジョン作成
- Target Groupの動的作成・切り替え
- ヘルスチェック設定の最適化
- ロードバランサーリスナー設定
ECS デプロイメント設定
設定名 | 正式名称 | 説明 | 特徴 |
---|---|---|---|
AllAtOnce | CodeDeployDefault.ECSAllAtOnce | 即座に100%トラフィック移行 | 最速デプロイ |
Canary10Percent5Minutes | CodeDeployDefault.ECSCanary10Percent5Minutes | 10%を5分間、その後100% | 迅速な検証 |
Canary10Percent15Minutes | CodeDeployDefault.ECSCanary10Percent15Minutes | 10%を15分間、その後100% | 慎重な検証 |
Linear10PercentEvery1Minutes | CodeDeployDefault.ECSLinear10PercentEvery1Minutes | 1分ごとに10%ずつ移行 | 段階的デプロイ |
Linear10PercentEvery5Minutes | CodeDeployDefault.ECSLinear10PercentEvery5Minutes | 5分ごとに10%ずつ移行 | 安全重視デプロイ |
EKS サービスでのデプロイメント戦略
Amazon EKSでのデプロイメントも、ECSと同様にBlue/Green方式でCanary・Linearデプロイメントが利用できます。
EKS デプロイメント設定
設定名 | 正式名称 | 説明 | 特徴 |
---|---|---|---|
AllAtOnce | CodeDeployDefault.EKSAllAtOnce | 即座に100%トラフィック移行 | 最速デプロイ |
Canary10Percent5Minutes | CodeDeployDefault.EKSCanary10Percent5Minutes | 10%を5分間、その後100% | 迅速な検証 |
Canary10Percent15Minutes | CodeDeployDefault.EKSCanary10Percent15Minutes | 10%を15分間、その後100% | 慎重な検証 |
Linear10PercentEvery1Minutes | CodeDeployDefault.EKSLinear10PercentEvery1Minutes | 1分ごとに10%ずつ移行 | 段階的デプロイ |
Linear10PercentEvery5Minutes | CodeDeployDefault.EKSLinear10PercentEvery5Minutes | 5分ごとに10%ずつ移行 | 安全重視デプロイ |
EKS設定のポイント
- Kubernetesマニフェストでのサービス・デプロイメント定義
- Application Load Balancerとの統合
- Pod のヘルスチェック設定
- リソース制限と自動スケーリング設定
戦略選択の指針
リスク・コスト・時間による比較
戦略 | リスク | コスト | デプロイ時間 | ダウンタイム | 適用環境 |
---|---|---|---|---|---|
In-Place | 高 | 低 | 短 | あり | 開発・検証 |
Blue/Green | 低 | 高 | 中 | なし | 本番・重要システム |
Canary | 中 | 低 | 長 | なし | 実験的機能 |
Linear | 低 | 低 | 長 | なし | 安定性重視 |
ビジネス要件による選択
高可用性が最優先
- Blue/Green または Linear デプロイメント
- 自動ロールバック設定必須
- 詳細な監視とアラート設定
コスト効率を重視
- In-Place デプロイメント
- メンテナンス時間帯の活用
- 最小限の検証環境
新機能の段階的リリース
- Canary デプロイメント
- A/Bテスト機能との組み合わせ
- ユーザーフィードバックの収集
技術的制約による選択
データベース変更を伴う場合
- Blue/Green デプロイメント
- データベースマイグレーション戦略の検討
- ロールバック計画の策定
セッション管理が必要な場合
- Sticky Session設定の考慮
- セッション情報の外部化
- 段階的な移行戦略
レガシーアプリケーション
- In-Place デプロイメントから段階的移行
- モダン化計画との連動
- 監視機能の段階的強化
実装のベストプラクティス
1. 適切な監視設定
2. 段階的な戦略移行
既存システムでは、段階的にデプロイメント戦略を進化させることを推奨します。
フェーズ1: In-Place → 監視強化 フェーズ2: Blue/Green → 自動化 フェーズ3: Canary/Linear → 最適化
3. 環境別戦略設定
環境 | 推奨戦略 | 理由 |
---|---|---|
開発 | In-Place | 高速イテレーション |
ステージング | Blue/Green | 本番同等の検証 |
本番 | Canary/Linear | リスク最小化 |
適切なデプロイメント戦略の選択により、アプリケーションの品質と可用性を向上させながら、効率的なリリースプロセスが実現できます。ビジネス要件と技術的制約を総合的に検討し、最適な戦略を選択しましょう。