Cloud Run で Java ジョブをビルドして作成する
始める前に
- アカウントにログインします。 Google Cloud を初めて使用する場合は、 アカウントを作成して、 実際のシナリオでプロダクトがどのように機能するかを評価してください。 Google Cloud新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
プロジェクトを Google Cloud 作成または選択します。
プロジェクトを選択または作成するために必要なロール
- プロジェクトを選択する: プロジェクトを選択する場合、特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、プロジェクト作成者ロール
(
roles/resourcemanager.projectCreator)が必要です。これにはresourcemanager.projects.create権限が含まれています。詳しくは、ロールを付与する方法をご覧ください。
-
プロジェクトを作成する Google Cloud :
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、 Google Cloud プロジェクトの名前に置き換えます。
-
このガイドで既存のプロジェクトを使用する場合は、 このガイドを完了するために必要な権限があることを 確認します。新しいプロジェクトを作成した場合は、 必要な権限がすでに付与されています。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
プロジェクトを Google Cloud 作成または選択します。
プロジェクトを選択または作成するために必要なロール
- プロジェクトを選択する: プロジェクトを選択する場合、特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、プロジェクト作成者ロール
(
roles/resourcemanager.projectCreator)が必要です。これにはresourcemanager.projects.create権限が含まれています。詳しくは、ロールを付与する方法をご覧ください。
-
プロジェクトを作成する Google Cloud :
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、 Google Cloud プロジェクトの名前に置き換えます。
-
このガイドで既存のプロジェクトを使用する場合は、 このガイドを完了するために必要な権限があることを 確認します。新しいプロジェクトを作成した場合は、 必要な権限がすでに付与されています。
-
Cloud Run Admin API と Cloud Build API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限が付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法をご覧ください。gcloud services enable run.googleapis.com
cloudbuild.googleapis.com Cloud Run Admin API を有効にすると、Compute Engine のデフォルトのサービス アカウントが 自動的に作成されます。
- Cloud Run の料金を確認するか、料金計算ツールで費用を見積もります。
必要なロール
このクイックスタートを完了するために必要な権限を取得するには、管理者に次の IAM ロールを付与するよう依頼してください。
- プロジェクトに対する Cloud Run 管理者 (
roles/run.admin) - プロジェクトに対する Cloud Run ソース デベロッパー (
roles/run.sourceDeveloper) - サービス ID に対するサービス アカウント ユーザー (
roles/iam.serviceAccountUser) ロール - ログビューア (
roles/logging.viewer)プロジェクトに対する
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
Cloud Build サービス アカウントにプロジェクトへのアクセス権を付与する
この動作をオーバーライドしない限り、Cloud Build は、ソースコードと Cloud Run リソースのビルドにデフォルトの Cloud Build サービス アカウントとして Compute Engine のデフォルトのサービス アカウントを自動的に使用します。
Cloud Build がソースをビルドできるようにするには、プロジェクトの Cloud Build サービス アカウントに Cloud Run ビルダー(roles/run.builder)のロールを付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS \ --role=roles/run.builder
PROJECT_ID は実際の Google Cloudプロジェクト ID に置き換え、SERVICE_ACCOUNT_EMAIL_ADDRESS は Cloud Build サービス アカウントのメールアドレスに置き換えます。Compute Engine のデフォルト サービス アカウントを Cloud Build サービス アカウントとして使用している場合は、サービス アカウントのメールアドレスに次の形式を使用します。
PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER は、使用する Google Cloudプロジェクト番号に置き換えます。
プロジェクト ID とプロジェクト番号を確認する方法については、プロジェクトの作成と管理をご覧ください。
Cloud Run ビルダーのロールを付与すると、反映されるまでに数分かかることがあります。
サンプルジョブの作成
Java でジョブを作成するには:
jobsという名前の新しいディレクトリを作成し、そのディレクトリに移動します。mkdir jobs cd jobssrc/main/java/com/exampleという名前のサブディレクトリに、実際のジョブコードを記述するJobsExample.javaファイルを作成します。ここに次のサンプル行をコピーします。Cloud Run ジョブを使用すると、実行するタスクの数を指定できます。次のサンプルコードは、組み込みの
CLOUD_RUN_TASK_INDEX環境変数を使用する方法を示しています。各タスクが、コンテナの 1 つの実行中のコピーを表します。タスクは通常、並行して実行されます。各タスクが独立してデータのサブセットを処理できる場合は、複数のタスクを使用すると便利です。各タスクはインデックスを認識し、
CLOUD_RUN_TASK_INDEX環境変数に格納されます。組み込みのCLOUD_RUN_TASK_COUNT環境変数には、ジョブの実行時に--tasksパラメータを介して指定されたタスクの数が含まれています。このコードは、組み込みの
CLOUD_RUN_TASK_ATTEMPT環境変数を使用してタスクを再試行する方法を示しています。この変数はタスクの再試行回数を表します。最初の再試行が行われると、この変数に 0 が設定され、--max-retriesになるまで再試行のたびに値が 1 ずつ増加します。このコードでは、再試行のテストやエラーログの生成も行うことができるため、問題の発生箇所を確認できます。
pom.xmlファイルを作成し、次の内容を追加します。次の内容の
project.tomlファイルを作成し、Buildpack でサポートされている Java バージョンでビルドします。
コードが完成し、コンテナにパッケージ化できるようになりました。
ジョブコンテナをビルドして Artifact Registry に送信し、Cloud Run にデプロイする
このクイックスタートでは、コンテナをビルドして Artifact Registry にアップロードし、ジョブを Cloud Run にデプロイするソースからのデプロイを使用します。
gcloud run jobs deploy job-quickstart \ --source . \ --tasks 50 \ --set-env-vars SLEEP_MS=10000 \ --set-env-vars FAIL_RATE=0.1 \ --max-retries 5 \ --region REGION \ --project=PROJECT_ID
ここで、PROJECT_ID はプロジェクト ID、REGION はリージョンです(例: europe-west1)。パラメータの値は、テスト目的で使用する任意の値に変更できます。SLEEP_MS は作業をシミュレートし、FAIL_RATE でタスクの X% を失敗させます。これにより、並列処理をテストし、失敗したタスクを再試行できます。
Cloud Run でジョブを実行する
作成したジョブを実行するには:
gcloud run jobs execute job-quickstart --region REGION
REGION は、ジョブを作成してデプロイしたときに使用したリージョン(europe-west1 など)に置き換えます。
クリーンアップ
Google Cloud アカウントで追加料金が発生しないようにするには、このクイックスタートでデプロイしたすべてのリソースを削除します。
リポジトリを削除する
Cloud Run では、ジョブの実行時間に対してのみ料金が発生します。ただし、コンテナ イメージを Artifact Registry に保存した場合にも料金が発生する可能性があります。Artifact Registry リポジトリを削除するには、Artifact Registry ドキュメントのリポジトリを削除するの手順を行います。
ジョブを削除する
Cloud Run ジョブでは、ジョブタスクの実行時にのみ料金が発生します。Cloud Run ジョブを削除するには、次のいずれかの操作を行います。
コンソール
ジョブを削除するには:
Google Cloud コンソールで Cloud Run に移動します。
削除するジョブをジョブリストで探し、そのチェックボックスをクリックして選択します。
[削除] をクリックします。これにより、進行中のすべてのジョブ実行と実行中のすべてのコンテナ インスタンスが終了します。
gcloud
ジョブを削除するには、次のコマンドを実行します。
gcloud run jobs delete JOB_NAME
JOB_NAME は、ジョブ名に置き換えます。
テスト プロジェクトを削除する
Google Cloud プロジェクトを削除すると、そのプロジェクト内のすべてのリソースに対する課金が停止します。プロジェクト内のすべての Google Cloud リソースを解放する手順は次のとおりです。
プロジェクトを削除する: Google Cloud
gcloud projects delete PROJECT_ID
次のステップ
コードソースからコンテナをビルドし、リポジトリに push する方法については、以下をご覧ください。