新しいアプリケーションバージョンを段階的にロールアウトし、問題が発生した場合はロールバックできるように、カナリアリリースを設定します。
前提条件
アプリケーションのインスタンス数が 2 つ以上である必要があります。
背景情報
カナリアリリースでは、既存バージョンと並行してアプリケーションの新しいバージョンをデプロイできます。この戦略により、トラフィックの一部(小規模なサブセット)に対して新バージョンのパフォーマンスをテストし、システム全体の安定性を維持しながら早期に問題を特定・修正することが可能になります。
カナリアリリース中は、安定性を確保するため、カナリアバッチのインスタンス数は合計インスタンス数の 50% を超えてはなりません。残りのインスタンスはその後のバッチでデプロイされます。最初のバッチがリリースされた後、次のバッチを実行するかどうかを手動で決定できます。これにより、完全ロールアウト前にフィードバックを収集し、パフォーマンスをモニタリングできます。
カナリアリリースには、主に以下の 2 つのアプローチがあります。
-
トラフィックスプリッティング:トラフィックの一定割合を新しいバージョンにルーティングします。たとえば、トラフィックの 20% を新バージョンに、80% を旧バージョンに送信します。
-
コンテンツベースルーティング:ヘッダーやユーザー ID などのリクエスト属性に基づいてトラフィックをルーティングします。たとえば、特定のユーザーからのリクエストを新バージョンに誘導します。
段階的リリースと比較して、カナリアリリースはトラフィック制御をより細かく行えます。段階的リリースの詳細については、「アプリケーションの段階的リリース」をご参照ください。
ユースケース
あるアプリケーションが Version 1 (Ver.1) で 10 個のインスタンスを実行しています。すべてのインスタンスを Version 2 (Ver.2) にアップグレードする必要があります。このシナリオでは、まず 2 個のインスタンスに対してカナリアリリースを実施し、残りの 8 個のインスタンスを 3 つのバッチに分けてデプロイします。以下の図はこのプロセスを示しています。
操作手順
アプリケーションを再デプロイすると、アプリケーションは再起動されます。業務中断などの予期しないエラーを防ぐため、オフピーク時間帯にアプリケーションをデプロイすることを推奨します。
上部でリージョンと名前空間を選択し、SAE アプリケーション一覧ページで対象アプリケーションの ID をクリックして、アプリケーション詳細ページを開きます。
-
対象アプリケーションのBasic Informationページで、Deploy Applicationをクリックします。
-
デプロイメントパラメーターを設定します。
説明アプリケーションのデプロイ方法は、初回デプロイ時に選択した方法に基づきます。選択された方法に従ってパラメーターを設定してください。
-
WAR パッケージによるデプロイ:別の WAR パッケージをアップロードするか、新たにデプロイする WAR パッケージのパスを入力し、実行環境やその他の設定を行います。
-
JAR パッケージによるデプロイ:別の JAR パッケージをアップロードするか、新たにデプロイする JAR パッケージのパスを入力し、実行環境やその他の設定を行います。
-
ZIP パッケージによるデプロイ:別の ZIP パッケージをアップロードするか、新たにデプロイする ZIP パッケージのパスを入力し、実行環境やその他の設定を行います。
-
イメージ: イメージの設定セクションで、イメージの変更をクリックします。イメージの変更パネルで、別のイメージリポジトリまたはイメージバージョンを選択します。
-
-
Release Policy Settingsセクションで、カナリアリリースを設定します。
パラメーター
説明
Release Policy
Canary Release (Phased) を選択します。
Instances for Canary Release
初期カナリアバッチに含めるインスタンス数を指定します。
Remaining Batches After Canary Release
カナリアリリース後、残りのインスタンスは指定されたバッチ数に分けてデプロイされます。
Peak Volume
Kubernetes の
MaxSurgeパラメーターに対応します。アップデート中に希望インスタンス数を超えて作成可能な最大インスタンス数を示します。重要この機能は招待プレビューです。アクセスをリクエストするには、DingTalk グループ (ID: 32874633) の担当チームまでご連絡ください。
説明-
Minimum Available Instancesが 100%(つまり
MaxUnavailableが 0)に設定されている場合、Peak Volumeを 0 にすることはできません。 -
パーセンテージを使用する場合、値は切り上げられます。たとえば、インスタンス数が 5 でこれを 25% に設定すると、Peak Volumeの値は 2 になります。
Minimum Available Instances
ローリングアップデート中に常に利用可能である必要がある最小インスタンス数を示します。
説明-
業務継続性を確保するため、Minimum Available Instancesを 1 以上に設定することを推奨します。0 に設定すると、アップグレード中にアプリケーションが中断されます。
-
パーセンテージを使用する場合、値は切り上げられます。たとえば、インスタンス数が 5 でこれを 25% に設定すると、Minimum Available Instancesは 2 になります。
レイヤー 7 トラフィックのカナリアリリースルール (Kubernetes Ingress) を有効化
レイヤー 7 トラフィック (Kubernetes Ingress) のカナリアリリースルールを作成した後にのみ有効になります。
Enable Canary Release Rule of Microservices (Spring Cloud and Dubbo Applications)
マイクロサービストラフィックのカナリアリリースルールを作成した後にのみ有効になります。
-
-
設定が完了したら、OK をクリックします。
-
以下のいずれかの方法でデプロイメントを確認します。
-
方法 1:変更記録ページで変更の詳細とリリースステータスを確認します。すべてのバッチが正常に完了すれば、アプリケーションの更新は完了です。
-
方法 2:アプリケーションのBasic InformationページのInstancesタブでインスタンスステータスを確認します。ステータスが実行中であれば、アプリケーションは正常にデプロイされています。
-
アプリケーションロールバック
カナリアリリースまたは段階的リリースを使用してアプリケーションをアップグレードする際、すべてのインスタンスがアップグレードされるまで、アプリケーションのステータスは実行中のままです。
アップグレード中に最初のバッチのインスタンスが予期しない問題により応答しなくなった場合は、Change Detailsページに移動し、Roll Back Nowをクリックします。これにより、アップグレード済みのインスタンスが以前のバージョンに復元され、元の構成が再適用されます。
デプロイメントパッケージが利用できない、ヘルスチェックに失敗するなど、変更プロセス中に例外が発生した場合、アップグレードは失敗します。SAE は自動的にプロセスを停止し、アプリケーションロールバックを開始します。
SAE でのアプリケーションアップグレードは、約 30 分でタイムアウトします。この場合、SAE はタイムアウト例外を報告し、変更プロセスを一時停止します。その後、Change Detailsページに移動して、手動でリリースを中止し、アプリケーションをロールバックする必要があります。
リリースの中止
進行中のリリースを停止するには、Change DetailsページでStop Deploymentをクリックします。
リリースを中止すると、アプリケーションの複数バージョンが同時に実行される可能性があります。
-
すでにデプロイ済みのインスタンス:現在の状態で引き続き実行され、ロールバックされません。
-
デプロイ中のインスタンス:これらのインスタンスはデプロイを完了し、今回のリリースの新バージョンで実行されます。
-
まだデプロイされていないインスタンス(後続バッチのすべてのインスタンスを含む):現在の状態のまま維持され、それらに対するリリースプロセスは停止されます。
-
auto scaling による新規インスタンス:スケールアウトイベント時に新バージョンを使用します。
中止後は、すべてのインスタンスが同じバージョンで実行されるように、アプリケーションを再デプロイするか、以前のバージョンにロールバックすることを推奨します。
詳細情報
SAE でアプリケーションをデプロイした後、以下の操作を実行できます。
|
操作 |
関連ドキュメント |
|
アプリケーションのライフサイクル管理(更新、スケーリング、起動、停止、削除など)を実行します。 |
|
|
auto scaling の設定、Server Load Balancer (SLB) インスタンスのバインド、スケジュール起動・停止ルールの作成などにより、アプリケーションのパフォーマンスを最適化します。 |
|
|
ログの管理、モニタリングデータの表示、イベントの確認、変更記録のレビューなどにより、アプリケーションのステータスを監視します。 |