以编程方式启动 Google 应用引擎实例
Posted
技术标签:
【中文标题】以编程方式启动 Google 应用引擎实例【英文标题】:Starting Google app engine instances programmatically 【发布时间】:2021-03-02 08:16:37 【问题描述】:目前,我正在删除应用引擎活动实例,如下所述:deleting instances
代码:
import requests
from apiclient.discovery import build
from google.oauth2 import service_account
credentials = service_account.Credentials.from_service_account_file('credentials.json')
scoped_credentials = credentials.with_scopes(['https://www.googleapis.com/auth/appengine.admin',"https://www.googleapis.com/auth/cloud-platform"])
appengine = build(serviceName="appengine",version="v1",credentials=scoped_credentials)
VERSION_ID = "version_id"
PROJECT_ID = "project_id"
SERVICE_ID = "appengine_service_name"
APP_URL = "http://some_url.com"
active_instances_dict = appengine.apps().services().versions().instances().list(servicesId=SERVICE_ID,appsId=PROJECT_ID,versionsId=VERSION_ID).execute()
list_of_instances = active_instances_dict["instances"]
for instance in list_of_instances:
appengine.apps().services().versions().instances().delete(servicesId=SERVICE_ID,appsId=PROJECT_ID,
versionsId=VERSION_ID,instancesId=instance["id"]).execute()
此后,只有当有人访问网络应用时才会初始化新实例。
有没有一种方法可以以编程方式初始化实例,以确保已经有一个活动实例可供访问网络应用程序的人使用?
注意:我正在使用具有自动缩放功能的标准 Python 3.7 运行时
【问题讨论】:
如果您使用的是automatic_scaling
,为什么不直接指定min_instances?您可以将min_instances
设置为1
,以确保您的应用程序具有活动实例。请注意,此功能还需要您启用warmup requests。
【参考方案1】:
无需以编程方式进行 - 如果您使用 automatic_scaling
,您只需在 app.yaml 文件中指定 min_instances。
将min_instances
设置为1
将确保您的应用有一个活动实例准备好为流量提供服务。请注意,这也需要您启用warmup requests。
但请记住,无论指定的实例是否接收流量,您都将是charged。
【讨论】:
我目前在 app.yaml 配置中使用min_idle_instances
。但是,尚未启用预热请求。可能这就是实例经常下降到 0 的原因
我深入研究了对我的用例使用预热请求。但是,预热请求的问题在于,如果预计流量会增加,它需要运行一个实例来预热另一个实例。此外,不保证此请求。或者,使用 cron 作业作为唤醒实例并使其保持活动状态的工具对我有用。讨论这个link1,link2以上是关于以编程方式启动 Google 应用引擎实例的主要内容,如果未能解决你的问题,请参考以下文章