Cloud Run의 Go 언어에서 GCP Firestore에 액세스

7367 단어 5CloudRunFirestore

서비스 계정 만들기



자격 증명 만들기








역할은 Datastore를 사용합니다.








키 만들기


  • 우선 JSON 형식으로 작성했다.
  • 자동으로 다운로드된다.







  • 출처



    main.go


  • import는 Firesotre 용으로 추가 한 것만 기재

  • main.go(꽤 발췌)
    import (
      "context"
      "cloud.google.com/go/firestore"
      "google.golang.org/api/iterator"
    )
    
    func helo(w http.ResponseWriter, r *http.Request) {
      ctx := context.Background()
      client, err := firestore.NewClient(ctx, "GCPのプロジェクトID")
      if err != nil {
        log.Fatalf("Failed to create client: %v", err)
      }
      defer client.Close()
    
      iter := client.Collection("users").Documents(ctx)
      for {
        doc, err := iter.Next()
        if err == iterator.Done {
          break
        }
        if err != nil {
          log.Fatalf("Failed to iterate: %v", err)
        }
        fmt.Fprintf(w, "%v\n", doc.Data())
      }
    }
    

    Dockerfile


  • ca-certificatescrt가 없으면 움직이지 않았습니다.

  • Dockerfile
    ARG APP_DIR="/appdir"
    # builder
    FROM golang:1.15
    ARG APP_DIR
    RUN go env -w GO111MODULE=on \
     && go env -w CGO_ENABLED=0
    WORKDIR ${APP_DIR}
    COPY . .
    RUN go build -v -o app
    
    # product
    FROM scratch
    ARG APP_DIR
    ARG PORT="80"
    ENV GOOGLE_APPLICATION_CREDENTIALS="${APP_DIR}/key.json" \
        PORT="${PORT}"
    WORKDIR ${APP_DIR}
    COPY --from=0 ${APP_DIR}/app ./app
    COPY --from=0 /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt 
    COPY key.json ./key.json
    EXPOSE ${PORT}
    ENTRYPOINT ["./app"]
    

    메모



    움직일 때까지 나온 에러들을 단지 나열한 것만


    Failed to iterate: rpc error: code = Unavailable desc = connection error: desc = "transport: authentication handshake failed: x509: certificate signed by unknown authority"The request failed because either the HTTP response was malformed or connection to the instance had an error.Failed to iterate: rpc error: code = Unauthenticated desc = transport: oauth2: cannot fetch token: 400 Bad RequestResponse: {"error":"invalid_grant","error_description":"Invalid grant: account not found"}Failed to iterate: rpc error: code = PermissionDenied desc = Missing or insufficient permissions.

    기타



    cloudbuild.yaml 라든지, 기재 이외는 전인 채. 이전 기사

    이상한


  • 컨테이너에 키를 복사하거나 필요하지 않습니다. 기본 서비스 계정에 firestore의 읽기 권한이 있으면 좋다고 생각하지만, 원래 "편집자"라는 강력한 권한인데. . .
  • 여러 다른 프로젝트에서 재구축하고 있으면 역시 움직였다.
  • yaml 의 deploy 에, - '--service-account' 로 작성한 서비스 어카운트를 지정하면(자), 키를 만들거나 카피할 필요는 없었다.
  • 나중에, 확실한 프로젝트로 이제(벌써) 어떻게 해 보겠습니다만, 기본적으로는 키를 컨테이너에 카피라고 하는 것은, 필요없다.
  • 좋은 웹페이지 즐겨찾기