注目の記事

[激アツアップデート]ALBだけでカナリアリリース(重み付け)ができるようになりました!

とうとうきてしまいました! とうとう、ALB一つだけでターゲットグループの重み付けが出来るようになってしまいました!!!! ALBでターゲットグループの重み付けができるようになり、Route53で設定しなくても良くなりました。
2019.11.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWSエンジニアは朝5時に起きるらしいと聞いていましたが、まさか自分がそっち側に回るとは思ってもいなかったもこ@札幌オフィスです。

とうとうきてしまいました!

とうとう、ALB一つだけでターゲットグループの重み付けが出来るようになってしまいました!!!!

Application Load Balancer simplifies deployments with support for weighted target groups

New – Application Load Balancer Simplifies Deployment with Weighted Target Groups

従来までのBlue/Green(カナリアリリース) デプロイ方法

重み付けをしてトラフィックの数パーセントを新しい環境に流すような場合は、複数のロードバランサーを用意した環境で、Route53にて重み付けを行う必要がありました。

このような環境の場合、Security Group、ALB周りの設定も複雑化しやすく、「簡単に出来る」範囲を少し超えていたと思います。

これからのBlue/Green(カナリアリリース)

ALBでターゲットグループの重み付けができるようになり、Route53で設定しなくても良くなりました。

新しいバージョンをデプロイしたAuto Scaling GroupとTarget Groupだけを別途用意してあげればOKなので、気軽にBlue/Green(カナリアリリース)が出来るようになりますね!

やってみた

早速、ALBでトラフィックの重み付けをしてみたいと思います。

こちらのCDKを利用して検証していきます。

https://github.com/sebsto/cdk-load-balance-autoscaling-groups

上記CDKで作成されたリソースにターゲットグループを追加して、ALBの重み付け設定をしていきましょう。

Greenのターゲットグループを作っていきます。

生成されたインスタンスを指定します。

同じような手順で、Blueのターゲットグループも設定していきます。

ターゲットグループができたら、早速ALBのルールを設定してきます。

ALBのリスナーから、「ルールの表示/編集」を選択

新しいルールを挿入していきます。

ひとまず、blueを10%、greenを90%と設定してみました。

これだけで重み付けの設定は完了です!

早速ALBのエンドポイントをブラウザで叩いてみましょう。

10回に1回くらいBlueが出ている気がします。

デプロイを完了させてみましょう。

Blueを100にして、Greenを0にしてみました。

暫くすると、Blue画面が表示され、Greenが表示されなくなりました。

スティッキーセッション

ALBのルール設定から設定できます。

有効化後、curlで叩くと、Set-Cookieが降ってきました。

この機能を使えば「10%の人に1時間新しい環境にアクセスしてもらう」みたいなこともできると思います!

まとめ

今回のアップデートでターゲットグループさえ作成すればBlue/Green/カナリアをALB単体で容易に出来るようになりました!

従来のRoute53でレコードを返す形ですと、ローカルのDNSキャッシュなどで綺麗に切り変らない可能性がありますが、ALBを利用した場合は綺麗に出し分けができるようになるかと思います!

今回はターゲットがEC2でしたが、ECS/Fargate/Lambda/オンプレなどなど・・、ターゲットグループに設定できるものならなんでも簡単に出来ますので、「本番環境でテストをする」が流行り、CI/CDが更に後押しされるのではと思っています。

以上、もこでした。