Configura Lakehouse sin fronteras para Snowflake

En este documento, se describe cómo configurar un Lakehouse sin límites para consultar datos de un catálogo de Snowflake (Snowflake Horizon) directamente enGoogle Cloud. Esta capacidad unifica tu análisis de datos integrando tus fuentes de datos externas con tu entorno Google Cloudexistente.

Luego, puedes usar Lakehouse para administrar el acceso a tus datos federados.

Antes de comenzar

  1. Revisa la descripción general de Lakehouse para comprender cómo Lakehouse administra el acceso a los datos.
  2. Lee Acerca de Lakehouse sin bordes para comprender cómo funciona.
  3. Revisa los catálogos admitidos para verificar los requisitos de ubicación externa y las configuraciones admitidas.
  4. Comprende cómo usar los Secrets regionales de Secret Manager. Esto es necesario para configurar un Lakehouse sin bordes con Snowflake usando la autenticación basada en secretos. Puedes elegir entre la autenticación basada en secretos con un token de acceso personal (PAT) o usar la federación de identidades para cargas de trabajo (WIF).
  5. Si usas la autenticación basada en secretos, genera un token de acceso personal (PAT) en tu entorno de Snowflake Horizon que tenga acceso de lectura al catálogo de destino. Este proceso está fuera del alcance de esta documentación.
  6. Si usas la federación de identidades para cargas de trabajo, asegúrate de tener acceso a la IU de la cuenta de Snowflake con privilegios de ACCOUNTADMIN para aprovisionar usuarios de servicio.
  7. Opcional: Si planeas enrutar consultas a través de una interconexión privada entre tu VPC Google Cloud y la VPC de tu proveedor de nube remoto (por ejemplo, AWS), asegúrate de tener una cuenta activa con tu proveedor remoto, aprovisiona una interconexión entre nubes dedicada o una interconexión entre nubes de socio, establece sesiones BGP con tu Cloud Router y verifica que tengas los permisos requeridos de Identity and Access Management (IAM) en ambos entornos de nube.
  8. Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the BigLake, Secret Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

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

  12. Enable the BigLake, Secret Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

Roles obligatorios

Para obtener los permisos que necesitas para configurar un Lakehouse sin bordes, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:

  • Administrar catálogos de Lakehouse: Administrador de BigLake (roles/biglake.admin)
  • Administrar secretos: Administrador de Secret Manager (roles/secretmanager.admin)
  • Enruta el tráfico a través de la interconexión privada: Administrador de red de Compute (roles/compute.networkAdmin), Visualizador del Directorio de servicios (roles/servicedirectory.viewer) y Servicio autorizado de PSC del Directorio de servicios (roles/servicedirectory.pscAuthorizedService)

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Detalles del catálogo admitidos

En esta guía, se proporcionan instrucciones para configurar un Lakehouse sin bordes con un catálogo de Snowflake (Snowflake Horizon) en Amazon Web Services (AWS) y Google Cloud. Para obtener información detallada sobre los requisitos de ubicación externa y las configuraciones compatibles, consulta Catálogos compatibles.

Limitaciones y consideraciones

En esta sección, se enumeran las limitaciones y consideraciones para usar Lakehouse sin bordes.

  • Proveedores de servicios en la nube admitidos: Se admite el uso de una interconexión privada con tu Lakehouse sin bordes con los siguientes proveedores de servicios en la nube remotos: Amazon Web Services (AWS). Puedes usar una interconexión dedicada de Cross-Cloud Interconnect o una interconexión de socio de Cross-Cloud Interconnect.
  • Enrutamiento de red: Si no se configura una interconexión privada (como CCI dedicada o CCI de socio), las búsquedas se enrutan a través de Internet pública. Esto puede generar tarifas de salida más altas de tu proveedor de nube remoto y un rendimiento menos predecible.
  • Actualidad de los datos: La marca --refresh-interval del catálogo federado determina la frecuencia con la que se sincronizan los metadatos. Un intervalo más corto proporciona datos más recientes, pero puede generar costos adicionales de la API del proveedor del catálogo remoto.
  • Informes de métricas de Iceberg: Los Informes de métricas de Iceberg no están disponibles para los catálogos federados. Establece la propiedad rest-metrics-reporting-enabled en false en tu cliente de Iceberg cuando accedas a un catálogo federado.

