API Gateway の Canary リリースデプロイの設定 - Amazon API Gateway

API Gateway の Canary リリースデプロイの設定

Canary リリースは、新しいバージョンの API (および他のソフトウェア) をテスト目的でデプロイするソフトウェア開発戦略であり、ベースバージョンは同じステージで通常のオペレーション用の本稼働リリースとしてデプロイされたままになります。説明のため、このドキュメントではベースバージョンを本稼働リリースとします。これは合理的ですが、テストのために Canary リリースを非本稼働バージョンにも自由に適用できます。

Canary リリースのデプロイでは、すべての API トラフィックはランダムに区切られて事前に設定された比率で本稼働リリースと Canary リリースに送られます。通常、Canary リリースは低い割合の API トラフィックを受け取り、残りは本稼働リリースが受け取ります。更新された API 機能は、Canary を介した API トラフィックのみに認識されます。Canary トラフィックの割合を調整してテストカバレッジやパフォーマンスを最適化できます。

Canary トラフィックを低く保ち、選択をランダムにすることにより、どのような時でもほとんどのユーザーは新しいバージョンの潜在的なバグに悪影響を受けず、また、常に悪影響を受け続けるユーザーもいません。

テストメトリクスが要件を満たしたら、Canary リリースを本稼働リリースに昇格させ、Canary をデプロイから無効にします。これにより、本稼働ステージで新機能が使用可能になります。

API Gateway での Canary リリースのデプロイ

API Gateway で、Canary リリースのデプロイでは、API のベースバージョンの本番稼働リリース用のデプロイステージを使用し、その API のベースバージョンに関連した新しいバージョンの Canary リリースへアタッチします。ステージは初期のデプロイと関連付けられ、Canary は後続のデプロイに関連付けられます。最初は、ステージと Canary ポイントの両方が同じ API バージョンを指します。このセクションでは、ステージと本稼働リリースを同じ意味で使用し、また、Canary と Canary リリースを同じ意味で使用します。

Canary リリースで API をデプロイするには、Canary 設定を通常のデプロイステージに追加して Canary リリースのデプロイを作成します。Canary の設定は基礎となる Canary リリースを表し、ステージはこのデプロイ内の API の本稼働リリースを表します。Canary の設定を追加するには、デプロイステージの canarySettings を設定して以下を指定します。

Canary リリースが有効にされると、Canary リリースが無効にされて Canary 設定がステージから削除されるまで、デプロイステージは別の非 Canary リリースデプロイに関連付けることができなくなります。

API 実行のログ作成を有効にすると、Canary リリースはすべての Canary リクエストに生成される独自のログとメトリクスを持つようになります。これらは、本番稼働ステージの CloudWatch Logs グループおよび Canary 固有の CloudWatch Logs グループにレポートされます。アクセスログ記録も同じです。個別の Canary 固有のログは新しい API の変更を検証し、変更を受け入れて Canary リリースを本稼働ステージへ昇格させるか、または、変更を破棄して Canary リリースを本稼働ステージから戻すかを決定するのに役立ちます。

本稼働ステージの実行ロググループの名前は API-Gateway-Execution-Logs/{rest-api-id}/{stage-name} で、Canary リリースの実行ロググループの名前は API-Gateway-Execution-Logs/{rest-api-id}/{stage-name}/Canary です。アクセスログの記録には、新しいロググループを作成する、または、既存のものを選択する必要があります。Canary リリースのアクセスロググループ名には、選択されたロググループ名に /Canary サフィックスが付加されます。

Canary リリースはステージキャッシュを使用でき、有効にされると、レスポンスを保存しキャッシュされたエントリを使用して、事前に設定された有効期限 (TTL) 内に次の Canary リクエストへ結果を返します。

Canary リリースのデプロイでは、本稼働リリースと Canary リリースの API は同じバージョンまたは異なるバージョンに関連付けることができます。異なるバージョンに関連付けられている場合、本稼働と Canary リクエストへのレスポンスは別々にキャッシュされ、ステージキャッシュは本稼働と Canary リクエストへ対応する結果を返します。本稼働リリースと Canary リリースが同じデプロイに関連付けられている場合、ステージキャッシュは両方のタイプのリクエストに単一のキャッシュキーを使用し、本稼働リリースと Canary リリースからの同じリクエストに同じレスポンスを返します。