Open3

Cloud Run Jobsの作成とCloud Schedulerとの連携

nobezawanobezawa

目的

Cloud Run Jobsの作成とCloud Schedulerとの連携までの内容を備忘録として残していきます。
備忘録なので細かく説明するよりも詰まった箇所を中心に書いていきます。

前提

コンソールを使った内容なので、Terraformを使いたい人は対象外です。
Cloud Buildを利用してDocker Imageを作成してデプロイする流れになります。Imageを作成する手順は省きます。

nobezawanobezawa

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を起動して成功することを確認します。

nobezawanobezawa

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のコンソールから作成するよりも実行したいジョブの中にトリガーのタブがあるのでそこから作成する方が設定が事前に入力されているので簡単でした。