TL;DR
遂にGCPのCloud FunctionsにGo言語サポートが来ましたので、前回は
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 件のコメント:
コメントを投稿