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データが見えると思います