Google App Engineのデプロイエラーとその対処法
Google App Engineへのデプロイでけっこう頻繁にエラーが出る。ググってもあまり見つからないことが多いので、その都度ここにメモしていくことにする。
UNKNOWN: Error Response: [4] DEADLINE_EXCEEDED
→ タイムアウトしている模様。確証はないのだが、フレキシブル環境のデプロイではその都度コンテナイメージをGoogle Cloud BuildによりビルドしてGCEにデプロイしている。Cloud Build上のひとつのタスクのタイムアウトはデフォルトで10分となっているようで、10分以上かかるとこのエラーが発生する。
対処法は以下のコマンドを実行してタイムアウトの時間を伸ばすこと
$ gcloud config set app/cloud_build_timeout 1200
公式ドキュメントにも書かれている。
ERROR: (gcloud.app.deploy) Error Response: [8] The region asia-northeast1 does not have enough resources available to fulfill the request. Please try again later.
GCE(Google Compute Engine)で発生するエラー。AppEngineのフレキシブル環境は実際のGCE上の仮想マシンにコンテナをデプロイしているようなのでこのエラーが発生する。エラーの原因は読んだ通りで、GCE側のリソース不足に起因する。
ググると情報は大量にヒットするが、だいたい紹介されている内容は以下。
- 待つ
- 他のリージョンやゾーン(
a
、b
、c
…)にデプロイする - インスタンス設定を変える
↓ StackOverflowのこのページだとGoogleの中の人が回答いるようだが、根本的な解決策は提示されていない。
ERROR: context deadline exceeded TIMEOUT
メッセージ通りタイムアウトしている。CloudBuildのyamlファイルのタイムアウトの設定を伸ばせばOK。
steps:
- name: 'ubuntu'
args: ['sleep', '600']
timeout: 500s
- name: 'ubuntu'
args: ['echo', 'hello world, after 600s']
timeout: 600s
↑ タイムアウトを10分にする例
ERROR: (gcloud.app.deploy) Error Response: [13] Flex operation projects/foo/regions/asia-northeast1/operations/... error [INTERNAL]: An internal error occurred while processing task /app-engine-flex/insert_flex_deployment/flex_create_resources>...: 403 Forbidden......failed.
app.yml
のスケーリング設定で
manual_scaling:
instances: 1
としたときに発生したエラー。開発環境だったのでインスタンス数は1にしていた。
この回答に解決策が書かれていた。以下のように最大インスタンス数(max_num_instances
)を2にしたら解決
automatic_scaling:
min_num_instances: 1
max_num_instances: 2
ERROR: (gcloud.app.deploy) PERMISSION_DENIED: You do not have permission to act as 'foo-bar@appspot.gserviceaccount.com'
CloudBuildからApp Engineにデプロイしようとしたときに発生。IAM設定でCloudBuildのサービスアカウント(○○@cloudbuild.gserviceaccount.com
)に対して[サービス アカウント ユーザー]というロールを付与することで解決。
ERROR: (gcloud.app.deploy) INVALID_ARGUMENT: The following quotas were exceeded: BACKEND_SERVICES (quota: 9, used: 9 + needed: 1).
記事にした
ERROR: (gcloud.app.deploy) ABORTED: Cannot operate on apps/foo-bar/services/default/versions/barbecause an operation is already in progress for apps/foo-bar/services/default/versions/bar by baz
リポジトリの特定のブランチにマージされると自動デプロイする設定になっており、短期間にブランチに2回マージされたため発生。デプロイのタイミングが重なるとエラーになる模様。
時間を置いて再デプロイを行えばOK。