tl;dr
最近, GCP の Cloud Functions をいじる機会があったのメモしておきます.
作ったもの
HTTP トリガーへのリクエストを Google Cloud Storage に保存して, 保存した内容を BigQuery に突っ込むという流れを作ってみました.
README にガチャガチャ書いたので, もし興味がありましたらそちらをご一読下さい.
学び
GCP
- GCP を触ったのはほぼ初めてで, 当初は AWS には無い「プロジェクト」という概念に戸惑ったけど, だいたい慣れた
- GCP の API を操作するには, それぞれのサービスの API を有効にすることから始める, また, サービスアカウントを発行して, サービスアカウントに各種権限を付与する必要がある (JSON 形式の鍵をダウンロードして利用する)
- JSON 形式の鍵ファイルは環境変数
GOOGLE_APPLICATION_CREDENTIALS
に設定する必要がある
Golang
- Cloud Functions のコードは Go で書いた
- サンプルコードをコピーしてちょっとだけ修正して動いてくれたのが嬉しかった
- 簡単なテストも書いたけど, モックの書き方は書籍「みんなのGo言語 」がとても参考になった (インターフェースを駆使する方法は実際に手を動かして改めて書いてみたい)
Terraform
- Cloud Function 関数コードを変更して
terraform apply
してもコードは更新されないので, 一旦, 関数だけdestroy
する必要があった... - 時代は v0.12.x だった
- v0.11.x から v0.12.x へのアップデートは苦行になりそう
Github Actions
使い勝手的には Circle CI とほぼ同じでした. いきなり orbs 的な機能が提供されていて CircleCI をライバル視している感を感じました. 今回は, Cloud Function 関数のコードの構文チェックやテストを実行させています.
以下, 実際に利用している YAML の一部抜粋です.
name: CI on push on: [push] go_test: strategy: matrix: go-version: [1.11.x] platform: [ubuntu-latest] runs-on: ${{ matrix.platform }} steps: - name: Install Go uses: actions/setup-go@v1 with: go-version: ${{ matrix.go-version }} - name: Checkout code uses: actions/checkout@v1 - name: go test for codes run: | for dir in $(ls -l | awk '$1 ~ /d/ {print $9}' | grep -v terraform | grep -v output | grep -v docs) ; do echo "=== go test for $dir" cd $dir && go test -v ; cd ../ done
以下のリファレンスをザーッと眺めることをオススメします.
以上
メモでした.