Gemini の動画プロンプトのストレージを構成する

Gemini on Google Distributed Cloud(GDC)エアギャップでは、主に次の 2 つの方法で動画プロンプトを送信できます。

  • インライン base64 エンコード: 動画を base64 形式でエンコードし、API リクエスト内のインライン データとして送信します。
  • ストレージ バケット: 動画をストレージ バケットにアップロードし、リクエストの一部としてバケット内の動画の URL を指定します。

このページでは、GDC の Gemini で動画プロンプトに必要なバケット構成を追加で設定し、推論ゲートウェイがバケットにアクセスできるようにする方法について説明します。

始める前に

GDC で Gemini 動画プロンプトのバケットを設定する前に、次の前提条件を満たす必要があります。

  • jq CLI ツールと yq CLI ツールをインストールします。jqyq を含むツール コンテナの設定の詳細については、OOPS-P0065 ランブックをご覧ください。
  • aics-system Namespace で Inference Gateway Secret 管理者(inference-gateway-secret-admin)ロールを取得して、Secret リソースを作成します。詳細については、IAM-R0005 ランブックをご覧ください。
  • Gemini 組織を作成する

動画プロンプトのストレージ バケットを構成する

ユーザーが顧客組織で動画プロンプトを送信できるように、オブジェクト ストレージ バケットを構成します。

次の値を使用して、aics-system プロジェクトにバケットを作成します。

  • バケット名: aics-inference-gateway
  • Namespace: aics-system
  • 説明: Bucket for video prompts

デフォルトでは、バケットは V2 encryption で自動的に暗号化され、ロケーションはリソースを作成する管理 kube-apiserver と同じゾーンにあります。そのため、Gemini ゾーンにあるお客様の組織の管理 API サーバーに、ゾーン Bucket リソースを作成する必要があります。Storage API の詳細については、Storage API の概要をご覧ください。

Bucket リソースは次の例のようになります。

apiVersion: object.gdc.goog/v1
kind: Bucket
metadata:
  labels:
    object.gdc.goog/bucket-type: normal
    object.gdc.goog/encryption-version: v2
    object.gdc.goog/tenant-category: system
  name: aics-inference-gateway
  namespace: aics-system
spec:
  description: Bucket for video prompts
  location: GEMINI_ZONE
  storageClass: Standard

GEMINI_ZONE は、Gemini ゾーンの名前に置き換えます。

バケットへのアクセスを構成する

次の手順に沿って、動画プロンプト用に作成したバケットへのアクセスを構成します。

  1. 顧客組織の管理 API サーバーにサービス アカウントを作成します。

    KUBECONFIG=CUS_ORG_MGMT_KUBECONFIG_PATH
    
    kubectl --kubeconfig ${KUBECONFIG:?} apply -f - << EOF
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: aics-inference-gateway
      namespace: aics-system
    EOF
    

    CUS_ORG_MGMT_KUBECONFIG_PATH は、顧客組織の管理 API サーバーの kubeconfig ファイルのパスに置き換えます。

  2. サービス アカウントにバケットに対する読み取り / 書き込みアクセス権を付与する Role リソースと RoleBinding リソースを適用します。

    kubectl --kubeconfig ${KUBECONFIG:?} apply -f - << EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      labels:
        logging.private.gdch.goog/loggingpipeline-name: default
      name: aics-inference-gateway-buckets-role
      namespace: aics-system
    rules:
    - apiGroups:
      - object.gdc.goog
      resourceNames:
      - aics-inference-gateway
      resources:
      - buckets
      verbs:
      - read-object
      - write-object
    EOF
    
    kubectl --kubeconfig ${KUBECONFIG:?} apply -f - << EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      labels:
        logging.private.gdch.goog/loggingpipeline-name: default
      name: audit-logs-loki-pa-buckets-binding
      namespace: aics-system
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: aics-inference-gateway-buckets-role
    subjects:
    - kind: ServiceAccount
      name: aics-inference-gateway
      namespace: aics-system
    EOF
    
  3. 顧客組織の管理 API サーバーからアクセスキーをコピーします。このアクセスキーは Inference Gateway デプロイにマウントされ、Inference Gateway はこれを使用してバケットにアクセスします。次の手順に沿って、ある API サーバーから別の API サーバーにアクセスキーをコピーします。

    1. アクセスキーを含むシークレットの名前を取得します。

      MGMT_KUBECONFIG=CUS_ORG_MGMT_KUBECONFIG_PATH
      
      kubectl get secret -n aics-system \
        --kubeconfig {MGMT_KUBECONFIG:?} | grep object-storage-key
      

      CUS_ORG_MGMT_KUBECONFIG_PATH は、顧客組織の管理 API サーバーの kubeconfig ファイルへのパスに置き換えます。

      出力は次の例のようになります。

      object-storage-key-sysstd-sa-5adjkgdmmn6fyd4o6ybnrnuaiomsbihq4jluymifw4jvcf7w7aya   Opaque                           3      14m
      
    2. アクセスキーをコピーします。

      SECRET_NAME=object-storage-key-sysstd-sa-5adjkgdmmn6fyd4o6ybnrnuaiomsbihq4jluymifw4jvcf7w7aya
      
      kubectl get secret/$SECRET_NAME -n aics-system
        --kubeconfig {MGMT_KUBECONFIG:?} -o yaml | yq .data > access-key.yaml
      
    3. 組織インフラストラクチャ クラスタにアクセスキーを含む新しい Secret を作成します。

      CP_KUBECONFIG=CUS_ORG_CP_KUBECONFIG_PATH
      
      (echo "apiVersion: v1"; echo "kind: Secret"; echo "metadata:"; echo "  name: object-storage-key-std-sa"; \
      echo "  namespace: aics-system"; echo "data:"; sed 's/^/  /' access-key.yaml | cat -) > object-storage-key-std-sa.yaml
      
      kubectl apply --kubeconfig {CP_KUBECONFIG} -f object-storage-key-std-sa.yaml
      

      CUS_ORG_CP_KUBECONFIG_PATH は、顧客組織の組織インフラストラクチャ クラスタの kubeconfig ファイルのパスに置き換えます。

次のステップ