Cloud Run で Java ジョブをビルドして作成する
始める前に
- Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init -
Google Cloud プロジェクトを作成または選択します。
プロジェクトの選択または作成に必要なロール
- プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトであれば、どのプロジェクトでも選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、
resourcemanager.projects.create権限を含むプロジェクト作成者ロール(roles/resourcemanager.projectCreator)が必要です。ロールを付与する方法を確認する。
-
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 ロールは必要ありません。ロールが付与されているプロジェクトであれば、どのプロジェクトでも選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、
resourcemanager.projects.create権限を含むプロジェクト作成者ロール(roles/resourcemanager.projectCreator)が必要です。ロールを付与する方法を確認する。
-
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権限を含む Service Usage 管理者 IAM ロール(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 する方法については、以下をご覧ください。