ちゃんるいすのブログ

オタクエンジニアの雑記

Fargate + gRPC で B/G とカナリアリリースを実現する


構成

f:id:rarirureluis:20190226145102p:plain

課題①

こんな構成のとき、API のタスクだけを更新する際に Blue/Green とカナリアリリースを実現するときにどうするのが良いか迷ったのでまとめておきます。
gRPC なので、Front -> Internal ALB -> API では、Internal ALB <-> API は HTTP/1.1 になるため、Internal ALB は置けない。

解決①

ECS Service discovery を使う。

課題②

ECS Service discovery の環境で、Blue/Green とカナリアリリースを実現したい。

解決②

トラフィックポリシーを使用して、加重ルールを使用することで Blue/Green, カナリアリリースの両方を実現できる。

新しく Private Zone に Hosted Zone を作成する。これは Front で使用する用。
トラフィックポリシーをこんな感じに作成する。

f:id:rarirureluis:20190226154338p:plain
トラフィックポリシー(加重ルール)

エンドポイントの値として、Service discovery で作られたドメインを指定する。

作成したトラフィックポリシーを適用したポリシーレコードを作成する。

f:id:rarirureluis:20190226154715p:plain
ポリシーレコード

Front で常に参照するドメインは、main.f-b.master.hasegawa.local になる。

検証

dig main.f-b.master.hasegawa.local +short A

タスクの数を増やしたとき

RUNNING になった後、60秒ぐらいで新しい IP が追加されて返ってくる。

トラフィックポリシーを変更したとき

加重を blue:100 green:0 に変更

8秒後に blue が出てきたり消えたりするが、13秒後ぐらいで完全に切り替わる。