株式会社NoSchoolでCTOをしている@mejilebenです。
今日はCodeDeployでハマったところとして、「AllowTraffic」が終わらなかったときの原因を残しておきます。
起こったこと
CodeDeployでデプロイしているとき、下記のようにデプロイの段階ごとにイベントが発生していて、その進捗をコンソールから見ることができます。
下から2番めに「AllowTraffic」というのがありますが、ここのイベントで急に動作が止まり、それまでのイベントで合計しても10分程度で進んできたのに、1時間弱待っても進まないということが起きました。
原因を見つけたやり方
CodeDeployのデプロイ先がELBだったので、ロードバランサのターゲットグループを見に行きました。

この画像ではステータスが「healthy」になってますが、このときは両方共「unhealthy」となっており、(i)をマウスでホバーするとステータスが「401」であることが読み取れました。
ELBのバックエンドのEC2が401になっている原因
今回はEC2にNginxを利用してBasic認証を掛けていたのが原因でした。
Basic認証を掛けていたのでヘルスチェックが通らなくて、結果的にデプロイ後のトラフィックを通すところで詰んでいたというわけです。
開発中だったので、すっかりヘルスチェックの遷移を見ていませんでした。
応急処置としてBasic認証を外すことで事なきを得ました(今はとりあえず2台構成で組んでいます)。
ターゲットグループのヘルスチェックはその後見事に改善しました。
検討課題
Nginxを利用しているので、特定のパスに対してBasic認証外に逃がしてあげて、ヘルスチェックの設定でそのパスを向くようにすると良いと思います。
で、それ以外のパスに対してはBasic認証をかければヘルスチェックを回避しつつアプリケーションにはBasic認証をかけることができます。
CodeDeployには他にも散々苦しめられたので、小出しで記事書いていきたいなと思っています。
最後に
僕が働いているNoSchoolでは仲間を募集中です!
創業期真っ只中、社員は僕と社長の2人きり(+副業メンバー3人)でEdTechを変えに行ってます!
興味あればお茶でもしましょう。Twitterからの連絡でも大歓迎です!
https://www.wantedly.com/companies/noschool