Flujo de trabajo general

Para configurar y usar Lakehouse sin límites, sigue estos pasos generales:

  • Configura Cross-Cloud Interconnect (opcional): Configura una conexión privada entre tu VPC Google Cloud y tu proveedor de nube remoto.
  • Configura la federación: Configura uno de los siguientes métodos de autenticación y crea un catálogo federado en Lakehouse.
    • Autenticación basada en secretos (PAT): Crea un secreto en Secret Manager con las credenciales de tu catálogo remoto. Luego, crea un catálogo federado en Lakehouse y otorga acceso a la cuenta de servicio del catálogo al secreto.
    • Federación de identidades para cargas de trabajo (WIF): Crea un catálogo federado en Lakehouse especificando el rol de Snowflake requerido. Luego, vincula el ID de la cuenta de servicio del catálogo a un usuario de servicio en Snowflake. El usuario del servicio de Snowflake debe tener permisos de uso en el catálogo remoto de Snowflake.
  • Verifica la conexión: Verifica que Lakehouse pueda conectarse correctamente a tu catálogo remoto.
  • Consulta datos: Ejecuta consultas en tus datos federados con BigQuery o Managed Service para Apache Spark. Para obtener más información, consulta Cómo usar Lakehouse sin bordes.
  • Configura los permisos: Usa IAM para administrar quién puede ver y consultar los datos federados.

Configura Cross‑Cloud Interconnect (opcional)

De forma predeterminada, las consultas a tu catálogo remoto viajan a través de Internet pública. Para mejorar la seguridad y el cumplimiento, proporcionar un rendimiento predecible y reducir los costos de transferencia de datos, usa una interconexión privada. Esto establece una conexión de red privada y dedicada entre tu Google Cloudnube privada virtual (VPC) y la red de tu proveedor de nube remoto (por ejemplo, AWS).

Puedes aprovisionar y configurar cualquiera de las siguientes opciones de interconexión privada entre tu VPC de Google Cloud y la VPC de tu proveedor de nube remoto (por ejemplo, AWS):

Establece sesiones de BGP entre tu Cloud Router en Google Cloud y la VPC de tu proveedor de servicios en la nube remoto para garantizar el intercambio de rutas.

Para habilitar las consultas privadas, debes configurar una ruta desde el Lakehouse hasta tu bucket de almacenamiento remoto (por ejemplo, un bucket de Amazon S3 de AWS) a través de tu interconexión privada. Existen dos flujos arquitectónicos que puedes seguir para configurar este enrutamiento:

  • Enrutamiento del balanceador de cargas de red del proxy interno regional: Este flujo usa un balanceador de cargas de red del proxy interno regionalGoogle Cloud para distribuir las solicitudes entre los grupos de extremos de red (NEG) de conectividad híbrida que apuntan a varias interfaces de red elásticas (ENI) de AWS. Este flujo es esencial para el balanceo de cargas, la escalabilidad y la alta disponibilidad. Es obligatorio para la CCI de socio y se recomienda para la CCI dedicada para el balanceo de cargas, la escalabilidad y la alta disponibilidad.
  • Enrutamiento directo de extremos: Este flujo conecta el Directorio de servicios directamente a una sola dirección IP del extremo de VPC de interfaz de AWS. Este flujo solo funciona para la CCI dedicada y no se admite para la CCI del socio.

Selecciona el flujo de configuración que coincida con tus requisitos de arquitectura:

Balanceador de cargas de red del proxy interno regional

Para configurar un balanceador de cargas de red de proxy interno regional para distribuir solicitudes en varias ENI de AWS para lograr alta disponibilidad y balanceo de cargas, sigue estos pasos:

Configura las redes de AWS

Primero, crea un extremo de interfaz de VPC de Amazon S3 (AWS PrivateLink):

  1. En la consola de VPC de AWS, crea un extremo de interfaz para Amazon S3.
  2. Para el nombre del servicio, especifica com.amazonaws.AWS_REGION.s3.
  3. Selecciona la VPC y las subredes que están conectadas a tu Google Cloud VPC a través de Direct Connect.
  4. Vincula grupos de seguridad al extremo para controlar el acceso entrante.
  5. Esto aprovisiona interfaces de red elásticas (ENI) en cada subred seleccionada. Anota las direcciones IP privadas de estas ENI.

