🙆

Cloud Run Jobs β版を試してみたサマリ 22/06/02

2022/06/02に公開

Cloud Run Jobsとは

Cloud RunはWebサーバーなどの持続して稼働するサービスをコンテナで起動するものですが、Cloud Run Jobは、マイグレーションタスクなどの処理をContainerを利用して実行する仕組みです。

Cloud Run Jobsの用途

様々な業務プロセスやDBへの処理などが用途として考えられます。

  • DBのマイグレーション
  • 毎月のInvoiceの作成
  • 数時間毎のDatabaseのクエリー結果の保存
  • etc

チュートリアル

Jobの作成と実行までのチュートリアルが記述されていますが、Jobの作成までしか記述されていないようでした。また、ドキュメントで記載されているgcloud beta run jobsのコマンドがまだサポートされていないのか実行できませんでした。まだGUIなどのサポートもない、というような記述があります。

Gcloudをアップデートして実行したら最後までJobが完了しました。

https://codelabs.developers.google.com/codelabs/cloud-starting-cloudrun-jobs-io#0

チュートリアルの流れ

gcloudの設定

その前に

以下のコマンドでgcloudのバージョンをあげておきましょう。gcloud beta run jobsコマンドがあるバージョンが必要です。

gcloud components update

Gcloudで操作対象とするProjectと、Cloud Runのリージョンを設定

PROJECT_ID=[YOUR-PROJECT-ID]
REGION=europe-west9
gcloud config set core/project $PROJECT_ID
gcloud config set run/region $REGION

cloud runのAPIの有効化

gcloud services enable \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  run.googleapis.com

サンプルコードのinstall

ウェブサイトのスクリーンショットを保存してcloud bucketに保存するjobを2個並列で実行するチュートリアルです。

git clone https://github.com/GoogleCloudPlatform/jobs-demos.git
cd jobs-demos/screenshot

Containerイメージの作成

// containersという名称の registoryを作成
gcloud artifacts repositories create containers --repository-format=docker --location=$REGION 
// containersにサンプルコードのdockerイメージをpush
gcloud builds submit -t $REGION-docker.pkg.dev/$PROJECT_ID/containers/screenshot:v1

Jobの作成

// サービスアカウントを作成
gcloud iam service-accounts create screenshot-sa --display-name="Screenshot app service account"

// サービスアカウントにアクセス権限を付与
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/storage.admin \
  --member serviceAccount:screenshot-sa@$PROJECT_ID.iam.gserviceaccount.com

// Jobの作成
gcloud beta run jobs create screenshot \
  // ContainersにPushしたイメージを指定
  --image=$REGION-docker.pkg.dev/$PROJECT_ID/containers/screenshot:v1 \
 // サンプルコードが参照する引数1。第1引数は、1個目のタスクが参照するように設定されている
  --args="https://example.com" \
 // サンプルコードが参照する引数2。第2引数は、2個目のタスクが参照するように設定されている
 --args="https://cloud.google.com" \
 // タスクの数。各タスクは、自分が何番目のタスクかを参照する環境変数にアクセスできる。
  --tasks=2 \
  // タスクのタイムアウト時間。タイムアウトした場合にリトライしたい場合は、リトライ回数を設定するオプションがあるらしい。
  --task-timeout=5m \
  // taskが参照する環境変数を定義
  --set-env-vars=BUCKET_NAME=screenshot-$PROJECT_ID \
  // 実行するアカウントを指定
  --service-account=screenshot-sa@$PROJECT_ID.iam.gserviceaccount.com

Jobの実行

Jobを作成すると以下のメッセージが出るので、Jobを実行する

To execute this job, use:
gcloud beta run jobs execute screenshot
gcloud beta run jobs execute screenshot

以上でJobの実行まで完了です。

Discussion