При развертывании облачной функции GCP с клиентом go я получаю: «Ошибка 400: Сбой проверки предварительного условия. Сбой предварительного условия» - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь развернуть облачную функцию Google с помощью клиентского пакета go от Google.

(https://pkg.go.dev/google.golang.org/api/cloudfunctions/v1?tab=doc#pkg -просмотр )

Я разбил его на фрагмент, который мне кажется наиболее актуальным:

import (
    "context"
    log "github.com/sirupsen/logrus"
    functions "google.golang.org/api/cloudfunctions/v1"
)

func main() {
    ctx := context.Background()
    CloudFunctionService, err := functions.NewService(ctx)
    if err != nil {
        log.Printf("Error at functions.NewService(ctx): \"%v\"\n", err)
    }
    FunctionSpec := functions.CloudFunction{
            EntryPoint:        "DeployThisFunctionEntryPoint",
            EventTrigger: &functions.EventTrigger{
                EventType: "google.pubsub.topic.publish",
                Resource:  "projects/mytestproject/topics/cloud-builds",
            },
            Name:                "DeployThisFunction",
            Runtime:             "go111",
            SourceRepository:    &functions.SourceRepository{Url: "https://source.developers.google.com/projects/mytestproject/repos/deploythisfunction/moveable-aliases/master/paths//"},
    }
    CloudFunctionDeploymentService := functions.NewProjectsLocationsFunctionsService(CloudFunctionService)
    createCall := CloudFunctionDeploymentService.Create("projects/mytestproject/locations/us-central1", &FunctionSpec)
    resp, err := createCall.Context(ctx).Do()
    if err != nil {
        log.Printf("Error at createCall.Context(ctx).Do(): \"%v\"\n", err)
    }
    log.Printf("response createCall.Context(ctx).Do(): \"%v\"\n", resp)
}

Однако, не важно как я это отформатирую или попробую. Я всегда получаю следующее сообщение:

googleapi: Error 400: Precondition check failed., failedPrecondition 

Через google api explorer я запустил запрос с их аутентификацией и схемой json и получил ту же ошибку.

https://cloud.google.com/functions/docs/reference/rest/v1/projects.locations.functions/create

Ответ:

{
  "error": {
    "code": 400,
    "message": "Precondition check failed.",
    "status": "FAILED_PRECONDITION"
  }
}

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

Если кто-то сталкивался с этой проблемой, я был бы признателен за помощь.

1 Ответ

1 голос
/ 16 марта 2020

eventType должен соответствовать шаблону: providers/*/eventTypes/*.*..

Например: providers/cloud.pubsub/eventTypes/topic.publish

Кроме того, URL-адрес SourceRepository должен быть https://source.developers.google.com/projects/*/repos/*/revisions/*/paths/, и у вас есть https://source.developers.google.com/projects/mytestproject/repos/deploythisfunction/moveable-aliases/master/paths//

В сообщении об ошибке указано, что проблема связана с тем, как вы настроить FunctionSpec, я подозреваю EventTrigger или SourceRepository поля.

Редактировать

code: 400 - неверный запрос, ошибка клиента, в данном случае проблема форматирования, и первая что нужно проверить - это каждый файл облачной функции

...