Cloud Run ワーカープールにエフェメラル ディスクを構成する

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 を使用しないワークロードの場合、エフェメラル ディスクは次の場所で使用できます。
    • asia-northeast1(東京)
    • europe-west1(ベルギー) リーフアイコン 低 CO2
    • northamerica-northeast1(モントリオール) リーフアイコン 低 CO2
    • northamerica-northeast2(トロント) リーフアイコン 低 CO2
    • us-central1(アイオワ) リーフアイコン 低 CO2
    • us-east1(サウスカロライナ)
    • us-east4(北バージニア)
    • us-west1(オレゴン) リーフアイコン 低 CO2
  • GPU を使用する場合、エフェメラル ディスクは GPU をサポートするすべてのリージョンで使用できます。

始める前に

  1. Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. gcloud CLI をインストールして初期化します
  7. コンポーネントを更新します。
    gcloud components update
  8. CPU、メモリ、ネットワーク下り(外向き)については、Cloud Run の料金ページをご覧ください。プロビジョニングされたディスクのサイズ全体と、それを使用しているインスタンスの存続期間が、費用に影響します。

必要なロール

エフェメラル ディスクの構成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

Cloud Run に関連付けられている IAM ロールと権限のリストについては、Cloud Run IAM ロールCloud Run IAM 権限をご覧ください。Cloud Run ワーカープールがGoogle Cloud API(Cloud クライアント ライブラリなど)と連携している場合は、サービス ID の構成ガイドをご覧ください。ロールの付与の詳細については、デプロイ権限アクセスの管理をご覧ください。

エフェメラル ディスクを作成してマウントする

エフェメラル ディスクを作成してマウントするには、 Google Cloud コンソールまたは Google Cloud CLI を使用します。

コンソール

  1. Google Cloud コンソールで Cloud Run に移動します。

    Cloud Run に移動

  2. メニューから [ワーカープール] を選択し、[コンテナをデプロイ] をクリックして新しいワーカープールを構成します。既存のワーカープールを構成する場合は、ワーカープールをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. 新しいワーカープールを構成する場合は、最初のワーカープール ページに入力してから、[コンテナ、ネットワーキング、セキュリティ] をクリックしてワーカープール構成ページを開きます。

  4. [コンテナ] タブをクリックします。

    画像

    • [リソース] で次の操作を行います。
      • [ボリュームをマウント] をクリックします。
      • [エフェメラル ディスク] を選択します。
      • マウントパスを入力します。
      • メニューからエフェメラル ディスクのサイズを指定します。
  5. [作成] または [デプロイ] をクリックします。

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 など)。

ボリュームの読み取りと書き込み

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 下りを構成する手順は次のとおりです。

  1. Google Cloud コンソールで、[Cloud Run] ページに移動します。

    Cloud Run に移動

  2. メニューから [ワーカープール] を選択し、[コンテナをデプロイ] をクリックして新しいワーカープールを構成します。既存のワーカープールを構成する場合は、ワーカープールをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. 新しいワーカープールを構成する場合は、最初のワーカープール ページに入力してから、[コンテナ、ネットワーキング、セキュリティ] をクリックしてワーカープール構成ページを開きます。

  4. [ネットワーキング] タブをクリックします。

  5. [VPC に接続] を選択します。

  6. [トラフィック ルーティング] で、[すべてのトラフィックを VPC にルーティングする] を選択して、すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。

  7. [作成] または [デプロイ] をクリックします。

    これで、ファイアウォール ルールで許可されるように、Cloud Run ワーカープールから VPC ネットワーク上の任意のリソースにリクエストを送信できます。

  8. 接続したサブネットでプライベート Google アクセスを有効にします。

トラブルシューティング

大量のデータをエフェメラル ディスクにダウンロードするときにネットワーク速度が遅い場合は、Direct VPC を有効にする手順に沿って操作します。ダイレクト VPC が有効になっていない場合、ネットワーク転送速度が遅くなります。