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=nameattributeの設定がわかりづらかったです。キーネームペアで=で結び、カンマで複数設定ができました
ログ確認
gcloud functions logs read --limit 50
ログにDataとAttributeの値が出たら終わりです