Cloud Run Jobs, Workflows, Cloud Schedulerで手軽に始めるCronJob

Cloud Run Jobs について

Cloud Run Jobs は Cloud Run 上でバッチ処理できる機能です。

Cloud Storage でのファイル処理、リクエストを処理しないコンテナなどに向いています。

また、今まで GCP 環境においてバッチ処理となると GKE の CronJob、GCE と選択肢が少ないため、気軽にバッチ処理環境を用意できる Cloud Run Jobs はその点においても強みです。

Cloud Run との機能の違いは下記ものがあります。

  1. タスクタイムアウト最大 1 時間伸ばすことができる
  2. 明示的に並列処理を実行することができる
  3. 最大リトライ回数の設定ができる

Cloud Run Jobs のデプロイ

docker build -t asia.gcr.io/xxxx/xxxx .
docker push asia.gcr.io/xxxx/xxxx

gcloud beta run jobs create my-cloudrun-job --image=asia.gcr.io/xxxx/xxxx --set-env-vars=KEY1=VALUE1,KEY2=VALUE2 # envが必要な場合

Workflows のデプロイ

Cloud Run Jobs の使用した Workflows の定義は下記のように行います。

main:
  steps:
    - my-cloudrun-job:
        call: googleapis.run.v1.namespaces.jobs.run
        args:
          name: "namespaces/project_id/jobs/my-cloudrun-job"
          location: asia-northeast1

    - finish:
        return: "OK"

※複数の Cloud Run Jobs も設定可能です。

Workflows の定義が終わったら、デプロイを行います。

この時に指定するサービスアカウントの IAMRole に CloudRun の実行できる Role を追加してあることを確認してください。

実行権限ない場合、Workflows を実行しても 403 エラーで失敗してしまいます。

gcloud workflows deploy my-cloudrun-job-workflow --source=my-workflow.yml --location=asia-northeast1 --service-account=my-account@my-project.iam.gserviceaccount.com

Cloud Scheduler の設定

gcloud scheduler jobs create http my-job --schedule="0 */3 * * *" --uri="https://workflowexecutions.googleapis.com/v1/projects/project_id/locations/asia-northeast1/workflows/my-cloudrun-job-workflow/executions" --http-method=POST

こちらも実行するサービスアカウントに対して Workflows の実行権限があることを確認してください。

まとめ

GKE と違いコマンド少し叩けばサラッとバッチをデプロイできる Cloud Run Jobs はとても便利すね。今後もさらに使い倒していきたいと思います!