GAEにflaskでデプロイできているが、502BadGatewayでアクセスできないときの原因3つ
GoogleAppEngine(GAE)はデプロイするのが楽ちんなPaasの一つなので、インフラの知識がない人にはもってこいです。
先日、flaskで作成したwebアプリをGAEにデプロイしたところ、デプロイできているのに「502BadGateway」が表示されてアクセスできない場合がありました。
他のサイトで載っている方法を試しましたが、解決できなかったことだったので、この記事では「502BadGateway」になっているときに考えられる原因を上げていこうと思います。
私は、以下3つの原因を解消すれば、「502BadGateway」を抜けられたましたので、ここで悩んでいる方は参考にしていただければと思います。
目次(クリックで読みたい部分にジャンプできます)
502BadGatewayでアクセスできない
Google App Engineでデプロイはできているけど、「502Bad Gateway」が表示されてアクセスできないときに考えられる状況は以下です。
- gunicornを入れていない
- インポートのずれ
- ログの未確認
gunicornを入れていない
GAEにアップロードする際に、必要なモジュールなどを書く「requirement.txt」があります。
そこの中に、gunicorn が書かれているか見てみましょう。
flaskをデプロイするためにはgunicornが必須です。
また、後述することとも関係がありますが、gunicorn=○○.○○.○○のような形で入力する方法を公式ドキュメントでは書かれていますが、
ただ、以下のようにgunicornのみを記述する方が良いです。
gunicorn
なので、まずは、rquirement.txtの中に、gunicornが記載されているかどうか確認しましょう。
インポートのずれ
単純なアプリ(インポートするのがflaskのみ等)では関係ありませんが、複数のモジュールをインストールする必要がある場合は、その相互対応しているかを気にしなければなりません。
しかし、
pip freeze > requirement.txt
などで、バージョン込みでrequirement.txtに書いている場合、モジュールの一つとかがGAEで対応していない場合があります。
その場合、GAEで対応しているバージョンに書き直すわけですが、そうすると相互に依存している他のモジュールも連鎖的にバージョンを変更しなければいけなく面倒です。
なので、requirement.txtの中でインストールするモジュールのバージョンを書かないでおく方が賢明です。
ログの未確認
以上の二つがクリアして、デプロイできた!と思い、アクセスすると、まだアクセスできないときがあります。
その場合は、ファイルの中で何らかの問題がある場合があります。
対処法として、ログを確認することです。
GAEの検索窓で「ログエクスプローラー」と検索します。
すると、ログを管理する画面になります。
そこで、一度デプロイしたURLにアクセスすると、エラーが出るようになります。
そこでは、ローカルと同じようにエラーが出ていますので、それを一つ一つ解決していければよいと思います。
まとめ
今回は、GAEでアクセスできないときの対処法についてまとめました。
以下では個人開発で成功するためのコツについて紹介しています。
併せて読んでみてください。