ayumin.log

読みにくかったら脳内sedで整形してね

GCP の Cloud Functions は引数と戻り値をちゃんと書かないとハマる話

FaaSを使ってみる

タイトルが全て。

サークルの体験入部管理用に作ったBotバッチ処理をさせているが、Botのコードに無理やりgoroutineを入れてバッチ処理をさせている微妙なコードだった。 Oracle Cloudの無料枠に乗せているため、サーバの余力がなくコンテナを新たに立てるのが厳しかったので、そんな感じの無茶苦茶なコードになっていた。

サークルの先輩からIssuesが飛んできたりしてて、流石にそろそろ放置するのも忍びないのでBotの修正ついでに Cloud Functions に移行してみた。言語はGo。

6時間ぐらいハマった

色々困った部分はあったが、特にハマったのは以下の部分。

  • メインで動かす関数の引数、戻り値はイベントに応じてちゃんと設定する必要がある
  • package は main が使えない (ビルド時に main パッケージが自動追加されるらしい) ので、他の名前にする
  • メインで動かす関数は開始を大文字にする (Go で、package を分けることを考えれば妥当)

gcloud コマンドで行ったが、基本的にデプロイ時のエラーメッセージはあてにならないと思った方が良い。

エラーメッセージの内容で調べても情報は(英語であっても)基本出てこなかった。

Cloud Scheduler

バッチ処理の発火のためのスケジューラ。こっちは crontab とか書いたことあれば簡単で、ものの2, 3分あればできる。

Pub/Subで指定した時間にトピックを指定してやれば、ちゃんと Cloud Functions でトピックで発火する設定ができていれば動いてくれる。

感想

大体実行時間は3~4s/回ぐらい。一日一回のバッチ処理で、実行環境はメモリ128MBの最小サイズなので、1か月0.1円もしない。無料枠にも勿論収まるため超お手軽。

ちょうど良い FaaS 入門で面白かった。

通知Botとかも作れそうだし、最近 Discord も slash コマンドが使えるようになって、FaaS にコマンド処理を置けるようになったらしいので作ってみたい。

dev.to