在 Google App Engine 上以编程方式更改后端实例 class
Change backend instance class programmatically on Google App Engine
我正在为 Google App Engine 项目使用后端实例。 (前端实例无法处理超过 60 秒的请求——我需要更长的时间。)
我选择了B4实例类型,因为有时负载很高。但是,在某些时间(比如凌晨 2 点到早上 7 点),负载非常低,以至于拥有 B4 实例有点过分了。
我想做一个 cron 作业,在特定时间将该实例的类型更改为 B2,然后在其他时间更改为 B4 以节省成本。
但是,查看 Modules API,我找不到这样做的方法。
那我该怎么做呢?
在得到 Ramiel 的回答后编辑
最后我使用Admin API如下:
# Construct the api client
cred = GoogleCredentials.get_application_default()
svc = discovery.build('appengine', 'v1', credentials=cred)
vapi = svc.apps().services().versions()
# get list of versions
o = vapi.list(appsId=app_identity.get_application_id(), servicesId=modules.get_current_module_name()).execute()
# PATCH all SERVING versions with the new instanceClass
for v in o['versions']:
if v['servingStatus'] == 'SERVING':
result = vapi.patch(
appsId=app_identity.get_application_id(),
servicesId=modules.get_current_module_name(),
versionsId=v['id'],
updateMask='instanceClass',
body={
'instanceClass': instanceClass
}
).execute()
这可能不是您要找的东西,但它是实现您想要的东西的一种可能方式。
在容器引擎或类似的系统上设置一个系统,它会自动从您的存储库中提取最新代码,自动调整实例类型并自动进行重新部署。您可以让它在不同的时间部署不同的实例类型。实例 class 的每个更改都需要重新部署,但理论上这些可以完全自动化,因此这是可能的。
想到了吗?这对您来说是可行的解决方案吗?
检查管理员-api 端点
https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions/patch
如果由于某种原因这不起作用,您还可以使用各种 instance/scaling 设置部署多个版本的应用程序并以编程方式切换它们
start_version 来自 Modules API
顺便说一句,如果你切换到手动缩放,你就没有 60 秒的限制
任务队列可以运行 10分钟,查看document
我正在为 Google App Engine 项目使用后端实例。 (前端实例无法处理超过 60 秒的请求——我需要更长的时间。)
我选择了B4实例类型,因为有时负载很高。但是,在某些时间(比如凌晨 2 点到早上 7 点),负载非常低,以至于拥有 B4 实例有点过分了。
我想做一个 cron 作业,在特定时间将该实例的类型更改为 B2,然后在其他时间更改为 B4 以节省成本。
但是,查看 Modules API,我找不到这样做的方法。
那我该怎么做呢?
在得到 Ramiel 的回答后编辑
最后我使用Admin API如下:
# Construct the api client
cred = GoogleCredentials.get_application_default()
svc = discovery.build('appengine', 'v1', credentials=cred)
vapi = svc.apps().services().versions()
# get list of versions
o = vapi.list(appsId=app_identity.get_application_id(), servicesId=modules.get_current_module_name()).execute()
# PATCH all SERVING versions with the new instanceClass
for v in o['versions']:
if v['servingStatus'] == 'SERVING':
result = vapi.patch(
appsId=app_identity.get_application_id(),
servicesId=modules.get_current_module_name(),
versionsId=v['id'],
updateMask='instanceClass',
body={
'instanceClass': instanceClass
}
).execute()
这可能不是您要找的东西,但它是实现您想要的东西的一种可能方式。
在容器引擎或类似的系统上设置一个系统,它会自动从您的存储库中提取最新代码,自动调整实例类型并自动进行重新部署。您可以让它在不同的时间部署不同的实例类型。实例 class 的每个更改都需要重新部署,但理论上这些可以完全自动化,因此这是可能的。
想到了吗?这对您来说是可行的解决方案吗?
检查管理员-api 端点
https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions/patch
如果由于某种原因这不起作用,您还可以使用各种 instance/scaling 设置部署多个版本的应用程序并以编程方式切换它们 start_version 来自 Modules API
顺便说一句,如果你切换到手动缩放,你就没有 60 秒的限制
任务队列可以运行 10分钟,查看document