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 では、/dev、/proc、/sys、またはそのサブディレクトリにボリュームをマウントすることはできません。
サポートされるリージョン
エフェメラル ディスク機能は、次のリージョンで利用できます。
- GPU を使用しないワークロードの場合、エフェメラル ディスクは次のリージョンで使用できます。
- GPU を使用する場合、エフェメラル ディスクは GPU をサポートするすべてのリージョンで使用できます。
始める前に
- Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $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 worker-pools update WORKERPOOL \
--add-volume=name=VOLUME_NAME,type=ephemeral-disk,size=SIZE \
--add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH
次のように置き換えます。
- WORKERPOOL: ワーカープールの名前。
- VOLUME_NAME: ボリュームに付ける名前。
- SIZE: ディスクサイズ(例:
100Gi)。ephemeral-diskボリュームの場合、サイズは10Gi以上にする必要があります。 - MOUNT_PATH: ボリュームをマウントする相対パス(
/mnt/my-volumeなど)。
YAML
新しいワーカープールを作成する場合は、この手順をスキップします。既存のワーカープールを更新する場合は、その YAML 構成をダウンロードします。
gcloud run worker-pools describe WORKER_POOL --format export > worker-pool.yaml
YAML ファイルを構成します。
apiVersion: run.googleapis.com/v1 kind: WorkerPool metadata: name: WORKER_POOL labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/launch-stage: BETA spec: template: spec: containers: - name: CONTAINER_NAME image: IMAGE_URL volumeMounts: - name: VOLUME_NAME mountPath: MOUNT_PATH volumes: - name: VOLUME_NAME emptyDir: medium: Disk sizeLimit: SIZE次のように置き換えます。
- WORKER_POOL: ワーカープールの名前。
- REGION: Google Cloud のリージョン。
- CONTAINER_NAME: コンテナに付ける名前。
- IMAGE_URL: ワーカープールを含むコンテナ イメージへの参照(
us-docker.pkg.dev/cloudrun/container/worker-pool:latestなど)。 - VOLUME_NAME: ボリュームに付ける名前。
- MOUNT_PATH: ボリュームをマウントする相対パス(
/mnt/my-volumeなど)。 - SIZE: ディスクサイズ(例:
100Gi)。ephemeral-diskボリュームの場合、サイズは10Gi以上にする必要があります。
次のコマンドを使用して、ワーカープールを作成または更新します。
gcloud run worker-pools replace worker-pool.yaml
gcloud run worker-pools replaceコマンドは、worker-pool.yamlファイルが存在する場合はデフォルトでそのファイルを使用します。
Terraform
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
resource "google_cloud_run_v2_worker_pool" "default" {
name = "WORKER_POOL"
location = "REGION"
deletion_protection = "true"
launch_stage = "BETA"
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,
]
}
}
次のように置き換えます。
- WORKER_POOL: ワーカープールの名前。
- REGION: Google Cloud のリージョン。
- IMAGE_URL: ワーカープールを含むコンテナ イメージへの参照(
us-docker.pkg.dev/cloudrun/container/worker-pool: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 worker-pools update WORKER_POOL \ --clear-volumes --clear-volume-mounts
複数のコンテナがある場合は、サイドカー CLI 規則に沿ってボリュームとボリューム マウントを消去します。
gcloud run worker-pools update WORKER_POOL \ --container=container1 \ --clear-volumes -–clear-volume-mounts \ --container=container2 \ --clear-volumes \ -–clear-volume-mounts
個々のボリュームとボリューム マウントを削除する
ボリュームを削除するには、そのボリュームを使用するすべてのボリューム マウントも削除する必要があります。
個々のボリュームまたはボリューム マウントを削除するには、remove-volume フラグと remove-volume-mount フラグを使用します。
gcloud run worker-pools update WORKER_POOL \ --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 を使用して、Cloud Storage との間で VPC ネットワーク経由でトラフィックをルーティングすることをおすすめします。
この方法は、Cloud Run リソースがインターネットにアクセスする必要がない場合に有効です。インターネット アクセスが必要な場合は、Cloud NAT を設定するか、Google API への内部トラフィックをご覧ください。
ジョブでダイレクト VPC 下りを構成する手順は次のとおりです。
Google Cloud コンソールで、[Cloud Run] ページに移動します。
メニューから [ワーカープール] を選択し、[コンテナをデプロイ] をクリックして新しいワーカープールを構成します。既存のワーカープールを構成する場合は、ワーカープールをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
新しいワーカープールを構成する場合は、最初のワーカープール ページに入力してから、[コンテナ、ネットワーキング、セキュリティ] をクリックしてワーカープール構成ページを開きます。
[ネットワーキング] タブをクリックします。
[VPC に接続] を選択します。
[トラフィック ルーティング] で、[すべてのトラフィックを VPC にルーティングする] を選択して、すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。
[作成] または [デプロイ] をクリックします。
これで、ファイアウォール ルールで許可されるように、Cloud Run ワーカープールから VPC ネットワーク上の任意のリソースにリクエストを送信できます。
接続したサブネットで限定公開の Google アクセスを有効にします。