Я запускаю приложение 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"