AppEngine не может подключиться к VP C при повторном развертывании - PullRequest
0 голосов
/ 08 января 2020

Я запускаю приложение Python в стандартной среде AppEngine, которое использует Redis (экземпляр Memorystore , подключенный через VP C).

Когда я развертываю новую версию (имеется в виду значение параметра version для команды gcloud beta app deploy) приложения, соединение VP C работает нормально. Однако при повторном развертывании существующей версии соединение VP C перестает работать (Тайм-аут подключения Redis: Error 110 connecting to xxx.xxx.xxx.xxx:6379. Connection timed out.)

Приложение имеет некоторые исторические причины, в которых оно опирается на указанное c имя версии развернутой версии, плюс используется Canary Deployment (небольшой процент трафика c переходит в новую версию) через встроенную функцию AppEngine для разделения трафика c, который также имеет жестко закодированное имя version, поэтому повторное развертывание в Canary невозможно ,

Очевидным ответом является исправление исторических причин и развертывания (что, к сожалению, имеет низкий приоритет), поэтому есть ли способ исправить / обойти эту проблему в то же время?

app.yaml:

runtime: python38

instance_class: F4
automatic_scaling:
  max_instances: 5
  min_instances: 1

inbound_services:
  - warmup

service:
  py3

handlers:
  - url: /.*
    script: auto
    secure: always

includes:
  - env_vars.yaml

vpc_access_connector:
  name: projects/xxx/locations/europe-west2/connectors/yyy

журнал развертывания:

$ gcloud beta app deploy ./app.yaml --no-promote --version=v3-0-2 --verbosity=debug
DEBUG: Running [gcloud.beta.app.deploy] with arguments: [--no-promote: "false", --verbosity: "debug", --version: "v3-0-2", DEPLOYABLES:1: "[u'./app.yaml']"]
INFO: Refreshing access_token
DEBUG: API endpoint: [https://appengine.googleapis.com/], API version: [v1beta]
Services to deploy:

descriptor:      [/Users/yed/dev/xxx/appname/beapplication/app.yaml]
source:          [/Users/yed/dev/xxx/appname/beapplication]
target project:  [appname]
target service:  [py3]
target version:  [v3-0-2]
target url:      [https://v3-0-2-dot-py3-dot-appname.appspot.com]


     (add --promote if you also want to make this service available from
     [https://py3-dot-appname.appspot.com])

Do you want to continue (Y/n)?  y

DEBUG: No bucket specified, retrieving default bucket.
DEBUG: Using bucket [gs://staging.appname.appspot.com].
Beginning deployment of service [py3]...
INFO: Using ignore file at [/Users/yed/dev/xxx/appname/beapplication/.gcloudignore].
DEBUG: Skipping file [pyproject.toml]
...
INFO: Incremental upload skipped 98.62% of data
...
File upload done.
INFO: Manifest: [{u'application/_config/dfp.py': {...list of files...}}]
DEBUG: Converted YAML to JSON: "{
  "automaticScaling": {
    "standardSchedulerSettings": {
      "maxInstances": 5, 
      "minInstances": 1
    }
  }, 
  "entrypoint": {
    "shell": ""
  }, 
  "envVariables": {
    "REDIS_HOST": "xxx", 
  }, 
  "handlers": [
    {
      "script": {
        "scriptPath": "auto"
      }, 
      "securityLevel": "SECURE_ALWAYS", 
      "urlRegex": "/.*"
    }
  ], 
  "inboundServices": [
    "INBOUND_SERVICE_WARMUP"
  ], 
  "instanceClass": "F4", 
  "runtime": "python38", 
  "vpcAccessConnector": {
    "name": "projects/appname/locations/europe-west2/connectors/xxx"
  }
}"
DEBUG: Operation [apps/appname/operations/xxx] not complete. Waiting to retry.       
Updating service [py3]...⠏DEBUG: Operation [apps/appname/operations/xxx] complete. Result: {                    
    "response": {
        "runtimeChannel": "default", 
        "versionUrl": "https://v3-0-2-dot-py3-dot-appname.appspot.com", 
        "name": "apps/appname/services/py3/versions/v3-0-2", 
        "servingStatus": "SERVING", 
        "createTime": "2020-01-09T02:08:35Z", 
        "@type": "type.googleapis.com/google.appengine.v1beta.Version", 
        "inboundServices": [
            "INBOUND_SERVICE_WARMUP"
        ], 
        "threadsafe": true, 
        "instanceClass": "F4", 
        "env": "standard", 
        "automaticScaling": {
            "standardSchedulerSettings": {
                "minInstances": 1, 
                "maxInstances": 5
            }
        }, 
        "runtime": "python38", 
        "id": "v3-0-2", 
        "network": {}
    }, 
    "done": true, 
    "name": "apps/appname/operations/xxx", 
    "metadata": {
        "target": "apps/appname/services/py3/versions/v3-0-2", 
        "method": "google.appengine.v1beta.Versions.CreateVersion", 
        "user": "xxx", 
        "insertTime": "2020-01-09T02:07:30.085Z", 
        "endTime": "2020-01-09T02:08:37.860Z", 
        "@type": "type.googleapis.com/google.appengine.v1beta.OperationMetadataV1Beta"
    }
}
Updating service [py3]...done.                                                                                                                                
INFO: Not stopping previous version because new version was not promoted.
Deployed service [py3] to [https://v3-0-2-dot-py3-dot-appname.appspot.com]

You can stream logs from the command line by running:
  $ gcloud app logs tail -s py3

To view your application in the web browser run:
  $ gcloud app browse -s py3
INFO: Display format: "none"

1 Ответ

0 голосов
/ 06 февраля 2020

Я отвечу на это сам, просто чтобы закрыть этот вопрос:

После некоторого интенсивного поиска в Google я наткнулся на ту же проблему в Ошибка сервера , и ответ там, кажется, помогает:

В результате наше решение добавило разрешения пользователя вычислительной сети в профиль, выполняющий развертывание. К сожалению, эта ошибка с разрешениями не выписана для нас, а скорее для Google. Похоже, это решило все проблемы, с которыми мы столкнулись в стандартной среде. Также обязательно используйте gcloud beta app deploy

...