こんにちは、香田です。
今回は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を使用してジョブをスケジュール実行する方法いかがでしたでしょうか。
最後までご覧いただきありがとうございます。