起きたこと
先日、AWS Elastic BeanstalkでWebアプリをデプロイしました。
数々のエラーと戦い、完全に潰しきったと思っていたのですが、ダッシュボードをみるとHealthステータスが"Severe"でなにやらあかんっぽい。
でもログを見てもエラーはないし、ドメインにもアクセスできる...一体何がダメなんだと思ってAWSサポートさんに問い合わせてみたところこのような回答が。
curl 操作から、レスポンスコードが「301」であることがわかりました。EnvironmentのロードバランサーはHTTP 200をレスポンスコードとして期待していますが、アプリケーションはHTTP 301を返していることをお知らせします。バックエンドでリダイレクトを設定すると、301 または 302 のレスポンスコードが返され、アプリケーションが正常に動作していてもヘルスチェックに失敗することがあります。
したがって、成功コードの不一致により、「Target.responseCodemIsMatch」[2] でヘルスが失敗します。その結果、健康状態は深刻になっています。
この問題を解決するには、以下の手順を参照して、HTTP 301 を成功コードとして受け入れるようにロードバランサーを設定することをお勧めします。
要するに「今301レスポンスが返ってきていて、これがなんらかのエラーと認識しちゃっているのが原因。 Elastic Beanstalkにこのレスポンスはエラーじゃないよと認識させれば解決できる」ということみたいです。
実際、curlでリクエスト投げてみたところ、それっぽいレスポンスが。
curl -Ivk {myAppDomain.ap-northeast-1.elasticbeanstalk.com}
* Trying xx.xxx.xxx.xx:80...
* Connected to {myAppDomain.ap-northeast-1.elasticbeanstalk.com} (xx.xxx.xxx.xx) port 80 (#0)
> HEAD / HTTP/1.1
> Host: {myAppDomain.ap-northeast-1.elasticbeanstalk.com}
> User-Agent: curl/7.79.1
> Accept: /
> Mark bundle as not supporting multiuse
< HTTP/1.1 301 Moved Permanently
HTTP/1.1 301 Moved Permanently
301レスポンス=リダイレクトですが、独自ドメイン設定したりHTTP->HTTPSへのリダイレクト設定などしたのでその影響のよう。
解決法
ロードバランサーに301レスポンスを受け入れるよう設定する。
具体的には下記のようにする。
- Configuration -> Load balancer -> Edit をクリック
- Processes -> 「Port: 80, Protocol: HTTP」のプロセスにチェック -> Action -> Edit をクリック
- HTTP code に
301を追加。200がなければこれも追加する。その場合は200,301という風にスペースなしカンマで区切る。その後、 Saveボタンを押して閉じる - 最後にページ最下部の 「Applyを押して、その後Contiuneを押す」を忘れずに。これをしないと適応されない。以上!
ロードバランサーの設定のように、インフラ側の挙動はドキュメントを読むだけでは判断しづらい場面が多くあります。こうした基礎を体系立てて学べる場としてSiiDを運営しています。
AIプログラミングスクール「SiiD」について
AIプログラミングスクール「SiiD」は、未経験からITエンジニア転職を目指す方向けのオンラインスクールです。
SiiDの特徴
- 現役エンジニアでYouTube登録者約13万人の「セイト先生」が代表兼主任講師
- 採用側の実務知見(2,000人以上の選考・150名以上のエンジニア採用)にもとづく指導
- 生成AIを取り入れた学習設計と、実務レベルのフルスタックWeb開発スキル
- Workship CAREER(株式会社GIG)と連携した無料の転職伴走支援
- 経済産業省認定のReスキル講座で、給付金の条件を満たせば実質105,600円〜
- 学割あり(35%オフ)
こんな方におすすめ
- 未経験・文系・社会人からITエンジニア転職を本気で目指したい方
- 独学に限界を感じている方
- 費用を抑えながら実務スキルと転職サポートを両立したい方
「未経験だから」とあきらめる必要はありません。採用する側を知り尽くしたプロが、給付金で負担を抑えながら内定まで伴走します。




