サービスの Cloud Storage ボリュームのマウントの構成

このページでは、Cloud Run のボリューム マウントを使用して、Cloud Storage バケットをストレージ ボリュームとしてマウントする方法について説明します。

Cloud Run でバケットをボリュームとしてマウントすると、バケットの内容がコンテナ ファイル システムのファイルとして提示されます。これにより、標準のファイル システム オペレーションとライブラリを使用して、そのファイル システムにアクセスできます。

メモリ要件

Cloud Storage ボリューム マウントでは、次のアクティビティに Cloud Run のコンテナ メモリが使用されます。

  • すべての Cloud Storage FUSE キャッシュに対して、Cloud Run はデフォルトで統計キャッシュの設定を使用し、有効期間(TTL)を 60 秒に設定します。統計キャッシュのデフォルトの最大サイズは 32 MB、タイプキャッシュのデフォルトの最大サイズは 4 MB です。

  • Cloud Storage FUSE は、読み取り時に、統計キャッシュとタイプ キャッシュ以外のメモリも消費します。たとえば、ファイルを読み取るたびに、および goroutines を実行するたびに、1 MiB の配列を消費します。

  • Cloud Storage に書き込む場合は、ファイル全体が Cloud Run のメモリにステージングされた後、Cloud Storage に書き込まれます。

制限事項

Cloud Run は、このボリューム マウントに Cloud Storage FUSE を使用します。そのため、Cloud Storage バケットをボリュームとしてマウントする場合は、次の点に注意してください。

  • Cloud Storage FUSE では、同じファイルへの複数書き込みの同時実行制御(ファイルのロック)は行いません。複数の書き込みによってファイルの置き換えが試みられた場合は、最後の書き込みが有効となり、それより前の書き込みはすべて失われます。
  • Cloud Storage FUSE は POSIX 準拠のファイル システムではありません。詳細については、Cloud Storage FUSE のドキュメントをご覧ください。

始める前に

ボリュームとしてマウントするには、Cloud Storage バケットが必要です。

必要なロール

Cloud Storage ボリューム マウントの構成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

ファイルと Cloud Storage バケットにアクセスするためにサービス ID に必要な権限を取得するには、サービス ID に次の IAM ロールを付与するよう管理者に依頼してください。

Cloud Storage のロールと権限の詳細については、Cloud Storage の IAM をご覧ください。

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

Cloud Storage ボリュームをマウントする

複数のバケットを異なるマウントパスにマウントできます。複数のコンテナで同じマウントパスまたは異なるマウントパスを使用して、ボリュームを複数のコンテナにマウントすることもできます。

コンテナを複数使用する場合は、まずボリュームを指定してから、各コンテナのボリューム マウントを指定します。

ボリュームのマウントには、第 2 世代の実行環境が必要です。 実行環境が明示的に構成されていない場合、Cloud Run はサービスの第 2 世代の実行環境を自動的に選択します。

コンソール

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

    Cloud Run に移動

  2. デプロイ先の新しいサービスを構成する場合は、[サービスを作成] をクリックします。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

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

  4. [ボリューム] タブをクリックします。

    イメージ

      • [ボリュームを追加] をクリックします。
      • [ボリュームのタイプ] プルダウンで、ボリューム タイプとして Cloud Storage バケットを選択します。
      • [ボリューム名] フィールドに、ボリュームに使用する名前を入力します。
      • ボリュームに使用する Cloud Storage バケットを参照して選択するか、必要に応じて新しいバケットを作成します。
      • バケットを読み取り専用にする場合は、[読み取り専用] チェックボックスをオンにします。
      • [完了] をクリックします。
      [コンテナ] タブをクリックします。
      • [ボリュームのマウント] タブをクリックします。
      • [ボリュームをマウント] をクリックします。
      • メニューからストレージ ボリュームを選択します。
      • ボリュームをマウントするパスを指定します。
      • [完了] をクリックします
  5. [作成] または [デプロイ] をクリックします。

コマンドライン

注: ここでは gcloud beta run services update コマンドを使用していますが、ここに示されているパラメータを指定して gcloud beta run deploy コマンドを使用することもできます。

  • ボリュームを追加してマウントするには:

    gcloud beta run services update SERVICE \
    --execution-environment gen2 \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

    次のように置き換えます。

    • SERVICE: 実際のサービスの名前。
    • MOUNT_PATH は、ボリュームをマウントする相対パス(/cache など)に置き換えます。
    • VOLUME_NAME は、ボリュームに付ける名前に置き換えます。VOLUME_NAME 値は、ボリュームをボリューム マウントにマッピングするために使用されます。
    • BUCKET_NAME: Cloud Storage バケットの名前。
  • ボリュームを読み取り専用ボリュームとしてマウントするには:

--add-volume=name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,readonly=true
  • 複数のコンテナを使用している場合は、まずボリュームを指定してから、各コンテナのボリューム マウントを指定します。

    gcloud beta run services update SERVICE \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME \
    --container CONTAINER_1 \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH \
    --container CONTAINER_2 \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH2

YAML

  1. 新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. 必要に応じて更新します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/execution-environment: gen2
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - name: VOLUME_NAME
              mountPath: MOUNT_PATH
          volumes:
          - name: VOLUME_NAME
            csi:
              driver: gcsfuse.run.googleapis.com
              readOnly: IS_READ_ONLY
              volumeAttributes:
                bucketName: BUCKET_NAME

    次のように置き換えます。

    • 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 です。
    • MOUNT_PATH は、ボリュームをマウントする相対パス(/cache など)に置き換えます。
    • VOLUME_NAME は、ボリュームに付ける名前に置き換えます。VOLUME_NAME 値は、ボリュームをボリューム マウントにマッピングするために使用されます。
    • ボリュームを読み取り専用にする場合は IS_READ_ONLYTrue に置き換えます。書き込み可能にするには False に置き換えます。
    • BUCKET_NAME は、Cloud Storage バケットの名前に置き換えます。
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml

ボリューム マウント設定を表示する

Cloud Run サービスの現在のボリューム マウント設定を表示するには:

コンソール

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

    Cloud Run に移動

  2. 目的のサービスをクリックして、[サービスの詳細] ページを開きます。

  3. [リビジョン] タブをクリックします。

  4. 右側の詳細パネルで、[ボリューム] タブにボリューム マウントの設定が表示されます。

コマンドライン

  1. 次のコマンドを使用します。

    gcloud run services describe SERVICE
  2. 返された構成で、ボリューム マウント設定を見つけます。