A continuación, configura los grupos de seguridad:

  • Asegúrate de que los grupos de seguridad adjuntos a las ENI del extremo de Amazon S3 permitan el tráfico de TCP entrante en el puerto 443 desde tu VPC de Google Cloud . Esto debe incluir el rango de CIDR de tu subred de solo proxyGoogle Cloud para permitir las verificaciones de estado y el tráfico reenviado.

Configurar Google Cloud redes

Para simplificar la configuración, ejecuta los siguientes comandos para configurar el balanceador de cargas interno. Para obtener más detalles o configuraciones avanzadas, consulta Configura un balanceador de cargas de red de proxy interno regional para extremos híbridos.

gcloud compute networks subnets create PROXY_SUBNET_NAME \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=REGION \
    --network=VPC_NETWORK \
    --range=PROXY_SUBNET_RANGE

Reemplaza lo siguiente:

  • PROXY_SUBNET_NAME: Es un nombre para la subred de solo proxy.
  • PROXY_SUBNET_RANGE: Un rango CIDR sin usar dentro de tu red de VPC (por ejemplo, 10.129.0.0/23).
  1. Crea una verificación de estado regional:

    gcloud compute health-checks create tcp HEALTH_CHECK_NAME \
        --region=REGION \
        --port=443

    Reemplaza lo siguiente:

    • HEALTH_CHECK_NAME: Es un nombre para la verificación de estado.
    • REGION: La Google Cloud región (por ejemplo, us-east4).
  2. Crea grupos de extremos de red (NEG) de conectividad híbrida y agrega extremos:

    Crea un NEG híbrido (NON_GCP_PRIVATE_IP_PORT) para cada zona:

    gcloud compute network-endpoint-groups create NEG_NAME \
        --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
        --zone=ZONE \
        --network=VPC_NETWORK

    Agrega la dirección IP privada de tu ENI de AWS al NEG híbrido correspondiente:

    gcloud compute network-endpoint-groups update NEG_NAME \
        --zone=ZONE \
        --add-endpoint="ip=AWS_S3_IP,port=443"

    Reemplaza lo siguiente:

    • NEG_NAME: Es un nombre para el NEG híbrido.
    • ZONE: Es la zona Google Cloud (por ejemplo, us-east4-a). Esta zona debe residir dentro de la región de tu adjunto de VLAN de Cross‑Cloud Interconnect.
    • VPC_NETWORK: Es el nombre de tu red de VPC.
    • AWS_S3_IP: Es la dirección IP privada del extremo de VPC de Amazon S3 de AWS (ENI) en esa zona.

    Repite estos comandos para crear NEG y agregar extremos para otras zonas si tus ENI de AWS se distribuyen en varias zonas.

  3. Crea y configura el servicio de backend:

    Crea un servicio de backend regional con balanceo de cargas administrado interno:

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --protocol=TCP \
        --region=REGION \
        --health-checks=HEALTH_CHECK_NAME \
        --health-checks-region=REGION

    Agrega tus NEG híbridos al servicio de backend:

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --region=REGION \
        --network-endpoint-group=NEG_NAME \
        --network-endpoint-group-zone=ZONE \
        --balancing-mode=CONNECTION \
        --max-connections=MAX_CONNECTIONS

    Reemplaza lo siguiente:

    • BACKEND_SERVICE_NAME: Es un nombre para el servicio de backend.
    • NEG_NAME: Es el nombre del NEG híbrido que creaste en el paso anterior.
    • ZONE: La Google Cloud zona (por ejemplo, us-east4-a).
    • MAX_CONNECTIONS: Es la cantidad máxima de conexiones simultáneas que debe controlar el backend (por ejemplo, 100).

    Repite el comando add-backend para cada NEG híbrido que creaste.

  4. Configura el frontend del balanceador de cargas:

    Crea un proxy TCP de destino:

    gcloud compute target-tcp-proxies create TARGET_PROXY_NAME \
        --backend-service=BACKEND_SERVICE_NAME \
        --region=REGION

    Crea una regla de reenvío para enrutar el tráfico al proxy de destino:

    gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=VPC_NETWORK \
        --subnet=VPC_SUBNET \
        --ports=443 \
        --region=REGION \
        --target-tcp-proxy=TARGET_PROXY_NAME \
        --target-tcp-proxy-region=REGION \
        --allow-global-access

    Reemplaza lo siguiente:

    • TARGET_PROXY_NAME: Es un nombre para el proxy de destino.
    • FORWARDING_RULE_NAME: un nombre para la regla de reenvío.
    • VPC_SUBNET: Es el nombre de tu subred de VPC.

Después de crear la regla de reenvío para el balanceador de cargas, toma nota de la dirección IP interna que se le asignó. Este es tu ILB_IP_ADDRESS.

Configura el Directorio de servicios

Registra la dirección IP del ILB en Directorio de servicios para que Lakehouse pueda detectarla.

  1. Crea un espacio de nombres para tu nube remota:

    gcloud service-directory namespaces create NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Reemplaza lo siguiente:

    • NAMESPACE: Es un identificador único para tu espacio de nombres.
    • PROJECT_ID: Es el ID del proyecto de Google Cloud .
    • REGION: La Google Cloud región Por ejemplo: us-east4. Debe ser la misma región que la del catálogo federado.
  2. Crea un servicio en el espacio de nombres del Directorio de servicios:

    gcloud service-directory services create SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Reemplaza lo siguiente:

    • SERVICE_NAME: Es un identificador único para tu servicio.
  3. Crea un extremo para el ILB en el servicio:

    gcloud service-directory endpoints create ENDPOINT_NAME \
        --project=PROJECT_ID \
        --namespace=NAMESPACE \
        --service=SERVICE_NAME \
        --location=REGION \
        --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK \
        --address=ILB_IP_ADDRESS \
        --port=443

    Reemplaza lo siguiente:

    • ENDPOINT_NAME: Es un identificador único para tu extremo.
    • PROJECT_NUMBER: Es el número de tu proyecto de Google Cloud. Usa el número de tu proyecto en la marca --network.
    • ILB_IP_ADDRESS: Es la dirección IP interna de tu regla de reenvío del ILB.

Extremo directo

Para configurar el Directorio de servicios de modo que enrute el tráfico directamente a una sola dirección IP del extremo de VPC de la interfaz de AWS, sigue estos pasos:

  1. Crea un extremo de VPC de interfaz para Amazon S3 dentro de tu VPC de AWS. Anota la dirección IP y el puerto de este extremo.
  2. Crea un espacio de nombres para tu nube remota:

    gcloud service-directory namespaces create NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Reemplaza lo siguiente:

    • NAMESPACE: Es un identificador único para tu espacio de nombres.
    • PROJECT_ID: Es el ID del proyecto de Google Cloud .
    • REGION: La Google Cloud región Por ejemplo: us-east4. Debe ser la misma región que la del catálogo federado.
  3. Crea un servicio en el espacio de nombres del Directorio de servicios:

    gcloud service-directory services create SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Reemplaza lo siguiente:

    • SERVICE_NAME: Es un identificador único para tu servicio.
  4. Crea un extremo en el servicio que contenga la información de enrutamiento para tu extremo de VPC de interfaz de Amazon S3:

    gcloud service-directory endpoints create ENDPOINT_NAME \
        --service=SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION \
        --address=S3_VPCE_IP_ADDRESS \
        --port=S3_VPCE_PORT \
        --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK

    Reemplaza lo siguiente:

    • ENDPOINT_NAME: Es un identificador único para tu extremo.
    • S3_VPCE_IP_ADDRESS: La dirección IP de tu extremo de VPC de la interfaz de Amazon S3. Por ejemplo, 10.0.1.45
    • S3_VPCE_PORT: Es el número de puerto de tu extremo de VPC de la interfaz de Amazon S3. Por ejemplo, 443
    • PROJECT_NUMBER: Es el número de tu proyecto de Google Cloud. Usa el número de tu proyecto en la marca --network.
    • VPC_NETWORK: Es el nombre de la red de VPC Google Cloud asociada con tu interconexión privada.

Configura la federación

Para consultar tus datos, debes configurar un catálogo federado de Lakehouse que se conecte a tu catálogo remoto de Snowflake.

Configura la autenticación

La federación requiere credenciales o configuración de roles para acceder al catálogo remoto de Snowflake. Elige uno de los siguientes métodos.

Basada en secretos (PAT)

Para la autenticación basada en secretos (PAT), debes usar un token de acceso personal (PAT), que es un token de larga duración generado por Snowflake, junto con el rol específico de Snowflake que se requiere para la sesión.

Crea un secreto en Secret Manager regional para almacenar las credenciales:

  1. Crea un archivo JSON llamado credentials.json con tu carga útil:

    {
      "client_secret": "SNOWFLAKE_PAT_TOKEN",
      "scope": "session:role:SNOWFLAKE_ROLE"
    }

    Reemplaza lo siguiente:

    • SNOWFLAKE_PAT_TOKEN: Tu token de acceso personal (PAT) de Snowflake.
    • SNOWFLAKE_ROLE: Es el rol específico de Snowflake que se requiere para la sesión. Por ejemplo, ICEBERG_VIEW
  2. Configura el extremo regional para Secret Manager:

    De forma predeterminada, Secret Manager usa un extremo global. Sin embargo, Lakehouse sin fronteras requiere que tus secretos se almacenen en la misma región que tu catálogo de Lakehouse. Para interactuar con Secrets regionales usando la CLI de gcloud, debes anular el extremo de API predeterminado para tu sesión o perfil actual. Para evitar problemas de conectividad, tu secreto y tu catálogo deben crearse en la misma región.

    gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/

    Reemplaza lo siguiente:

    • REGION: Es la región de Google Cloud en la que se almacena tu secreto de Secret Manager. Por ejemplo, us-east4. Para evitar problemas de conectividad, tu secreto y tu catálogo deben crearse en la misma región.
  3. Sube la carga útil a Secret Manager:

    gcloud secrets create SNOWFLAKE_SECRET_NAME \
      --location="REGION" \
      --project="PROJECT_ID" \
      --data-file=credentials.json

    Reemplaza lo siguiente:

    • SNOWFLAKE_SECRET_NAME: Es un nombre para tu secreto de Snowflake.
    • PROJECT_ID: Es el ID del proyecto de Google Cloud .

Federación de identidades para cargas de trabajo

La federación de identidades para cargas de trabajo (WIF) evita el uso de secretos de larga duración vinculando una cuenta de servicio de Lakehouse directamente a un usuario de servicio de Snowflake. No se requiere ninguna configuración previa en Secret Manager antes de crear el catálogo. Continúa con la creación del catálogo federado.

Crea un catálogo federado

Crea el catálogo federado con la consola de Google Cloud , la CLI de gcloud o la API de REST.

Console

Para crear un catálogo federado, haz lo siguiente:

  1. En la consola de Google Cloud , ve a Lakehouse.

    Ir a Lakehouse

  2. Haz clic en Crear catálogo.

  3. Haz clic en Catálogo federado.

    Aparecerán los detalles de la Configuración del catálogo.

  4. En Fuente de catálogo federado, selecciona Snowflake Horizon.

  5. En Ubicación de los datos, selecciona la región de Lakehouse en la que deseas crear el catálogo federado. Por ejemplo, us-east4 Para minimizar la latencia (incluso a través de Internet pública), haz lo siguiente cuando selecciones una región:

    • Si tu catálogo de Snowflake está en AWS, selecciona la región deGoogle Cloud más cercana a tu región de AWS.
  6. Haz clic en Continuar.

    Aparecerán los detalles de Detalles de la conexión.

  7. En la sección Detalles del catálogo remoto, en el campo Identificador de cuenta de Snowflake, ingresa tu identificador de cuenta de Snowflake. Por ejemplo: my_org-my_account.

  8. En el campo Almacén de Snowflake, ingresa el nombre de tu almacén de Snowflake.

  9. Configura los detalles de autenticación según el método que elijas:

    • Basado en secretos (PAT): En Secreto, ingresa el nombre de tu secreto. Usa el siguiente formato: projects/PROJECT_ID/locations/REGION/secrets/SNOWFLAKE_SECRET_NAME.
    • Federación de identidades para cargas de trabajo: En el campo Rol de Snowflake, ingresa tu rol de Snowflake. Por ejemplo: ICEBERG_VIEW.
  10. Opcional: En el campo Nombre del directorio de servicios, ingresa la ruta de acceso a tu extremo o servicio del Directorio de servicios. Esto solo es necesario si configuras una interconexión privada (Cross‑Cloud Interconnect).

  11. Haz clic en Crear.

gcloud CLI

Basada en secretos (PAT)

Internet pública (sin CCI)

Si no configuras la CCI, la conexión viajará de forma segura a través de Internet pública.

gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --primary-location="REGION" \
    --catalog-type="federated" \
    --federated-catalog-type="snowflake" \
    --secret-name="projects/PROJECT_ID/locations/REGION/secrets/SNOWFLAKE_SECRET_NAME" \
    --snowflake-account-identifier="SNOWFLAKE_ACCOUNT_IDENTIFIER" \
    --snowflake-warehouse="SNOWFLAKE_WAREHOUSE" \
    --refresh-interval="REFRESH_INTERVAL" \
    --namespace-filters="NAMESPACE_FILTERS"

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto de Google Cloud .
  • REGION: Es la región del Lakehouse en la que se crea el catálogo federado. Por ejemplo, us-east4 Para minimizar la latencia, selecciona la región de Google Cloud más cercana a tu región de Snowflake.
  • SNOWFLAKE_SECRET_NAME: Es el nombre de tu secreto de Snowflake.
  • SNOWFLAKE_ACCOUNT_IDENTIFIER: Es el identificador de tu cuenta de Snowflake (por ejemplo, my_org-my_account).
  • SNOWFLAKE_WAREHOUSE: Es el nombre del catálogo de Snowflake con el que deseas federar.
  • REFRESH_INTERVAL: Opcional: Especifica con qué frecuencia se actualizará la información del catálogo. Establece este valor como una duración, por ejemplo, 330s o 5m30s. Los intervalos más cortos actualizan los datos con mayor frecuencia, pero pueden costar más en llamadas a la API. Los intervalos más largos pueden costar menos, pero es posible que los datos consultados no reflejen tu conjunto de datos más actual. Si se omite o si el valor se establece en 0s, no se iniciará la actualización de metadatos en segundo plano. Permanecerá inhabilitada hasta que el intervalo de actualización se actualice a un valor positivo.
  • NAMESPACE_FILTERS: Opcional: Es una lista separada por comas de los espacios de nombres que se federarán. Por ejemplo, ns1,ns2 Si se omite, se incluirán todos los espacios de nombres.

Propiedad del cliente (CCI)

Si configuraste una interconexión privada (como CCI dedicada o CCI de socio), proporciona la referencia del extremo del Directorio de servicios para que Lakehouse enrute el tráfico de forma privada.

gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --primary-location="REGION" \
    --catalog-type="federated" \
    --federated-catalog-type="snowflake" \
    --secret-name="projects/PROJECT_ID/locations/REGION/secrets/SNOWFLAKE_SECRET_NAME" \
    --snowflake-account-identifier="SNOWFLAKE_ACCOUNT_IDENTIFIER" \
    --snowflake-warehouse="SNOWFLAKE_WAREHOUSE" \
    --refresh-interval="REFRESH_INTERVAL" \
    --namespace-filters="NAMESPACE_FILTERS" \
    --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME/endpoints/ENDPOINT_NAME"

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto de Google Cloud .
  • REGION: Es la región del Lakehouse en la que se crea el catálogo federado. Nota: Debe ser la misma región que el espacio de nombres del Directorio de servicios y el secreto regional.
  • SNOWFLAKE_SECRET_NAME: Es el nombre de tu secreto de Snowflake.
  • SNOWFLAKE_ACCOUNT_IDENTIFIER: Es el identificador de tu cuenta de Snowflake.
  • SNOWFLAKE_WAREHOUSE: Es el nombre del catálogo de Snowflake con el que deseas federar.
  • REFRESH_INTERVAL: Opcional: Especifica con qué frecuencia se actualizará la información del catálogo.
  • NAMESPACE_FILTERS: Opcional: Es una lista separada por comas de los espacios de nombres que se federarán.
  • NAMESPACE: Es el espacio de nombres del Directorio de servicios que creaste durante la configuración de la interconexión privada.
  • SERVICE_NAME: Es el nombre del servicio de Directorio de servicios que creaste durante la configuración de Interconnect privado.
  • ENDPOINT_NAME: Es el nombre del extremo del Directorio de servicios que creaste durante la configuración de la interconexión privada.

Federación de identidades para cargas de trabajo

Internet pública (sin CCI)

gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --primary-location="REGION" \
    --catalog-type="federated" \
    --federated-catalog-type="snowflake" \
    --snowflake-account-identifier="SNOWFLAKE_ACCOUNT_IDENTIFIER" \
    --snowflake-warehouse="SNOWFLAKE_WAREHOUSE" \
    --snowflake-role="SNOWFLAKE_ROLE" \
    --refresh-interval="REFRESH_INTERVAL" \
    --namespace-filters="NAMESPACE_FILTERS"

Propiedad del cliente (CCI)

Si configuraste una interconexión privada, proporciona la referencia del servicio de Directorio de servicios para que Lakehouse enrute el tráfico de forma privada.

gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --primary-location="REGION" \
    --catalog-type="federated" \
    --federated-catalog-type="snowflake" \
    --snowflake-account-identifier="SNOWFLAKE_ACCOUNT_IDENTIFIER" \
    --snowflake-warehouse="SNOWFLAKE_WAREHOUSE" \
    --snowflake-role="SNOWFLAKE_ROLE" \
    --refresh-interval="REFRESH_INTERVAL" \
    --namespace-filters="NAMESPACE_FILTERS" \
    --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME/endpoints/ENDPOINT_NAME"

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto de Google Cloud .
  • SNOWFLAKE_ACCOUNT_IDENTIFIER: Es el identificador de tu cuenta de Snowflake.
  • SNOWFLAKE_WAREHOUSE: Es el nombre del catálogo de Snowflake con el que deseas federar.
  • SNOWFLAKE_ROLE: Es el rol específico de Snowflake que se requiere para la sesión. Por ejemplo, ICEBERG_VIEW
  • FEDERATED_CATALOG_NAME: Es el nombre del catálogo federado de Lakehouse.
  • REGION: Es la región del Lakehouse en la que se crea el catálogo federado.
  • REFRESH_INTERVAL: Opcional: Especifica con qué frecuencia se actualizará la información del catálogo. Por ejemplo, 300s
  • NAMESPACE_FILTERS: Opcional: Es una lista separada por comas de los espacios de nombres que se federarán. Por ejemplo, ns1,ns2 Si se omite, se incluirán todos los espacios de nombres.
  • NAMESPACE: Es el espacio de nombres de tu servicio de Directorio de servicios.
  • SERVICE_NAME: Es el nombre de tu servicio de Directorio de servicios.
  • ENDPOINT_NAME: Es el nombre de tu extremo del Directorio de servicios.

API de REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -H "x-goog-user-project: PROJECT_ID" \
  -d '{
    "catalog-type": "CATALOG_TYPE_FEDERATED",
    "federated-catalog-options": {
      "snowflake-catalog-info": {
        "account-identifier": "SNOWFLAKE_ACCOUNT_IDENTIFIER",
        "warehouse": "SNOWFLAKE_WAREHOUSE",
        "snowflake-role": "SNOWFLAKE_ROLE"
      },
      "refresh-options": {
        "refresh-schedule": {
          "refresh-interval": "REFRESH_INTERVAL"
        }
      }
    }
}' \
  "https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs?iceberg_catalog_id=FEDERATED_CATALOG_NAME&primary_location=REGION"

Completa la configuración de la autenticación

Completa el proceso de autenticación con el tipo de autenticación que elegiste.

Basada en secretos (PAT)

Cuando se crea el catálogo, Lakehouse aprovisiona una cuenta de servicio única para él (se muestra como biglake-service-account en la descripción del recurso).

