ようへいの日々精進XP

よかろうもん

Cloud Functions チュートリアル 〜 季節の郷 (go) と Github Actions を添えて 〜

tl;dr

最近, GCP の Cloud Functions をいじる機会があったのメモしておきます.

作ったもの

HTTP トリガーへのリクエストを Google Cloud Storage に保存して, 保存した内容を BigQuery に突っ込むという流れを作ってみました.

github.com

README にガチャガチャ書いたので, もし興味がありましたらそちらをご一読下さい.

学び

GCP

  • GCP を触ったのはほぼ初めてで, 当初は AWS には無い「プロジェクト」という概念に戸惑ったけど, だいたい慣れた
  • GCPAPI を操作するには, それぞれのサービスの API を有効にすることから始める, また, サービスアカウントを発行して, サービスアカウントに各種権限を付与する必要がある (JSON 形式の鍵をダウンロードして利用する)
  • JSON 形式の鍵ファイルは環境変数 GOOGLE_APPLICATION_CREDENTIALS に設定する必要がある

Golang

  • Cloud Functions のコードは Go で書いた
  • サンプルコードをコピーしてちょっとだけ修正して動いてくれたのが嬉しかった
  • 簡単なテストも書いたけど, モックの書き方は書籍「みんなのGo言語 」がとても参考になった (インターフェースを駆使する方法は実際に手を動かして改めて書いてみたい)

gihyo.jp

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

以下のリファレンスをザーッと眺めることをオススメします.

help.github.com

以上

メモでした.