2019/01/28

Google Cloud FunctionsにGo言語サポートきましたよ!ʕ◔ϖ◔ʔ (Background Functions編 その1)

TL;DR


遂にGCPCloud FunctionsGo言語サポートが来ましたので、前回HTTP Functionsを使ってみました。今回はCloud Storageと連携させてBackground Functionsを使ってみたいと思いますʕ◔ϖ◔ʔ

やってみるよ!


バケット作るよ!

まず、GCPのプロジェクトとCloud Strageバケットを作っておきます。

CLI好き好きなフレンズなのでgsutilツールを使ってバケットの作成を行いたいと思います。「クイックスタート: gsutil ツールの使用」がとても分かりやすく参考になります。

作成するバケットのロケーションについては「バケットのロケーション - 利用できるロケーション」を見ながら指定します。東京リージョンasia-northeast1を使います。[YOUR_TRIGGER_BUCKET_NAME]には自分が使うバケット名を入れます。
gsutil mb -l asia-northeast1 gs://[YOUR_TRIGGER_BUCKET_NAME]

関数をデプロイするよ!

まずは、公式動画の「Go Cloud Functions」で紹介されている以下の関数を使います。バケットにコピーしたファイルのファイル名とバケット名を出力する内容です。
// function.go
package bucket

import (
 "context"
 "fmt"
)

// GCSEvent holds event data from a Google Cloud Storage Event.
type GCSEvent struct {
 Bucket string `json:"bucket"`
 Name   string `json:"name"`
}

func F(ctx context.Context, e GCSEvent) error {
 fmt.Printf("%s was uploaded to %s\n", e.Name, e.Bucket)
 return nil
}

ではデプロイいたしましょうʕ◔ϖ◔ʔ
公式の「Cloud Storage のチュートリアル - 関数のデプロイとトリガー」が参考になります。
gcloud functions deploy bucket \
--runtime go111 \
--entry-point F \
--region asia-northeast1 \
--trigger-event google.storage.object.finalize \
--trigger-resource [YOUR_TRIGGER_BUCKET_NAME]

ファイルをバケットにコピーして確認!

適当な内容を書き込んだサンプルテキストgcf_test.txtを作り、以下でバケットにコピーします。
gsutil cp gcf_test.txt gs://[YOUR_TRIGGER_BUCKET_NAME]

チュートリアルにあるように動作ログを読み取ろうと以下を実行したのですが、Listed 0 items.という結果になってしまいました。
gcloud functions logs read bucket --limit 10

GCPコンソールのStackdriverでは、以下のように意図したログが出ていることが確認できました。

そこで「Stackdriver - CLI - Log entries」を参考にして、CLIからこれらのログを読み取ってみました。
gcloud logging read "resource.labels.function_name=[YOUR_FUNCTION_NAME]" --limit=10 | grep textPayload
[YOUR_FUNCTION_NAME]にはデプロイ時に指定した関数名を指定します。それらのログエントリーのうちtextPayloadを含むログのみを抽出しています。

結果は以下のようになりました。
textPayload: "Function execution took 6 ms, finished with status: 'ok'"
textPayload: gcf_test.txt was uploaded to [YOUR_TRIGGER_BUCKET_NAME]
textPayload: Function execution started

まとめ


小ネタを入れる予定でしたが、ひとまずCloud Storageのイベントで駆動するGo言語のBackground Functionsを体験してみましたʕ◔ϖ◔ʔ
お膳立ての仕方さえわかってしまえば簡単に使えますし、FaaSは本当に面白い技術ですね。

0 件のコメント: