Open3

buildpacksでCloud Functionsのローカルテスト環境を作る

kurehajimekurehajime

何をするか

Cloud Functionsをいちいちデプロイして動作確認するのは大変苦痛なので、ローカルの動作確認環境を作る。
選択肢は「Functions Framework」と「buildpacks」の2つあるらしい。
Functions Frameworkは軽量だが言語ごとに微妙に違うようなので、より潰しの効くbuildpacksの方を採用する。

buildpacksとは、Dockerfileを書かずにDockerイメージ作れるツールらしい。
herokuのようなフルマネージドなPaaSにgit commitすると特に設定とかしなくても何かいい感じにデプロイしてくれるアレ。
アレみたいなのができる。

Build Packのインストール

ここから落とせる
https://buildpacks.io/docs/tools/pack/

kurehajimekurehajime

Cloud Functionのヘルプページを見ながらpackコマンドを実行

ここを参考にする
https://cloud.google.com/functions/docs/building/pack?hl=ja

自分が動かすのはgo言語のアプリで実行環境はWindowsなので以下のような感じでコマンドを叩いた。

  pack build   --builder gcr.io/buildpacks/builder:v1  --env GOOGLE_RUNTIME=go  --env GOOGLE_FUNCTION_SIGNATURE_TYPE=http   --env GOOGLE_FUNCTION_TARGET=Dajareper   --env GOOGLE_FUNCTION_SOURCE="C:\Users\xxxxx\src\dajarep\docs\cloudfunctions"  dajareper
引数 説明
--builder ビルダー。ここはいじらなくて良さそう
--env GOOGLE_RUNTIME ランタイム。今回はgo言語
--env YOUR_FUNCTION_SIGNATURE_TYPE 関数の起動方法。httpかeventかcloudeventか
--env YOUR_FUNCTION_NAME 関数のエントリポイント。今回はメソッド1つなのでそれのメソッド名
--env GOOGLE_FUNCTION_SOURCE ソースの場所
最後の引数 コンテナに付ける名前

ハマったところ

  • コマンド末尾のイメージ名に大文字使ってたらなんか駄目だった。
  • そもそもDocker起動してないと駄目だった。WSLの中のUbuntuにはDocker入れてなかったので、Windowsに直接packをインストールし直した。
kurehajimekurehajime

実行してみる

このページとCloud Functionsの「テスト中」のタブを参考にコマンドを叩いた。渡すパラメータはAPIによる。
Windowsにはcurlが標準で入ってないのでubuntuで実行した。

curl -m 70 -X POST localhost:8080 \
-H "Content-Type: application/json" \
-d '{
"messages":["布団が吹っ飛んだ","古池や蛙飛びこむ水の音"]
}'

「テスト中」のタブで作られるコマンドには
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
の記述があるが、自分のAPIは認証不要のAPIなのでこの行は省いた。認証が必要ならgcloudのコマンドラインツールをインストールしておく必要がある。