Как программно создать сервис Cloud Run из Node.js? - PullRequest
2 голосов
/ 30 марта 2020

Я пытаюсь создать новый сервис Cloud Run из функций firebase, используя клиентскую библиотеку googleapis. Следующий код:

  const auth = new google.auth.GoogleAuth({
    projectId,
    scopes: ['https://www.googleapis.com/auth/cloud-platform']
  });
  const authClient = await auth.getClient();

  const result = await google.run({
    version: 'v1',
    auth: authClient
  }).namespaces.services.create({
    parent: `namespaces/${projectId}`,
    requestBody: {
      metadata: {
        name: 'asdf'
      },
      spec: {
        template: {
          spec: {
            containers: [
              {
                image: 'gcr.io/graph-4d1ec/graph@sha256:80c764961657d7e2fe548b3886c4662c55c9b5ac881aad5a74cce2d1f97895b8',
                env: [
                  { name: 'URL', value: url }
                ]
              }
            ]
          }
        },
        traffic: [{ percent: 100, latestRevision: true }]
      }
    }
  }, {})

выдает ошибку:

Error: The request has errors
    at Gaxios._request (/srv/node_modules/gaxios/build/src/gaxios.js:85:23)
    at <anonymous>
    at process._tickDomainCallback (internal/process/next_tick.js:229:7)

Никаких дополнительных сведений о том, что не так с этим запросом, не предоставляется.

Что я делаю не так?

1 Ответ

0 голосов
/ 31 марта 2020

В частности, клиентская библиотека API, которую вы используете по умолчанию, указывает на run.googleapis.com.

Однако при использовании namespaces.services.create вам нужна региональная конечная точка API, например, us-central1-run.googleapis.com. Я не знаком с Node.js, но вам нужно изменить конечную точку API со значения по умолчанию на это значение.

Вам очень повезло, я только что опубликовал пост в блоге за 5 минут go, объясняющий как gcloud run deploy работает под прикрытием, с подробностями о вызовах API, как делаются обновления и т.д. c. https://ahmet.im/blog/gcloud-run-deploy/ В конце есть образец Go кода, который вы можете изучить. Обратите внимание, что «обновление» сервисов Cloud Run имеет несколько других тонкостей для понимания, поэтому обязательно ознакомьтесь с сообщением в блоге.

Кроме того, я предполагаю, что для устранения возникшей проблемы (опять же, я ничего не знаю) о Node.js) вы можете найти больше информации в объекте result, в котором хранится какое-либо значение ошибки или код ответа http или тело.

...