4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-03-09

手順

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 の「トピックを作成」から新規トピックを作成。
cloud-pubsub-new.png

4. Function を作成する

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

完成

テスト用のメッセージを公開。
cloud-pubsub-message-new.png

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

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

参考記事

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?