🌐
GitHub Actionsを利用して、Google Cloud Functionsに自動でデプロイする
2024年3月23日の記事です。書いた背景はSandbox的な環境を作るための時間を短縮するためです。UIが変更された場合には、この手順は利用できません。
想定読者
- とりあえず動くものを作りたい人向け
- Google Cloud を触り始めた方で、詳しいことはわからないけどGitHub Actionsってのをつかうと、自動でデプロイできるらしい、ということを知っている方向け
前提
- Google Cloud Functions (以下、Functions)で使っている関数をGitHubで管理している
- クライアントPCからVScodeで変更したコードをCommitし、GitHubにPushできる
目的
- 変更したコードをGitHubにPushしたら、GitHub Actionsを利用してFunctionsに自動でデプロイする
必要な知識
- Google Cloud
- IAMと管理
- サービスアカウント
- GitHub
- Secretの設定
- Actionsを動かすプログラム(.yml)
- APIとサービス
ここで言及する範囲
- Google Cloud
- IAMと管理
- サービスアカウント
- GitHub
- Secretの設定
- Actionsを動かすプログラム(.yml)
動かす環境を作る手順
- Functionsの関数を作る
- サービスアカウントを作る
- サービスアカウントのKeyを発行する
- GitHub Repositoryを作る
- Repository secretsを設定する
- Actionsを動かすコード(.yml)を作成する
- GitHubにコードを配置する
- 実行する
1、4、7、8は説明を省きます。
詳細手順
2. サービスアカウントを作る
- IAMと管理に遷移する。
- サービス アカウントに遷移する。
- サービス アカウントの作成を押下する。
- サービスアカウント名を記入する
- このサービス アカウントにプロジェクトへのアクセスを許可するで、次のロールを設定する
- サービス アカウント ユーザー
- Cloud Functions 開発者
- Cloud Run 管理者
- 完了を押下する
3. サービスアカウントのKeyを発行する
- サービス アカウントに遷移する。
- [2. サービスアカウントを作る]で作成したサービスアカウントを選び、右端の操作をクリックし、「鍵の管理」を選択する。
- 鍵を追加を押下し、新しい鍵を作成するを選択。ポップアップ画面からキータイプJSONを選択し作成を押下する。「秘密鍵がパソコンに保存されました」が表示されたら、ブラウザが指定しているダウンロードファイルの保存先に保存される。
5. Repository secretsを設定する
- 自動デプロイしたいGitHub Repositoryを選択し、Setting => Actions secrets and variables => Actionsを押下する。
- New repository secret を押下する。
- Nameを任意で設定する。Secretには、[3. サービスアカウントのKeyを発行する]でダウンロードしたファイルの内容をコピー&ペーストする。
- Add secretを押下する
6. Actionsを動かすコード(.yml)を作成する
- GitHub Actionsに遷移し、set up a workflow yourself をクリックする。
- [.github/workflows/main.yml]を作成する。
- mainは変更可能です
- Enter file contens hereにはGitHub Actionsワークフローを動かすためのコードを記載します。
例)
---
#名前なので任意です。
name: Deploy to Google Cloud Functions
# mainのbrancheにpushされた時に、動くことを指定しています。
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest # Workflowで利用する仮想環境イメージを指定します。
steps:
- name: Checkout code # 仮想環境にコードを取り込みます。
uses: actions/checkout@v4
- name: Setup Google Cloud Authentication # functionsにアクセスするための認証を行います。
uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.[任意で設定したsecretsの名前を記載します] }}
project_id: [プロジェクトIDを記載します]
export_default_credentials: true
- name: Deploy to Google Cloud Functions # functionsにコードをデプロイします。
run: |
gcloud functions deploy function-1 \
--trigger-http \
--region [リージョンを記載します] \
--runtime [ランタイムを記載します] \
--entry-point [エントリーポイントを記載します] \
--allow-unauthenticated #公開アクセスを許可します
- 上記のコードで変更する点は6つです。各々設定した情報を記載してください。
- credentials_json: ${{ secrets.[任意で設定したsecretsの名前を記載します] }}
- project_id: [プロジェクトIDを記載します]
- --region [リージョンを記載します] \
- --runtime [ランタイムを記載します] \
- --entry-point [エントリーポイントを記載します] \
- --allow-unauthenticated #公開アクセスを許可します
備忘録
困ったことは、IAMの設定。サービスアカウントを作成した際に、必要なロールがわからず後で設定しようとしたら詰まった。サービスアカウントの画面で指定のプリンシパルにはロールがあるけど、エラーを起こしていた。
これは、継承にプロジェクトが入っていないために起こっていたみたい。これがわからず2時間くらいとかした。
あと、yamlの方はデプロイは成功しているが、warningがある。これは、google-github-actions/auth@v1 が Node.js 16を使っているから変えてね、という話。
これもあとで修正できたらなと思う。
Discussion