Cloud Run Jobsを使用してジョブをスケジュール実行する

こんにちは、香田です。

今回はCloud Run Jobsを使用してジョブをスケジュール実行する方法について紹介していきます。

サンプルアプリケーションとしてシンプルなシェルスクリプトを用意し、Cloud Run Jobsでジョブを実行できるようにします。

Cloud Run Jobsとは

Cloud Run Jobsとはサーバーレスにコンテナが実行可能で、ワンショットのタスク、定期的なスケジュール実行、ワークフローでの実行など様々なシーンで利用可能なサービスです。

Cloud Run Jobsの概要

サンプルアプリケーションの作成

はじめに作業ディレクトリを作成します。

$ mkdir workspace
$ cd workspace

下記の内容でscript.shを作成します。

#!/usr/bin/env bash
for i in {1..60}; do
    echo "$(date +"%Y-%m-%d %H:%M:%S") Hello Crund Run Jobs $i"
    sleep 1
done

Dockerfileを作成します。

FROM google/cloud-sdk:latest

ENV APP_HOME /app
COPY script.sh $APP_HOME/
RUN chmod +x $APP_HOME/script.sh

CMD $APP_HOME/script.sh

ジョブの作成

イメージをビルドしレジストリへプッシュします。

$ export PROJECT_ID=$(gcloud config get-value project)
$ gcloud builds submit --tag gcr.io/${PROJECT_ID}/hello-app:latest

ジョブを作成します。

$ gcloud beta run jobs create hello-app \
--image gcr.io/${PROJECT_ID}/hello-app \
--region asia-northeast1

作成したジョブが実行されるか確認します。

$ gcloud beta run jobs execute hello-app \
--region asia-northeast1

Cloud Runのコンソール画面より下記のようにジョブが実行中になっているはずです。

実行されたジョブのログが下記のように確認できます。

ジョブのスケジュール実行

次に登録したジョブをスケジュール実行していきます。

Cloud Schedulerへ5分ごとに実行されるジョブを登録してみます。

$ export PROJECT_NUMBER=$(gcloud projects list --filter="$(gcloud config get-value project)" --format="value(PROJECT_NUMBER)")
$ gcloud scheduler jobs create http hello-app \
--location="asia-northeast1" \
--schedule="*/5 * * * *" \
--uri="https://asia-northeast1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/${PROJECT_ID}/jobs/hello-app:run" \
--http-method="POST" \
--time-zone="JST" \
--oauth-service-account-email="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com"

Cloud Schedulerへ下記のように登録されるはずです。

Cloud Run Jobsのログは、Cloud Loggingのコンソール画面でクエリ実行するとこでまとめて確認可能です。

実行するクエリの例は下記になります。

resource.type="cloud_run_job"
resource.labels.job_name="hello-app"
resource.labels.location="asia-northeast1"

クリーンアップ

Cloud SchedulerとCloud Run Jobsは下記で削除可能です。

$ gcloud scheduler jobs delete hello-app --location asia-northeast1
$ gcloud beta run jobs delete hello-app --region asia-northeast1

さいごに

Cloud Run Jobsを使用してジョブをスケジュール実行する方法いかがでしたでしょうか。

最後までご覧いただきありがとうございます。

SNSでもご購読できます。