以编程方式启动 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 应用引擎实例的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式获取 Google Adwords 开发者令牌

如何以编程方式扩展应用引擎?

如何以编程方式启动 Google Assistant?

在没有 GIDSignInButton 的情况下但以编程方式启动 Google 登录

以编程方式授予本地用户权限以使用 .Net 启动服务

以编程方式创建和呈现模态视图控制器