如何在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 中创建表单自动完成

如何在 Google App Engine expando 类中创建动态字段?

如何使用 Stackdriver Trace 在 App Engine Standard 中创建自定义 Span?

连接 Google App Engine 和 Google Compute Engine

尝试在 Google App Engine 项目中创建备份时出现 404

如何知道 Google App Engine(python)中实体的现有子项?