Cloud Run Jobsの作成とCloud Schedulerとの連携
目的
Cloud Run Jobsの作成とCloud Schedulerとの連携までの内容を備忘録として残していきます。
備忘録なので細かく説明するよりも詰まった箇所を中心に書いていきます。
前提
コンソールを使った内容なので、Terraformを使いたい人は対象外です。
Cloud Buildを利用してDocker Imageを作成してデプロイする流れになります。Imageを作成する手順は省きます。
Jobsのデプロイ
cloudbuild.yamlを使ってデプロイをします。ドキュメントではgcloud beta run jobs create Job名
の手順が書かれていますが、継続的にデプロイする場合はdeploy
を指定します。
また--command
で起動スクリプトを指定することが出来ますが、'npm,run,batch:prod'のようにカンマ区切りでスペース
を入れないようにして指定します。
steps:
# 上の方でImageの作成をしている
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: gcloud
args:
- 'beta'
- 'run'
- 'jobs'
- 'deploy'
- 'Job名'
- '--image'
- 'ImageURLを記入'
- '--region'
- 'リージョンを指定'
- '--service-account'
- 'サービスアカウントを指定'
- '--command'
- 'npm,run,batch:prod'
デプロイ後に
コンソールでJobを起動して成功することを確認します。
Cloud Schedulerとの連携
意外と連携するまでに時間がかかったので書きます。
IAMの設定
Google Cloud サービスから Cloud Run サービスを呼び出す場合はCloud Run 起動元(roles/run.invoker)ロール、もしくは同等の権限をもつカスタムロールが付与されたサービスアカウントによる認証が必要なのでサービスアカウントに追加します。
Cloud Schedulerを実行するサービスアカウントはCloud Runのサービスアカウントと別でも大丈夫そうですが、自分は同じサービスアカウントに設定しました。Cloud Schedulerを実行するサービスアカウントにはCloud Schedulerサービスエージェントを指定しました。
自分はこの辺のIAMの設定が上手く出来ておらず、Cloud Schedulerの起動が失敗してPERMISSION DENIEDとなり苦しみました。
Cloud Schedulerの作成
Cloud Schedulerのコンソールから作成するよりも実行したいジョブの中にトリガーのタブがあるのでそこから作成する方が設定が事前に入力されているので簡単でした。