GCloud AppEngine任务执行返回403



在Google AppEngine上使用推送队列和灵活的环境,当使用default服务创建的任务(将在backend服务上执行(执行时,我得到403(禁止(错误。任务被成功推送到队列,在本地确认,但任务的执行失败,日志为:

INFO     2020-12-24 13:42:39,897 module.py:865] default: "POST /tasks/test-handler HTTP/1.1" 403 31
WARNING  2020-12-24 13:42:39,897 taskqueue_stub.py:2158] Task task2 failed to execute. The task has no remaining retries. Failing permanently after 1 retries and 0 seconds

本地和生产中都会发生同样的情况。但是,如果任务是用cron作业创建的,那么执行工作就很好。我在Go 1.11中使用dev_appserver.py,具有以下.yaml定义:

# backend service
service: backend
runtime: go111
instance_class: F2
inbound_services:
- warmup
- default
handlers:
- url: /tasks/.*
login: admin
redirect_http_response_code: 301
# default app service
service: default
runtime: go111
instance_class: F2
inbound_services:
- warmup
handlers:
- url: /api/.*
script: auto
secure: always
redirect_http_response_code: 301

最初的API请求到达/api端点,然后该端点使用:成功推送队列消息

t := taskqueue.NewPOSTTask(taskURL, url.Values{
"testParam": {strconv.Itoa(testParam)},
})
if _, err := taskqueue.Add(ctx, t, "test-queue"); err != nil {
return ErrPublishingTaskToQueue
}

我的queue.yaml定义(实际上我还有更多(:

total_storage_limit: 120M
queue:
- name: test-queue
rate: 1/s
bucket_size: 100
max_concurrent_requests: 10
retry_parameters:
task_retry_limit: 1

如果任务不是通过cron作业创建的,为什么我会在任务执行中获得403(禁止(状态?关于这个问题的文件和现有资源帮助不大:/

设法使其工作。如果有人在谷歌应用引擎上的推送队列的任务执行中难以获得403个响应,请确保您设置了正确的目标服务。在上面的例子中,我在queue.yaml:中缺少target: backend

total_storage_limit: 120M
queue:
- name: test-queue
rate: 1/s
bucket_size: 100
max_concurrent_requests: 10
target: backend
retry_parameters:
task_retry_limit: 1

问题是,这些任务是用default服务创建的,默认情况下,这意味着它们访问default服务,但应该访问backend服务。不幸的是,default服务也部署了所需的端点,所以我得到了403而不是404。

有关target字段的更多详细信息:https://cloud.google.com/appengine/docs/standard/python/config/queueref#target

最新更新