Cloud Run は、インスタンスの存続期間のみ保持されるエフェメラル ディスク ボリュームを提供します。この機能を使用すると、必要なディスク容量とマウントする場所を指定できます。Cloud Run は、その量のディスクをリソースに割り当てます。
ディスクは自動的にプロビジョニングされ、起動時に ext4 に事前フォーマットされ、インスタンス固有の鍵で暗号化されます。エフェメラル
ディスクは、どのユーザーでも読み取りまたは書き込みができるようにボリュームを作成します。ストレージはエフェメラルであるため、インスタンスがシャットダウンするとすべてのデータが完全に削除されます。これには、次の原因によるシャットダウンが含まれます。
- インスタンスのクラッシュ
- ジョブタスクの完了(成功または失敗)
ディスクは特定のインスタンス専用であり、他のインスタンスと共有されません。 ボリュームごとに構成可能なマウント ポイントを使用して、ファイル システム構造を制御できます。
インスタンスをシャットダウンする前に、Cloud Run から SIGTERM
シグナルがインスタンス内のすべてのコンテナに送信されます。これは、Cloud Run が SIGKILL シグナルを送信してから 10
秒後に実際のシャットダウンが開始されることを表しています。この 10 秒間の猶予期間を使用して、ディスク コンテンツの永続ストレージへの最終コピーなどのクリーンアップ オペレーションを実行できます。
ユースケース
エフェメラル ディスクは、次の用途に使用できます。
- データ処理ワークロード: Cloud Run で大規模なデータファイルを処理する場合、 通常はファイル全体をメモリに保存するか、 小さなチャンクに分割してオーケストレートします。エフェメラル ストレージを使用すると、データのローカル コピーを一時的に作成するために大量のメモリを確保する必要がなくなります。また、より大きなデータセットを処理することもできます。
- キャッシュ: ウェブ配信のユースケースでは、リモート ストレージからデータを取得するのではなく、ディスクにデータをキャッシュすることで、アプリケーションのレイテンシを最適化できます。
ストレージとインスタンスの上限
次の上限が適用されます。
- インスタンス ストレージの上限: デフォルトでは、各インスタンスの合計容量は 10 GB に制限されます。 必要に応じて、割り当ての増加をリクエストします。
- インスタンス ボリュームの上限: 各インスタンスは最大 10 個のボリュームに制限されます。
- プロジェクトの上限: デフォルトでは、各プロジェクトはリージョンごとに 100 GB に制限されます。 必要に応じて、割り当ての増加をリクエストします。
割り当ての増加をリクエストする
リージョンで Cloud Run エフェメラル ディスクを初めて使用するプロジェクトには、インスタンスあたり 10 GB、リージョンあたりの上限と、プロジェクトあたり 100 GB、リージョンあたりの上限が自動的に付与されます。
追加の容量が必要な場合は、Cloud Run ジョブの割り当ての増加をリクエストする必要があります。以下のボタンにあるリンクから、必要な割り当てをリクエストしてください。
| 現在の割り当て | 割り当てリンク |
|---|---|
| インスタンスあたり 10 GB | インスタンスあたりの割り当ての増加をリクエストする |
| プロジェクトあたり 100 GB | プロジェクトあたりの割り当ての増加をリクエストする |
割り当ての増加のリクエストについて詳しくは、 割り当てを増やす方法をご覧ください。
制限事項
次の制限が適用されます。- エフェメラル ディスクは、第 2 世代の実行環境でのみ使用できます。 デフォルトでは、Cloud Run ジョブは第 2 世代の実行環境を使用します。
- ライブ マイグレーションはサポートされていません。つまり、Cloud Run ジョブの信頼性が低下します。特に長時間実行されるジョブの場合に影響があります。
使用できないパス
Cloud Run では、/dev、/proc、/sys、またはそのサブディレクトリにボリュームをマウントすることはできません。
サポートされるリージョン
エフェメラル ディスク機能は、次のリージョンで利用できます。
- GPU 以外のワークロードの場合、エフェメラル ディスクは次のリージョンで利用できます。
- GPU を使用する場合、エフェメラル ディスクは GPU をサポートするすべての リージョンで利用できます。
始める前に
- アカウントにログインします。 Google Cloud を初めて使用する場合は、 アカウントを作成して、実際のシナリオで Google プロダクトのパフォーマンスを評価してください。 Google Cloud新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- gcloud CLI を インストールして初期化します。
-
コンポーネントを更新します。
gcloud components update
- CPU、メモリ、ネットワークの下り(外向き)については、Cloud Run の料金 ページをご覧ください。プロビジョニングされた ディスクの合計サイズと、それを使用するインスタンスの存続期間が費用に影響します。
必要なロール
エフェメラル ディスクを構成するために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
- Cloud Run ジョブに対する Cloud Run デベロッパー ロール (
roles/run.developer) - サービス ID に対するサービス アカウント ユーザー ロール(
roles/iam.serviceAccountUser)
Cloud Run に関連付けられている IAM ロールと権限のリストについては、Cloud Run IAM ロールと Cloud Run IAM 権限をご覧ください。Cloud Run ジョブがGoogle Cloud API(Cloud クライアント ライブラリなど)と連携している場合は、サービス ID の構成ガイドをご覧ください。ロールの付与の詳細については、 デプロイ権限 とアクセスの管理をご覧ください。
エフェメラル ディスクを作成してマウントする
エフェメラル ディスクは、 Google Cloud コンソール、Google Cloud CLI、YAML、または Terraform を使用して作成してマウントできます。
コンソール
Google Cloud コンソールで、Cloud Run の [ジョブ] ページに移動します。
[コンテナをデプロイ] をクリックして、ジョブの初期設定ページに入力します。既存のジョブを構成する場合は、ジョブを選択して [ジョブ構成の表示と編集] をクリックします。
[コンテナ、接続、セキュリティ] をクリックして、ジョブのプロパティ ページを開きます。
[コンテナ] タブをクリックします。
- [リソース] で以下を実行します。
- [エフェメラル ディスク] を選択します。
- メニューからエフェメラル ディスクのサイズを指定します。
- マウントパスを入力します。
- [リソース] で以下を実行します。
[作成] または [更新] をクリックします。
gcloud
ボリュームを追加してマウントするには:
gcloud beta run jobs update JOB \
--add-volume=name=VOLUME_NAME,type=ephemeral-disk,size=SIZE \
--add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH
次のように置き換えます。
- JOB: ジョブの名前。
- VOLUME_NAME: ボリュームに付ける名前。
- SIZE:ディスクサイズ(
100Giなど)。ephemeral-diskボリュームの場合、サイズは10Gi以上にする必要があります。 - MOUNT_PATH: ボリュームをマウントする相対パス(
/mnt/my-volumeなど)。
YAML
新しいジョブを作成する場合は、この手順をスキップします。 既存のジョブを更新する場合は、その YAML 構成をダウンロードします。
gcloud run jobs describe JOB_NAME --format export > job.yaml
YAML ファイルを構成します。
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/launch-stage: BETA spec: template: spec: template: spec: volumes: - name: VOLUME_NAME emptyDir: medium: Disk sizeLimit: SIZE containers: - image: IMAGE_URL volumeMounts: - name: VOLUME_NAME mountPath: MOUNT_PATH次のように置き換えます。
- JOB: ジョブの名前。
- REGION: の Google Cloud リージョン。
- IMAGE_URL:
コンテナ イメージへの参照(
例:
us-docker.pkg.dev/cloudrun/container/job:latest)。 - VOLUME_NAME: ボリュームに付ける名前。
- MOUNT_PATH: ボリュームをマウントする相対パス(
/mnt/my-volumeなど)。 - SIZE:ディスクサイズ(
100Giなど)。ephemeral-diskボリュームの場合、サイズは10Gi以上にする必要があります。
次のコマンドを使用して、ジョブを作成または更新します。
gcloud run jobs replace job.yaml
gcloud run jobs replaceコマンドは、ファイルが存在する場合はデフォルトでjob.yamlファイルを使用します。
Terraform
Terraform 構成を適用または削除する方法については、 基本的な Terraform コマンドをご覧ください。
Terraform 構成のgoogle_cloud_run_v2_job
リソースに次の内容を追加します: resource "google_cloud_run_v2_job" "default" {
name = "JOB"
location = "REGION"
deletion_protection = "true"
launch_stage = "BETA"
template {
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
volumes {
name = "VOLUME_NAME"
empty_dir {
medium = "DISK"
size_limit = "SIZE"
}
}
}
}
lifecycle {
ignore_changes = [
launch_stage,
]
}
}
次のように置き換えます。
- JOB: ジョブの名前。
- REGION: の Google Cloud リージョン。
- IMAGE_URL:
コンテナ イメージへの参照(
例:
us-docker.pkg.dev/cloudrun/container/job:latest)。 - VOLUME_NAME: ボリュームに付ける名前。
- MOUNT_PATH: ボリュームをマウントする相対パス(
/mnt/my-volumeなど)。 - SIZE:ディスクサイズ(
100Giなど)。ephemeral-diskボリュームの場合、サイズは10Gi以上にする必要があります。
ボリュームの読み取りと書き込み
Cloud Run のボリューム マウント機能を使用する場合、ローカル ファイル システムでファイルの読み取りと書き込みに使用するプログラミング言語のライブラリを使用して、マウントされたボリュームにアクセスします。
これは、ローカル ファイル システムにデータが保存されることを想定し、通常のファイル システム オペレーションを使用してデータにアクセスする既存のコンテナを使用している場合に特に便利です。
次のスニペットは、mountPath が /mnt/my-volume に設定されたボリューム マウントを前提としています。
Node.js
ファイル システム モジュールを使用してボリューム /mnt/my-volume に新しいファイルを作成するか、既存のファイルに追加します。
var fs = require('fs');
fs.appendFileSync('/mnt/my-volume/sample-logfile.txt', 'Hello logs!', { flag: 'a+' });Python
ボリューム /mnt/my-volume に保存されているファイルに書き込みます。
f = open("/mnt/my-volume/sample-logfile.txt", "a")Go
os パッケージを使用して、ボリューム /mnt/my-volume に新しいファイルを作成します。
f, err := os.Create("/mnt/my-volume/sample-logfile.txt")Java
Java.io.File クラスを使用して、ボリューム /mnt/my-volume にログファイルを作成します。
import java.io.File;
File f = new File("/mnt/my-volume/sample-logfile.txt");ボリュームとボリューム マウントを消去して削除する
すべてのボリュームとマウントを消去できます。または、個々のボリュームとボリューム マウントを削除することもできます。
すべてのボリュームとボリューム マウントを消去する
単一コンテナのジョブからすべてのボリュームとボリューム マウントを消去するには、次のコマンドを実行します。
gcloud run jobs update JOB \ --clear-volumes --clear-volume-mounts
複数のコンテナがある場合は、サイドカー CLI 規則に沿ってボリュームとボリューム マウントを消去します。
gcloud run jobs update JOB \ --clear-volumes \ --clear-volume-mounts \ --container=container1 \ --clear-volumes \ -–clear-volume-mounts \ --container=container2 \ --clear-volumes \ -–clear-volume-mounts
個々のボリュームとボリューム マウントを削除する
ボリュームを削除するには、そのボリュームを使用するすべてのボリューム マウントも削除する必要があります。
個々のボリュームまたはボリューム マウントを削除するには、remove-volume フラグと remove-volume-mount フラグを使用します。
gcloud run jobs update JOB \ --remove-volume VOLUME_NAME --container=container1 \ --remove-volume-mount MOUNT_PATH \ --container=container2 \ --remove-volume-mount MOUNT_PATH
ベスト プラクティス
エフェメラル データを効果的に管理し、ストレージのパフォーマンスを最適化するには、次のベスト プラクティスに従ってください。
永続ストレージにコピーする
エフェメラル ディスクの内容を Cloud Storage バケットなどの永続ストレージにコピーする場合は、10 秒間の SIGTERM から SIGKILL までの猶予期間に依存するのではなく、増分コピーすることをおすすめします。
強制シャットダウンの詳細については、コンテナ ランタイムの契約
をご覧ください。
Cloud Run は、追加のネットワーク設定なしで Cloud Storage との間で読み取りと書き込みを行うことができます。最適なパフォーマンスを実現するには、ダイレクト VPC を使用して VPC ネットワーク経由で Cloud Storage との間でトラフィックをルーティングすることをおすすめします。
この方法は、Cloud Run リソースがインターネットにアクセスする必要がない場合に有効です。インターネット アクセスが必要な場合は、Cloud NAT を設定するか、 Google API への内部トラフィックをご覧ください。
ジョブでダイレクト VPC 下り(外向き)を構成するには、次の手順を行います。
コンソールで、[Cloud Run] ページに移動します。 Google Cloud
新しいジョブを構成する場合は、[ジョブ] タブをクリックして [コンテナをデプロイ] を選択します。 必要に応じて、ジョブの初期設定ページに入力します。既存のジョブを構成する場合は、ジョブをクリックして [ジョブ構成の表示と編集] をクリックします。
[コンテナ、接続、セキュリティ] をクリックして、ジョブのプロパティ ページを開きます。
[接続] タブをクリックします。
[アウトバウンド トラフィック用の VPC に接続する] をクリックします。
[VPC に直接トラフィックを送信] をクリックします。
[ネットワーク] フィールドで、トラフィックを送信する VPC ネットワークを選択します。
[サブネット] フィールドで、ジョブが IP アドレスを受信するサブネットを選択します。同じサブネットで複数のジョブを実行できます。
[トラフィック ルーティング] で、[すべてのトラフィックを VPC にルーティングする] を 1 つ選択して、 すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。
[作成] または [更新] をクリックします。
ジョブが VPC ネットワーク上にあることを確認するには、ジョブをクリックして [構成] タブをクリックします。ネットワークとサブネットが [VPC] カードに一覧表示されます。
接続したサブネットでプライベート Google アクセスを有効にします。