Pub/Sub 用の Functions のコードを Github で管理する


手順

1. Github のリポジトリに Functions のコードを準備する

サンプルコードは Pub/Sub で公開されたメッセージと属性を出力するだけの単純な関数。

example/function.go
package example

import (
    "context"
    "encoding/json"
    "log"

    "cloud.google.com/go/pubsub"
)

// User JSONデコード用の構造体.
type User struct {
    Name string `json:"name"`
}

// HelloPubSub Pub/Subからトリガーされる関数.
func HelloPubSub(ctx context.Context, m *pubsub.Message) error {

    // メッセージの出力
    var user User
    if err := json.Unmarshal(m.Data, &user); err != nil {
        log.Fatal(err)
    }
    log.Println("Hello,", user.Name)

    // 属性の出力
    if len(m.Attributes) > 0 {
        for k, v := range m.Attributes {
            log.Println("key:", k)
            log.Println("value:", v)
        }
    }
    return nil
}

同じ階層に go.mod も必要。

example/go.mod
module github.com/mt-village/cloud-func-exampl

go 1.11

require cloud.google.com/go/pubsub v1.3.0

サンプルはこちら > mt-village/cloud-func-example

2. GCP のリポジトリに同期する

Cloud Source Repositories の「リポジトリの追加」から作成した Github リポジトリを接続。
接続されたリポジトリは github_mt-village_cloud-func-example のような名前になる。
これで Github 側に入った変更が GCP 側のリポジトリにも同期されるようになる。

3. Pub/Sub のトピックを作成する

Cloud Pub/Sub の「トピックを作成」から新規トピックを作成。

4. Function を作成する

Cloud Functions の「関数を作成」から上記で作成したトピックやリポジトリを選択して新規 Function を作成。

完成

テスト用のメッセージを公開。

Functions のログを見ると、期待通りの動作をしていることが確認できる。

リポジトリの変更を自動で検知して関数を再デプロイ、というのはやってくれないので、コードを変更したら関数の編集から手動でデプロイボタンを押す必要がある。(自動にして欲しい)

参考記事