2

创建了一个新项目,在第一次部署时我得到了这个:

    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\"}}"

构建器中的构建显示为完全成功。

它在版本下显示我有一个版本,有 0 个实例,100% 流量分配,当您单击该版本时,它会将您带到我的网站,显示 404 错误。

可能是因为它说服务已停止,这可能是因为它没有“更新”。

我不认为这是“我的代码”的事情,因为我对曾经成功部署在不同项目下的版本进行了 git checkout,基本上相当于一个 hello world 应用程序,虽然它曾经成功,但现在失败。此外,就在几天前,我在同一个项目下进行了另一个工作部署,但是当我使用更新的代码进行部署时,部署失败了,出现了这个错误,“导致我删除了整个项目并重新开始,并且现在我在这个新项目上遇到了同样的错误。我怎么知道不是我的代码首先导致了这个问题?由于我的代码,我的构建失败了,构建日志泄露了这一点。这里构建成功。构建中没有失败。

所以我去了这个网址https://compute.googleapis.com/compute/beta/projects/primalexchange/regions/us-east1/autoscales ,它说明了这一点:

{
  "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' 有信誉并且确实 export 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 中自动缩放器的配额,我发现这并没有超过任何东西: 在此处输入图像描述

唯一限制为 8 的就是 cpu,它说我是 2。

我不知道我在搞砸什么。。

是的,计费已启用。

我刚遇到这个,也许这会给我一些地方...... 在此处输入图像描述

什么是授权标头?为什么我第一次不需要那个……或者这次我搞砸了什么。

我改变了我的代码,所以你得到的只是一个 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)

现在我更仔细地看了一下,当我清楚地双重导入烧瓶时,这甚至是如何在本地运行的?

我会在删除它后尝试部署,但我怀疑这是我很快会回来发表关于这个问题的另一篇文章的问题。

是的,那没关系。仍然失败。

这张图片来自我开始的第三个项目。直到现在我才部署它..它失败并出现同样的错误:

在此处输入图像描述

这是 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,但仍然出错。

4

3 回答 3

8

我不确定是什么原因造成的,但我能够通过将缩放设置为手动或在我的 app.yaml 中将 max_num_instances 设置为低于 8 来解决同样的问题:

automatic_scaling:
  min_num_instances: 1
  max_num_instances: 7
于 2020-05-26T05:02:16.887 回答
0

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 虚拟机。您可以通过 2 种方式使用这些虚拟机:

  • 多个部署版本同时运行
  • 每个部署的版本有多个实例。

您应该能够通过 App Engine 信息中心和|或列出 Compute Engine 实例来确定这一点。

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

请将您的问题添加app.yaml到您的问题中,因为这将很有见地。

您可以通过获取访问令牌来向 Google Cloud 服务发出经过身份验证的请求,gcloud并将其包含在请求标头中,例如

curl \
--request GET \
--header "Authorization: Bearer $(gcloud auth print-access-token)" \
https://compute.googleapis.com/compute/beta/projects/primalexchange/regions/us-east1/autoscalers
于 2020-05-18T00:47:36.820 回答
0

我得到了谷歌技术支持。他们检查了我的配额。他们检查了我的代码。在我对部署进行了详细程度 = 调试后,他最终告诉我切换区域。

他说问题是在我所在的地区缺乏可用于 google flex 引擎的虚拟机,我应该切换区域或切换到标准的谷歌应用引擎环境。

是的。我必须第四次删除我的项目并重新开始。

哈哈

至少我知道这不是我正在做的事情。

更新:第四个项目也失败了。这次技术支持说一旦工程师看到它,他会回复我。

注意:在标准应用引擎环境下部署良好

更新1:

“你好,

此问题已报告给我们的 App Engine 产品团队,目前正在调查中。

目前,该决议还没有预计到达时间,但我们会在听到团队的任何进展后立即提供更新。

谢谢。”

和其他人发布了一个临时解决方案https://issuetracker.google.com/issues/157161938#comment2

我只是暂时将其置于应用引擎标准之下

于 2020-05-20T22:58:13.720 回答