初 Go & CloudFunctions にあたって、せっかくなので作業記録
前提
環境
- macOS Catalina
インストール済み
- Homebrew
Docker で環境構築
Docker で環境を用意する場合はこの手順(Go + Google Cloud SDK の環境を Docker で準備する)で。
VSCode に関連する Go のインストール部分は飛ばせないかもしれないが、 Google Cloud SDK まわりの環境は コンテナ内に閉じ込められる。
Go の使用準備
VSCode の設定を追加
ここでは workspace の設定に追加
(Go のインストールと vscode の環境構築ここで vscode 用のツールをインストールする際に、この設定が必要かもしれない。一応。)
go.gopath
の値は go env
で確認できる。
$ go env
...
GOPATH={PATH}
{
"files.autoSave": "afterDelay",
"go.gocodeAutoBuild": true,
"go.gopath": "{PATH}"
}
Go のインストールと vscode の環境構築
https://qiita.com/oruharo/items/545378eae5c707f717ed
この記事の手順で、VSCode で Go を使う環境を整える。
Firebase Tools のインストール
go を使用する場合は必要ないかもしれない
$ npm i -g firebase-tools
Google Cloud SDK のインストール
Homebrew を使用してインストールする。
$ brew cask install google-cloud-sdk
下記のように表示できればインストールに成功している。
$ gcloud -v
Google Cloud SDK 291.0.0
bq 2.0.57
core 2020.05.01
gsutil 4.50
参考: https://qiita.com/G-awa/items/e6904b040caa0096fba0
Go 用 Cloud クライアント ライブラリのインストール
storage 系のサービスを使用しないのであれば必要ないかもしれない。
$ go get cloud.google.com/go/storage
参考: https://cloud.google.com/go/docs/setup#install_the_cloud_client_libraries_for_go
サンプルファイルの作成
# hello_world.go
// Package helloworld provides a set of Cloud Functions samples.
package helloworld
import (
"encoding/json"
"fmt"
"html"
"net/http"
)
// HelloHTTP is an HTTP Cloud Function with a request parameter.
func HelloHTTP(w http.ResponseWriter, r *http.Request) {
var d struct {
Name string `json:"name"`
}
if err := json.NewDecoder(r.Body).Decode(&d); err != nil {
fmt.Fprint(w, "Hello, World!")
return
}
if d.Name == "" {
fmt.Fprint(w, "Hello, World!")
return
}
fmt.Fprintf(w, "Hello, %s!", html.EscapeString(d.Name))
}
デプロイ
サンプルファイルの作成 と同じディレクトリで実行することでデプロイできる。はず。
$ gcloud functions deploy HelloHTTP --runtime go113 --trigger-http --allow-unauthenticated --region asia-northeast1
参考: https://cloud.google.com/functions/docs/first-go#deploying_the_function
API の呼び出し
$ gcloud functions describe HelloHTTP
...
httpsTrigger:
url: https://{Region}-{ProjectID}.cloudfunctions.net/HelloHTTP
httpsTrigger
の値が呼び出し先の url になっているので、ここにアクセスすると function が呼びだされ、response が返ってくる。
この url は、Firebase のダッシュボードからも確認可能。
最後に
初 Go & CloudFunctions だったので、ところどころ変なことを書いているかもしれないです。
軽く触ってみた感じ、AWS Lambda よりお手軽な感じがしました。
Cloud Endpoints まわりとの関係性はまだよくわからない…
次は FireStore との連携に手を出す予定。
追加情報があれば更新します。
参考
https://qiita.com/oruharo/items/545378eae5c707f717ed
https://qiita.com/G-awa/items/e6904b040caa0096fba0
https://cloud.google.com/go/docs/setup#install_the_cloud_client_libraries_for_go
https://cloud.google.com/functions/docs/first-go#deploying_the_function