Go言語でCloud FunctionsからFirestoreを呼び出すにはどうすればいい?
結論を書くと、チュートリアルに書かれている通りです。
ただ、Initialize Cloud Firestoreにあるサンプルコードのclient, err := firestore.NewClient(ctx, projectID)にあるContextに何を入れれば良いかが書かれていない
Cloud Firestoreを有効にする
GCPのコントロールパネル項目からCloud Firestoreを選択し、有効かします。
※Cloud Datastoreを一度でも有効にしてしまうと、Cloud Firestoreは有効に出来ません
Cloud Functionsを記述する
ライブラリを取得する
手元の環境でいつも通りgo getを行います
go get "cloud.google.com/go"
go modを使用する
手元の開発フォルダでgo mod initと行いgo.modを生成する事により、functions環境で上記ライブラリを使えるようにする
Cloud Functionsのコードを書く
package hello import ( "net/http" "cloud.google.com/go/firestore" "log" ) func Hello(w http.ResponseWriter, r *http.Request) { projectID := "GCP-PROJECT-ID" // Get a Firestore client. client, err := firestore.NewClient(r.Context(), projectID) if err != nil { log.Fatalf("Failed to create client: %v", err) } // Close client when done. defer client.Close() _, _, err = client.Collection("users").Add(r.Context(), map[string]interface{}{ "first": "Ada", "last": "Lovelace", "born": 1915, }) if err != nil { log.Fatalf("Failed adding alovelace: %v", err) } msg := "Hello World" w.Write([]byte((msg))) }
go.modの更新としてgo buildを行います
サーバーの方にアップロードします
gcloud functions deploy helloWorld --entry-point Hello --runtime go111 --trigger-http
実行してみる
deployしたURLにアクセスし、その結果をFirestoreのコントロールパネルで確認し、ユーザーが追加されていれば成功です
Firebaseとの連携
おまけですが、GCPとFirebaseを連携するには、Firebaseのコントロールパネルを開き、プロジェクトを追加する際に上記GCPのプロジェクトIDを選択してあげます
出来上がったFirebase ProjectのDatabaseをみると、上記でいれたUserデータが見えると思います