如何在App Engine中创建一个针对服务和版本的cron作业?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在App Engine中创建一个针对服务和版本的cron作业?相关的知识,希望对你有一定的参考价值。
我希望有一个cron作业,在某个服务和版本(App Engine)上调用我的端点。
我用以下配置创建了一个cron作业:
<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
<cron>
<url>/CleanupRealtimeDatabase</url>
<target>dev-dot-admin</target>
<description>Cleanup Realtime Database (Dev)</description>
<schedule>every 24 hours</schedule>
</cron>
</cronentries>
这将打电话给http://dev-dot-admin.myapp.appspot.com/CleanupRealtimeDatabase
这不起作用,因为它无法组合-dot-和。
所以唯一的解决方案是使用-dot-两次或使用。两次。我无法控制网址中的第二个点(它不是配置的一部分)。但是当我将点更改为。在上面的配置中,我收到以下错误:
配置错误:XML错误验证/ CleanupRealtimeDatabase dev.admin清理实时数据库(Dev)每24小时针对/ Users / user / sdk / google-cloud-sdk / platform / google_appengine / google / appengine / tools / java / docs / cron。 xsd引起:cvc-pattern-valid:对于类型为'target-Type'的模式'[az \ d - ] {1,100}',值'dev.admin'不是facet-valid。
不知道怎么解决这个问题?感觉就像App Engine工具中的一个错误。
这将不起作用,因为将接收目标cron请求的(单个)服务版本不在cron配置控件下。从Cron job definitions(强调我的)行:
目标字符串将添加到您应用的主机名之前。它通常是服务的名称。 cron作业将路由到为流量配置的命名服务的版本。
警告:如果在启用traffic splitting的情况下运行cron作业,请小心。来自cron作业的请求始终从相同的IP地址发送,因此如果您指定了IP地址拆分,则逻辑将每次将请求路由到相同的版本。如果您已指定cookie拆分,则根本不会拆分请求,因为请求中没有cookie。
如果找不到为
target
指定的服务名称,则Cron请求将路由到default
服务或配置为接收流量的应用程序版本。有关路由的更多信息,请参阅How Requests are Routed。
但是,由于cron服务只不过是根据计划发送的GET
请求,您可以拥有一个通用的cron配置,并且在其处理程序中,向您希望的任何URL发出更具体的HTTP(S)请求。
您可以使用apps.services.versions
API来动态构建每个服务版本对URL的正确列表。
以上是关于如何在App Engine中创建一个针对服务和版本的cron作业?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Google App Engine expando 类中创建动态字段?
如何使用 Stackdriver Trace 在 App Engine Standard 中创建自定义 Span?
连接 Google App Engine 和 Google Compute Engine