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 では、/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 APIs(Cloud クライアント ライブラリなど)と連携している場合は、サービス ID の構成ガイドをご覧ください。ロールの付与の詳細については、デプロイ権限とアクセスの管理をご覧ください。
エフェメラル ディスクを作成してマウントする
エフェメラル ディスクは、 Google Cloud コンソール、Google Cloud CLI、または Terraform を使用して作成してマウントできます。
コンソール
Google Cloud コンソールで Cloud Run に移動します。
Cloud Run ナビゲーション メニューから [サービス] を選択し、[コンテナをデプロイ] をクリックして新しいサービスを構成します。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
新しいサービスを構成する場合は、最初のサービス設定のページに入力してから、[コンテナ、ネットワーキング、セキュリティ] をクリックしてサービス構成ページを開きます。
[コンテナ] タブをクリックします。
- [リソース] で次の操作を行います。
- [エフェメラル ディスク] を選択します。
- メニューからエフェメラル ディスクのサイズを指定します。
- マウントパスを入力します。
- [リソース] で次の操作を行います。
[作成] または [デプロイ] をクリックします。
gcloud
ボリュームを追加してマウントするには:
gcloud beta run services update SERVICE \
--execution-environment=gen2 \
--add-volume=name=VOLUME_NAME,type=ephemeral-disk,size=SIZE \
--add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH
次のように置き換えます。
- SERVICE: サービスの名前。
- VOLUME_NAME: ボリュームに付ける名前。
- SIZE: ディスクサイズ(例:
100Gi)。ephemeral-diskボリュームの場合、サイズは10Gi以上にする必要があります。 - MOUNT_PATH: ボリュームをマウントする相対パス(
/mnt/my-volumeなど)。
Terraform
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
Terraform 構成のgoogle_cloud_run_v2_service リソースに次の内容を追加します。 resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
location = "REGION"
launch_stage = "BETA"
deletion_protection = "true"
ingress = "INGRESS_TRAFFIC_ALL"
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,
]
}
}
次のように置き換えます。
- SERVICE: サービスの名前。
- REGION: Google Cloud のリージョン。
- IMAGE_URL: コンテナ イメージへの参照(
us-docker.pkg.dev/cloudrun/container/hello:latestなど)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL はLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAGの形式です。 - 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 services update SERVICE \ --clear-volumes --clear-volume-mounts
複数のコンテナがある場合は、サイドカー CLI 規則に沿ってボリュームとボリューム マウントを消去します。
gcloud run services update SERVICE \ --container=container1 \ --clear-volumes -–clear-volume-mounts \ --container=container2 \ --clear-volumes \ -–clear-volume-mounts
個々のボリュームとボリューム マウントを削除する
ボリュームを削除するには、そのボリュームを使用するすべてのボリューム マウントも削除する必要があります。
個々のボリュームまたはボリューム マウントを削除するには、remove-volume フラグと remove-volume-mount フラグを使用します。
gcloud run services update SERVICE \ --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 ネットワークを選択します。
[サブネット] フィールドで、サービスが IP アドレスを受信するサブネットを選択します。 同じサブネットに複数のサービスをデプロイできます。
[トラフィック ルーティング] で、[すべてのトラフィックを VPC にルーティングする] を選択して、すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。
[作成] または [デプロイ] をクリックします。
サービスが VPC ネットワーク上にあることを確認するには、サービスをクリックして、[ネットワーキング] タブをクリックします。ネットワークとサブネットが [VPC] カードに一覧表示されます。
これで、ファイアウォール ルールで許可されるように、Cloud Run サービスから VPC ネットワーク上の任意のリソースにリクエストを送信できます。
接続したサブネットでプライベート Google アクセスを有効にします。
トラブルシューティング
問題が発生した場合は、次の点を確認してください。- コンテナのメモリが不足している状態で、 Google Cloud コンソールを使用してエフェメラル ディスクがアタッチされたサービスの新しいリビジョンをデプロイした場合、 Google Cloud コンソールがディスク ボリュームをインメモリ ボリュームに変換した可能性があります。これにより、ディスク書き込みがメモリに書き込まれ、コンテナのメモリ不足が発生します。この問題を解決するには、gcloud CLI を使用してサービスを再デプロイし、YAML ファイルで
volumesの下にmedium: Diskが指定されていることを確認します。 - 大量のデータをエフェメラル ディスクにダウンロードするときにネットワーク速度が遅い場合は、Direct VPC を有効にする手順に沿って操作します。ダイレクト VPC が有効になっていない場合、ネットワーク転送速度が遅くなります。