Почему я вижу `503 Backend Error` при попытке получить учетную запись службы облачного хранилища? - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь развернуть облачную функцию, запускаемую хранилищем, и хотя этот процесс обычно отлично работает во многих проектах в тех же организациях и с аналогичными настройками, со вчерашнего дня у меня возникли проблемы с этим.

Я могу наблюдать следующую картину в во всех проектах GCP в нескольких организациях :

  • Категория A Если хотя бы одна функция, вызванная хранением, была развернута в проекте до вчерашнего дня, Я могу просто снова развернуть ту же самую функцию или новую функцию для этот проект, без проблем.

    • Эти проекты имеют учетную запись службы облачного хранилища , как показано в консоли GCP в разделе Хранилище> Настройки , т.е. $API_PROJECT_ID@gs-project-accounts.iam.gserviceaccount.com
    • Я могу получить эту учетную запись из API облачного хранилища Projects.serviceAccount: получить
  • Категория B Если до вчерашнего дня в проекте не были развернуты функции, запускаемые из хранилища, Я не могу развернуть функцию, запускаемую из хранилища , независимо от того, развертываю ли я функции через Cloud Build или если я создаю простую функцию корзины через консоль GCP, даже если я просто использую пример кода, предложенный пользовательским интерфейсом, как есть, и ссылку на корзину по умолчанию в проекте.

    • Эти проекты не имеют учетной записи службы облачного хранилища , как показано в консоли GCP в разделе Хранилище> Настройки
    • Также я не могу получить эту учетную запись из Cloud Storage API Projects.serviceAccount: получить , я увижу 503 Backend Error

Я не могу найти никаких других существенных различий в настройках между двумя категориями, в частности IAM и ACL, включенными API, и я убедился, что функция всегда создается в том же проекте, что и корзина, которая является ресурс триггера.

Ошибка при использовании gcloud functions deploy

$ - убранные имена

gcloud functions deploy $FUNCTION_NAME --region=us-central1 --source=https://source.developers.google.com/projects/$PROJECT_ID/repos/$REPO_NAME/moveable-aliases/$BRANCH_NAME/paths/$FUNCTION_NAME/src --trigger-resource=$API_PROJECT_ID-input --trigger-event=google.storage.object.finalize --timeout=540 --runtime=python37 --entry-point=main --memory=128MB --project=$API_PROJECT_ID --retry

покажет эту ошибку для проекта, попадающего в категорию B.

ERROR: (gcloud.functions.deploy) OperationError: code=13, message=Failed to configure trigger GCS Bucket: $API_PROJECT_ID-input

То же самое в проектах категории А., как и ожидалось, работает нормально.

Ошибка при использовании Google Cloud Console

На странице Создать функцию ,

  1. Я выбираю Cloud Storage как Триггер
  2. Тип события : `Завершить / Создать *
  3. Как Bucket Я выбираю контейнер по умолчанию, например, $API_PROJECT_ID.appspot.com
  4. Все остальное по умолчанию, включая предложенный пример кода
  5. SAVE

Развертывание не удастся для всех проектов категории B, но будет успешным для проектов категории A.

Сообщение о состоянии развертывания в пользовательском интерфейсе показывает следующую ошибку:

Deployment failure:
Failed to configure trigger GCS Bucket: $API_PROJECT_ID

Ошибка: учетная запись службы облачного хранилища не создана

Затем я начал сравнивать настройки и заметил, что в консоли GCP в разделе «Облачное хранилище»> «Настройки» только проект категории A имеет учетную запись службы облачного хранилища. Проекты категории B не имеют учетной записи службы облачного хранилища. Поэтому я попытался получить учетную запись из API:

https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get

Как вы можете догадаться, я получу 200 OK с соответствующим именем учетной записи службы облачного хранилища только для проектов в категории A , но для всех проектов в категории B I увидит эту ошибку с кодом 503:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "backendError",
    "message": "Backend Error"
   }
  ],
  "code": 503,
  "message": "Backend Error"
 }
}

Со вчерашнего дня я несколько раз пробовал разные проекты, ничего не изменилось.

Дополнительная информация и попытки решить проблему

Я следовал инструкциям на: https://cloud.google.com/storage/docs/getting-service-account с помощью API Explorer на этой странице: https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get

Я не уверен на 100%, связаны ли ошибки 503, отсутствие учетной записи службы и ошибки развертывания (код 13). Но IIRC, триггер хранилища GCF фактически основан на Pub / Sub, и для этого потребуется учетная запись службы, как указано в справочном тексте в консоли GCP в разделе Хранение> Настройки :

У каждого проекта есть связанная учетная запись службы облачного хранилища. Это используется для выполнения определенных фоновых действий: получение уведомлений PubSub и шифрование / дешифрование зашифрованных объектов KMS.

Я также прочитал совет относительно этой учетной записи службы здесь: https://cloud.google.com/storage/docs/projects#service-accounts

Я также пробовал следующие обходные пути:

  • сравнил IAM между проектами категорий A и B, используя gsutil iam и консоль GCP
  • сравнил ACL между проектами категорий A и B, используя gsutil acl
  • развертывается вручную через API других тестовых корзин с отличающимися предопределенными Acl
  • удалил корзину $API_PROJECT_ID-input и развернул снова без предопределенного Acl
  • использовали стандартные группы проектов, которые были созданы автоматически, например, $API_PROJECT_ID.appspot.com
  • обновлены конфигурации развертывания Cloud Deployment Manager для проектов в категории B
  • пытался отключить и включить несколько API-интерфейсов, но не сделал этого для большинства API-интерфейсов, чтобы избежать возникновения других проблем
  • включил API Cloud Build для проектов в категории B (что интересно, только после этого унаследованные разрешения IAM другой учетной записи службы Cloud Build были добавлены в IAM корзины $API_PROJECT_ID-input)
  • добавлена ​​Storage Object Creator роль к учетной записи службы по умолчанию ($API_PROJECT_ID@appspot.gserviceaccount.com)

1 Ответ

0 голосов
/ 18 января 2019

Я открыл дело, и позже служба поддержки GCP уведомила меня, что это общая проблема, затрагивающая менее 1% проектов.

Мы получили сообщение о проблеме с Google Cloud Pub / Sub на пятницу, 2019-01-11 17:48 США / Тихий океан. Более подробная информация будет предоставлена ​​к пятнице, 2019-01-11, 18:30, США / Тихий океан.

Для справочной информации: для запуска облачных функций используется Cloud Pub / Sub.

...