Debes otorgar permiso a esta cuenta de servicio para acceder al secreto que creaste anteriormente. Ten en cuenta que la propagación de las políticas de IAM puede tardar unos minutos.

Otorga permiso a la cuenta de servicio del catálogo para acceder al secreto:

gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/
gcloud secrets add-iam-policy-binding SNOWFLAKE_SECRET_NAME \
  --project="PROJECT_ID" \
  --location="REGION" \
  --member="serviceAccount:$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
      --project="PROJECT_ID" \
      --location="REGION" \
      --format='value(biglake-service-account)')" \
  --role="roles/secretmanager.secretAccessor"

Para verificar que la cuenta de servicio del catálogo federado tenga acceso al secreto, ejecuta el siguiente comando:

gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/
gcloud secrets get-iam-policy SNOWFLAKE_SECRET_NAME \
    --project="PROJECT_ID" \
    --location="REGION"

En el resultado, verifica que la cuenta de servicio biglake-service-account tenga asignado el rol roles/secretmanager.secretAccessor.

Federación de identidades para cargas de trabajo

Después de crear el catálogo, debes vincular la identidad de su cuenta de servicio a un usuario de servicio en Snowflake.

  1. Extrae el ID de la cuenta de servicio de Lakehouse (sujeto) de los detalles del catálogo.

    Puedes obtenerlo de la respuesta JSON del comando de creación (campo biglake-service-account-id).

    Como alternativa, puedes ejecutar el comando describe en el catálogo para obtener el valor:

    gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
      --project="PROJECT_ID"

    Busca biglake-service-account-id en el resultado.

  2. Accede a tu instancia de administración de Snowflake y ejecuta la siguiente secuencia de comandos para establecer la relación de confianza con la identidad del servicio de Lakehouse:

    USE ROLE ACCOUNTADMIN;
    
    CREATE USER SNOWFLAKE_SERVICE_USER
      TYPE = SERVICE
      WORKLOAD_IDENTITY = (
        TYPE = GCP
        SUBJECT = 'LAKEHOUSE_SERVICE_ACCOUNT_ID'
      )
      DEFAULT_ROLE = SNOWFLAKE_ROLE
      COMMENT = 'Service user for Lakehouse federation over WIF';
    
    -- Also explicitly GRANT permissions to the role
    GRANT ROLE SNOWFLAKE_ROLE TO USER SNOWFLAKE_SERVICE_USER;

    Reemplaza lo siguiente:

    • SNOWFLAKE_SERVICE_USER: Es un nombre para el nuevo usuario de servicio en Snowflake.
    • LAKEHOUSE_SERVICE_ACCOUNT_ID: Es el ID de la cuenta de servicio que se extrajo en el paso anterior.
    • SNOWFLAKE_ROLE: Es el rol de Snowflake (debe coincidir con el rol especificado durante la creación del catálogo).

Verifica la conexión

Verifica que el ciclo de actualización de metadatos en segundo plano del catálogo se haya completado correctamente y que los espacios de nombres estén sincronizados.

gcloud CLI

  1. Verifica que el estado de actualización indique que se realizó correctamente:

    gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
      --project="PROJECT_ID" \
      --location="REGION"
  2. Confirma que los esquemas de la base de datos remota aparezcan como espacios de nombres sincronizados:

    gcloud alpha biglake iceberg namespaces list \
      --catalog="FEDERATED_CATALOG_NAME" \
      --project="PROJECT_ID" \
      --location="REGION"

API de REST

  1. Verifica el estado de sincronización de la federación del catálogo:

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -H "x-goog-user-project: PROJECT_ID" \
      "https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME"
  2. Enumera los espacios de nombres sincronizados:

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -H "x-goog-user-project: PROJECT_ID" \
      "https://biglake.googleapis.com/iceberg/v1/restcatalog/v1/projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME/namespaces"
  3. Enumera las tablas en un espacio de nombres sincronizado:

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -H "x-goog-user-project: PROJECT_ID" \
      "https://biglake.googleapis.com/iceberg/v1/restcatalog/v1/projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME/namespaces/NAMESPACE_NAME/tables"

¿Qué sigue?