codingecho

日々の体験などを書いてます

App Engineが502を返すときに確認すること

TL;DR

  • インスタンスリソース (CPU, Memory size, etc...) がどれぐらい必要か確認して十分なサイズを設定する
  • エラーが出た時はStackdriver Loggingのログをよく確認すること

gcloud app deployでデプロイした後ブラウザからアクセスすると以下のような502エラーとテキストが出ました。

Error: Server Error
The server encountered a temporary error and could not complete your request.
Please try again in 30 seconds.

Stackdriver Loggingを見るとVMのヘルスチェックに失敗してプロキシであるNginxからサービスにルーティングできていないようでした。

VMのヘルスチェックに失敗

私はここで勘違いして自分のコードかデプロイに使用したDockerfileに問題があると思っていました。

その後Stackdriverでログを確認して、最終的にVMのディスクスペースが足りずにヘルスチェックに失敗していることがわかりました。

ディスクのスペースが無いエラー

同じようなエラーがたくさん...

残りのエラーはメモリー不足でした。App Engineのデフォルト値 (600MB) を使用していました。

インスタンスのメモリ不足

app.yamlにディスクサイズとメモリサイズの設定を追加してデプロイし直しました。設定についてはapp.yaml Configuration Fileを参照してください。

変更前

runtime: custom
env: flex

service: my-service
health_check:
  enable_health_check: False

変更後

runtime: custom
env: flex

service: my-service
health_check:
  enable_health_check: False

resources:
  cpu: 2
  memory_gb: 5
  disk_size_gb: 25

設定を変更した後、正しく動作しました!

ポイントとしてはStackdriver loggingのログをよく見ましょうと言うことです。このエラーに2日間ほど悩まされました😭