GitHub Actions で Google App Engine にデプロイする

GitHub Actions で Google App Engine にデプロイする仕組みを作ったので、その手順を備忘録として残しておきます。
環境は Ruby スタンダード環境です。

サービスアカウントを作る

まずはデプロイに必要なロールを持ったサービスアカウントを作ります。
App Engine 向けのロールについては以下のページに記載されています。

cloud.google.com

今回の用途であれば、まずは App Engine サービス管理者App Engine デプロイ担当者 が必要になりそうです。
また、

注: gcloud コマンドライン ツールや Admin API のような App Engine ツールを使用するには、ストレージ管理者の役割と Cloud Build 編集者の役割が必要です。

とあるように、ストレージ管理者Cloud Build 編集者 のロールも必要になるので、これら4つを付与しておきます。

サービスアカウントを作成したら、JSON 形式のキーを発行してダウンロードしておきます。

App Engine Admin API を有効化する

まだ有効化していなければ、App Engine Admin API を有効にします。
これがないと GitHub Actions から gcloud app deploy したときにエラーになってしまいます。

https://console.developers.google.com/apis/library/appengine.googleapis.com

サービスアカウントのキーをリポジトリの Secrets に設定する

リポジトリの Settings > Secrets を開き、サービスアカウントのキーを登録します。 (参照 : GitHub ヘルプ)
キー名は GOOGLE_APPLICATION_CREDENTIALS とし、値はキーを Base64 エンコードしたものを設定します。

cat my-key.json | base64 | pbcopy

ワークフローを実装する

Google Cloud SDK をセットアップしてくれる setup-gcloud という Action が公式から提供されているので、そちらを使います。

github.com

リポジトリの example-workflows にある app-engine.yml を参考に、ワークフローを実装します。
サービスアカウントのキーをGOOGLE_APPLICATION_CREDENTIALS で登録している場合は、setup-gcloudexport_default_credentials は不要です。

あとはワークフローをリポジトリに追加すれば完成です。
これだけで自動デプロイの仕組みが作れてしまうなんて、GCPGitHub Actions も本当に便利ですね。