Google Cloud FunctionsにGo言語がきた
上記の公式リリースの通り、Go言語がまだbeta対応であるが、Google Cloud Functionsにやってきた
Cloud functionsはサーバーレスで簡単な関数を実行してくれる仕組みで大変便利です
公式サンプル@githubには、pubsubとGoogle Cloud Functionsを組み合わせた例は無いです
公式チュートリアルには、組み合わせはあるがペイロードを受信する方法が無いです
Google PubSubにTopicを作成
gcloudからコマンドでも実行できるが、今回はAPIを有効化するために、コントロールパネルから実行
有効化したらトピック名を指定して作成
projects/{プロジェクト名}/topics/{トピック名}というトピックが出来上がるので、ここで放置
FunctionsのコードをGo言語で用意する
今回のコードは以下のようなコードpackage hello import ( "encoding/json" "context" "log" ) type PubSubMessage struct { Data []byte `json:"data"` Attributes map[string]string `json:"attributes"` } type Info struct { Test1 string `json:"test1"` Test2 string `json:"test2"` } func HelloPubSub(ctx context.Context, m PubSubMessage) error { var i Info err := json.Unmarshal(m.Data, &i) if err != nil { log.Printf("Error:%T message: %v", err, err) return nil } log.Printf("Data: %s:%s", i.Test1, i.Test2) log.Printf("Attributes %v", m.Attributes) return nil }
gcloudコマンドでFunctionをアップロード
今回のトピック名はsample_pubsubとしています
gcloud functions deploy HelloPubSub --runtime go111 --trigger-topic sample_pubsub
実行とログ確認
実行コマンド
gcloud pubsub topics publish sample_pubsub --message '{"test1":"Test1" ,"test2":"Test2"}' --attribute name=wrench,name1=name
attributeの設定がわかりづらかったです。キーネームペアで=で結び、カンマで複数設定ができました
ログ確認
gcloud functions logs read --limit 50
ログにDataとAttributeの値が出たら終わりです