【Cloud Functions】Functions Framework for Rubyを試す(GitHub Actionsからデプロイ編)
2021/09/20
前回書いた「【Cloud Functions】Functions Framework for Rubyを試す(ローカルからデプロイ編)」の続きで、今回はGitHub Actionsからデプロイしてみる
手順
サービスアカウントの作成
以下URLからサービスアカウント作成し、「Cloud Functions 開発者」のロールを付与する https://console.cloud.google.com/projectselector2/iam-admin/serviceaccounts/create
サービスアカウントキーをダウンロードして、そのJSONをGitHub Secretsに「GCP_SA_KEY」というキー名で登録する
ワークフローファイルの作成
$ mkdir .github/workflows
$ vim .github/workflows/deploy.yml
mainブランチにプッシュもしくはマージされたらデプロイが走る設定
.github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: google-github-actions/deploy-cloud-functions@main
with:
credentials: ${{ secrets.GCP_SA_KEY }}
name: hello
runtime: ruby27
動作確認
デプロイができているかわかるようにコードを書き換えておく
app.rb
require "functions_framework"
FunctionsFramework.http("hello") do |request|
- "Hello, world!\n"
+ "Hello, world! (Deploy from GitHub Actions)\n"
end
プッシュしたあと、ghコマンドで実行中のワークフローを確認する
$ git push
$ gh run watch
Refreshing run status every 3 seconds. Press Ctrl+C to quit.
✓ main Deploy · 1246588184
Triggered via push about 20 hours ago
JOBS
✓ deploy in 1m6s (ID 3640768767)
✓ Set up job
✓ Run actions/checkout@v2
✓ Run google-github-actions/deploy-cloud-functions@main
✓ Post Run actions/checkout@v2
✓ Complete job
✓ Run Deploy (1246588184) completed with 'success'
curlで叩いてデプロイができているか確認する
$ curl https://us-central1-masamune-287217.cloudfunctions.net/hello
Hello, world! (Deploy from GitHub Actions)
いい感じ
補足
IAM権限エラー
1回目のデプロイでは問題なかったが、2回目でエラーが出るようになった
[Missing necessary permission iam.serviceAccounts.actAs for on the service account [email protected].
Ensure that service account [email protected] is a member of the project PROJECT_ID, and then grant the roles/iam.serviceAccountUser role.
You can do that by running 'gcloud iam service-accounts add-iam-policy-binding [email protected] --member=$member --role=roles/iam.serviceAccountUser'
In case the member is a service account please use the prefix 'serviceAccount:' instead of 'user:'.]
以下のようなコマンドで解決
$ gcloud iam service-accounts add-iam-policy-binding [email protected] \
--member='serviceAccount:deploy-account@PROJECT_ID.iam.gserviceaccount.com' \
--role=roles/iam.serviceAccountUser
リポジトリ
今回やった内容のリポジトリ
https://github.com/ytkg/sample-functions-framework-ruby