Выполнение задачи GCloud AppEngine возвращает 403

Используя push-очереди и гибкую среду в Google AppEngine, я получаю ошибку 403 (Forbidden) при выполнении задачи (для выполнения в службе backend), созданной с помощью службы default. Задача успешно помещается в очередь, подтверждается локально, но выполнение задачи (задач) завершается с ошибкой с журналом:

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, выполнение работает нормально. Я использую dev_appserver.py с Go 1.11 со следующими .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

Любые идеи, почему я получаю статусы 403 (Запрещено) при выполнении задачи, если задача не создается с помощью задания cron? Документация и существующие ресурсы по этому вопросу мало помогают :/

Что вы имеете в виду под «То же самое происходит и локально, и на производстве». вы получаете 403, если вы выполняете это на своем локальном компьютере, когда он не развернут в механизме приложения?

Soni Sol 25.12.2020 18:33

Точно, используя dev_appserver.py, задача помещается в очередь, и при выполнении я получаю ответ 403.

urgas9 26.12.2020 09:41
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
353
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Удалось заставить работать. Если кто-то борется с получением ответов 403 при выполнении задачи для очередей push в Google AppEngine, убедитесь, что вы установили правильный целевой сервис. В моем примере выше мне не хватало target: backend в queue.yaml:

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

Другие вопросы по теме