Google Cloud4 択難易度 応用

状況

Cloud Run に新しいリビジョンをデプロイしたら失敗し、次のメッセージとコンテナのログが出た。ローカルで npm start して確かめたときは問題なく動いていた。

原因として最も可能性が高いのは?

ERROR: Revision 'api-00002-xyz' is not ready and cannot serve traffic.The user-provided container failed to start and listen on the portdefined provided by the PORT=8080 environment variable.[app] Server listening on http://127.0.0.1:8080

正答

  1. PORT が 8080 なので、アプリを 80 番で待ち受けるよう変える必要がある
  2. サービスの IAM に allUsers の起動元ロールが付いていない
  3. コンテナイメージの保存先と Cloud Run のリージョンが違う
  4. アプリが 127.0.0.1 だけで待ち受けていて、外から届かない

解説

ログの最終行を見ると、アプリは 8080 番で起動しているので、ポート番号は PORT 環境変数と一致している。問題は待ち受けのアドレスで、127.0.0.1(ループバック)だとコンテナ内からしか接続できず、Cloud Run からのリクエストもヘルスチェックも届かない。Cloud Run のコンテナは 0.0.0.0 で待ち受ける必要がある。ローカルで動いたのは、ブラウザとアプリが同じマシンの中にあり、127.0.0.1 でも届いたため。80 番に変えると今度はポートが合わなくなる。IAM はリクエストの認可で、起動の成否には関係しない。なお、デプロイに失敗したリビジョンにはトラフィックが流れず、直前のリビジョンが動き続けるので、慌てて既存サービスを消さないこと。

参考: docs.cloud.google.com

cloud-runtroubleshootingcontainer-contract

この問題を含む Google Cloud のテストを制限時間つきで解く

Google Cloudクイズへ