web-dev-qa-db-ja.com

gcloud app deploy-サービスのデフォルトの更新がインスタンス制限のコード13クォータを超えて失敗し、401が未承認

新しいプロジェクトを作成しました、最初のデプロイで私はこれを取得します:

    Updating service [default] (this may take several minutes)...failed.                                                                                                       
ERROR: (gcloud.app.deploy) Error Response: [13] Flex operation projects/primalexchange/regions/us-east1/operations/b5a5813a-14bf-43b6-af7f-e17b15866c4f error [INTERNAL]: An internal error occurred while processing task /appengine-flex-v1/insert_flex_deployment/flex_create_resources>2020-05-16T23:23:08.373Z4721.jc.14: Deployment Manager operation primalexchange/operation-1589671388926-5a5cc367252d6-eae4c5cb-bc5f1a6e errors: [code: "RESOURCE_ERROR"
location: "/deployments/aef-default-20200516t192110/resources/aef-default-20200516t192110"
message: "{\"ResourceType\":\"compute.beta.regionAutoscaler\",\"ResourceErrorCode\":\"403\",\"ResourceErrorMessage\":{\"code\":403,\"errors\":[{\"domain\":\"usageLimits\",\"message\":\"Exceeded limit \'QUOTA_FOR_INSTANCES\' on resource \'aef-default-20200516t192110\'. Limit: 8.0\",\"reason\":\"limitExceeded\"}],\"message\":\"Exceeded limit \'QUOTA_FOR_INSTANCES\' on resource \'aef-default-20200516t192110\'. Limit: 8.0\",\"statusMessage\":\"Forbidden\",\"requestPath\":\"https://compute.googleapis.com/compute/beta/projects/primalexchange/regions/us-east1/autoscalers\",\"httpMethod\":\"POST\"}}"

ビルダーでのビルドは完了した成功として表示されます。

バージョンが1つあり、インスタンスが0、トラフィック割り当てが100%であることをバージョンの下で示しています。バージョンをクリックすると、サイトに移動して404エラーが表示されます。

おそらく、サービスが停止していると表示されているためです。おそらく、「更新」されなかったためです。

これは「私のコード」のことではないと思います。なぜなら、私がかつて別のプロジェクトにデプロイしたバージョンのgitチェックアウトを正常に実行したためです。これは、基本的にはhello worldアプリに相当し、一度成功したのですが失敗。さらに、数日前に同じプロジェクトで別の有効なデプロイメントがありましたが、更新されたコードでデプロイしようとすると、デプロイメントが失敗し、この非常にエラーが発生して、プロジェクト全体を削除してやり直す必要がありました。現在、この新しいプロジェクトで同じエラーが発生しています。そもそも問題を引き起こしたのが自分のコードではないことをどうやって知るのですか?私のコードとビルドのログが原因で失敗したビルドがありました。ここでビルドは成功します。ビルドに失敗はありません。

だから私はこのURLに行きました https://compute.googleapis.com/compute/beta/projects/primalexchange/regions/us-east1/autoscalers これはこれを述べています:

{
  "error": {
    "code": 401,
    "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
    "errors": [
      {
        "message": "Login Required.",
        "domain": "global",
        "reason": "required",
        "location": "Authorization",
        "locationType": "header"
      }
    ],
    "status": "UNAUTHENTICATED"
  }
}

それが私の問題なのか、他の何かなのかわかりません。それが本当に何を意味するのかさえ知りません。 「projectid.json」で資格情報を取得し、GOOGLE_APPLICATION_CREDENTIALS = 'projectid-2c8anumber842b4.json'をエクスポートしたことを確認しました

そして、Firebaseログイン関連のコードを切断しました。

私はこれらのコマンドをしました

gcloud services enable servicemanagement.googleapis.com
gcloud services enable servicecontrol.googleapis.com
gcloud services enable endpoints.googleapis.com

この問題を解決する方法がわかりません。私は週末中ずっとそれを直そうとしている。

IAMの下でクォータを使用するとき、私はus-east1のオートスケーラーのクォータを調べましたが、これは何も超えていないことがわかりました enter image description here

制限が8の唯一のものはCPUで、2だと言っています。

何を台無しにしているのかわかりません。

はい、課金は有効です。

私はこれに遭遇しました、おそらくこれは私にいくつかの場所をもたらすでしょう... enter image description here

認証ヘッダーとは何ですか?そして、なぜ最初にそれが必要でなかったのか……今回は何を台無しにしたのか。

そして、私がコードを変更して、hello worldのスペルミスがあり、デプロイ時にまだ失敗するようにしました。

import logging

from flask import Flask, jsonify, redirect, url_for
from flask import request, make_response
from flask import render_template
from image_upload import upload_blob

from google.cloud import storage
from google.cloud import datastore


from datetime import datetime
from cryptography.fernet import Fernet

from models.media import Media
from models.user import User


from google.cloud import ndb

import json

import random
from uuid import uuid4

from flask import Flask, make_response, request
from google.auth.transport import requests
import google.oauth2.id_token
# from google.cloud import firestore

from flask_wtf.csrf import CSRFProtect, generate_csrf
from werkzeug.utils import secure_filename
from werkzeug.exceptions import RequestEntityTooLarge

@app.route('/', methods=['GET'])
def hi():
    return "hellow world"


@app.errorhandler(500)
def server_error(e):
    logging.exception('An error occurred during a request.')
    return """
    An internal error occurred: <pre>{}</pre>
    See logs for full stacktrace.
    """.format(e), 500


if __name__ == '__main__':
    # This is used when running locally. Gunicorn is used to run the
    # application on Google App Engine. See entrypoint in app.yaml.

    app.run(Host='127.0.0.1', port=8080, debug=True)

そして、これをもっと詳しく見てみると、フラスコを二重にインポートしていることが明らかな場合、これはローカルで実行されているのでしょうか。

私はそれを削除してからデプロイしようとしますが、それがこの問題に関する別のエッセイを間もなく発行するために戻ってくる問題だとは思いません。

ええ、それは問題ではありませんでした。まだ失敗しました。

この画像は、私が始めた3番目のプロジェクトからのものです。そして、私はそれを今まで配備するようにしました。同じエラーで失敗しています:

enter image description here

これがApp.yamlです

runtime: python
api_version: '1'
env: flexible
threadsafe: true
handlers:
  - url: /static/(.*)
    application_readable: true
    static_files: __static__/static/\1
    require_matching_file: false
    upload: __static__/static/.*
  - url: /.*
    script: main.app
    secure: never
env_variables:
  SECRET_KEY: ____________
automatic_scaling:
  cool_down_period: 120s
  min_num_instances: 2
  max_num_instances: 20
  cpu_utilization:
    target_utilization: 0.5
network: {}
liveness_check:
  initial_delay_sec: 300
  check_interval_sec: 30
  timeout_sec: 4
  failure_threshold: 4
  success_threshold: 2
readiness_check:
  check_interval_sec: 5
  timeout_sec: 4
  failure_threshold: 2
  success_threshold: 2
  app_start_timeout_sec: 300

展開すると、クォータをチェックしたときに使用制限のIPアドレス4に達したように見え、そうでない場合は2に戻ります。だから誰かがこれを避ける方法について私のapp.yamlを設定する方法について私に助言することができますか?スケーリングについては何も知らないので、自動スケーリングを実行したかったので、このapp.yamlは基本的にデフォルト設定です。

気にしないで。割り当てを6に増やしても、エラーが発生します。

1
blah blah

原因は不明ですが、スケーリングを手動に設定するか、app.yamlでmax_num_instancesを8未満に設定することで、同じ問題を解決できました。

automatic_scaling:
  min_num_instances: 1
  max_num_instances: 7
5
Cole

Google Cloudは割り当て量によってリソースを制限します。以下を参照してください:

https://cloud.google.com/docs/quota

多くの請求先アカウントでは、プロジェクトごとに8つのCompute Engineインスタンス(VM)に制限されています。コンソールから割り当ての増加をリクエストできます。

https://console.cloud.google.com/iam-admin/quotas

App Engine FlexはCompute Engine VMを使用します。これらを使用する方法は2つあります。

  • 同時に実行されている複数のデプロイ済みバージョン
  • デプロイされたバージョンごとに複数のインスタンス。

App Engineダッシュボードを介して、またはCompute Engineインスタンスを一覧表示することで、|これを判別できるはずです。

https://console.cloud.google.com/compute/instances

これは洞察に富むので、app.yamlを質問に追加してください。

gcloudを使用してアクセストークンを取得し、これをリクエストヘッダーに含めることで、Google Cloudサービスへの認証済みリクエストを行うことができます。

curl \
--request GET \
--header "Authorization: Bearer $(gcloud auth print-access-token)" \
https://compute.googleapis.com/compute/beta/projects/primalexchange/regions/us-east1/autoscalers
0
DazWilkin

私はグーグルの技術サポートを受けました。彼らは私のクォータをチェックしました。彼らは私のコードをチェックしました。デプロイのverbrosity = debugを実行した後、リージョンを切り替えるように指示されました。

彼は、問題は私がいる地域でgoogle flex engineに使用できるvmが不足していることであり、地域を切り替えるか、標準のgoogle app engine環境に切り替える必要があると述べました。

はい。プロジェクトを4回削除して、どちらかをやり直す必要があります。

LOL

少なくとも私はそれが私がやっていることではないことを知っています。

更新日:4番目のプロジェクトも失敗しました。今回の技術サポートによると、エンジニアがそれを見てくれたら、彼は私に連絡するつもりだという。

注:標準のApp Engine環境で問題なくデプロイされます

Update1:

"こんにちは、

この問題はApp Engine製品チームに報告されており、現在調査中です。

現在のところ、解決のためのETAはありませんが、チームからの進捗状況がわかり次第、アップデートを提供します。

ありがとうございました。"

誰か他の人が臨時報告を投稿しました https://issuetracker.google.com/issues/157161938#comment2

とりあえず、App Engine標準の下に置いておきます

0
blah blah