En este documento, se describe cómo configurar un Lakehouse entre nubes para Apache Iceberg y consultar datos de un catálogo de AWS Glue directamente en Google Cloud. Esta capacidad unifica tu análisis de datos, ya que integra tus fuentes de datos externas con tu entorno de Google Cloud existente.
Luego, puedes usar Lakehouse para administrar el acceso a tus datos federados.
Antes de comenzar
- Revisa la descripción general de Lakehouse para comprender cómo Lakehouse administra el acceso a los datos.
- Lee Acerca de Lakehouse entre nubes para comprender cómo funciona.
- Revisa los catálogos compatibles para verificar los requisitos de formato de la tabla y las configuraciones admitidas.
- Asegúrate de que tu administrador de AWS tenga permisos para crear roles de Identity and Access Management (IAM) y configurar políticas de permisos.
- Opcional: Si planeas enrutar consultas a través de una interconexión privada entre tu VPC de 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 o una interconexión de socio, establece sesiones BGP con tu Cloud Router y verifica que tengas los permisos de IAM necesarios en ambos entornos de nube.
- 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.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Roles obligatorios
Para obtener los permisos que necesitas para configurar Lakehouse entre nubes, 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) -
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.
Limitaciones y consideraciones
En esta sección, se enumeran las limitaciones y consideraciones para usar Lakehouse entre nubes.
- Proveedores de servicios en la nube admitidos: El uso de una interconexión privada con tu Lakehouse entre nubes se admite con los siguientes proveedores de servicios en la nube remotos: Amazon Web Services (AWS). Puedes usar Cross-Cloud Interconnect o Partner Interconnect.
- Enrutamiento de red: Si no se configura una interconexión privada (como una CCI propiedad del cliente o una interconexión de socio), las consultas 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-intervaldel 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 de catálogos 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-enabledenfalseen tu cliente de Iceberg cuando accedas a un catálogo federado.
Flujo de trabajo general
Para configurar y usar Lakehouse en varias nubes, 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: Para configurar la autenticación, crea un rol de IAM con una política de confianza de marcador de posición con tu proveedor remoto. Luego, crea un catálogo federado en Lakehouse y actualiza la política de confianza.
- Verifica la conexión: Asegúrate de 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 un Lakehouse entre nubes.
- Configura 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):
- Cross-Cloud Interconnect: Es una conexión física dedicada.
- Interconexión de socio: Es una conexión a través de un proveedor de servicios admitido.
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. Hay 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 interconexión de socio y se recomienda para Cross‑Cloud Interconnect 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 la interfaz de AWS. Este flujo solo funciona para Cross‑Cloud Interconnect y no es compatible con interconexión de 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):
- En la consola de VPC de AWS, crea un extremo de interfaz para Amazon S3.
- Para el nombre del servicio, especifica
com.amazonaws.<var>AWS_REGION</var>.s3. - Selecciona la VPC y las subredes que están conectadas a tu Google Cloud VPC a través de Direct Connect.
- Vincula grupos de seguridad al extremo para controlar el acceso entrante.
- 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
443desde los rangos de IP pertinentes de tu VPC de Google Cloud .
Configurar Google Cloud redes
Sigue las instrucciones para configurar un balanceador de cargas de red de proxy interno regional para extremos híbridos.
Cuando sigas las instrucciones, asegúrate de hacer lo siguiente:
- Crea NEG de conectividad híbrida (
NON_GCP_PRIVATE_IP_PORT) y agrega las direcciones IP privadas de las ENI de AWS que creaste anteriormente. - Usa el puerto TCP
443para los NEG, la verificación de estado y la regla de reenvío. - Configura el balanceador de cargas en la misma región Google Cloud que tu catálogo federado.
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.
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.
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.
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:
- 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.
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.
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.
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.45S3_VPCE_PORT: Es el número de puerto de tu extremo de VPC de la interfaz de Amazon S3. Por ejemplo,443PROJECT_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 entre nubes
Para consultar tus datos, configura un catálogo federado de Lakehouse que se conecte a tu catálogo remoto de AWS.
Crea el rol de IAM de AWS con una política de confianza de marcador de posición
Lakehouse aprovisiona un ID de cuenta de servicio de Google después de la creación del catálogo. Crea el rol de IAM de AWS con una política de confianza de marcador de posición.
Crea un archivo llamado
trust_policy.json:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:aud": [ "PLACEHOLDER_VALUE" ], "accounts.google.com:sub": [ "PLACEHOLDER_VALUE" ] } } } ] }
Ejecuta el comando de la CLI de AWS para crear el rol con la política de confianza del marcador de posición. Recomendamos establecer la duración máxima de la sesión en 12 horas (
43200segundos) para evitar que venzan las credenciales durante los trabajos de larga duración:aws iam create-role \ --role-name AWS_ROLE_NAME \ --assume-role-policy-document file://trust_policy.json \ --max-session-duration 43200
Reemplaza lo siguiente:
AWS_ROLE_NAME: Es el nombre de tu rol de IAM de AWS. Por ejemplo,biglake_glue_federation_role.
Cómo adjuntar una política de permisos
Adjunta una política de permisos a tu rol de IAM que permita que Lakehouse acceda al catálogo de datos de Glue y a los buckets de S3 de la región de AWS. Esta política también otorga acceso a los buckets de tablas de S3 si usas la integración de tablas de S3 de AWS Lake Formation. Si actualizaste los permisos de datos predeterminados de AWS Glue al modelo de AWS Lake Formation, es posible que debas otorgar permisos adicionales en Lake Formation.
Crea un archivo llamado
permissions_policy.jsoncon la siguiente configuración de política.{ "Version": "2012-10-17", "Statement": [ { "Sid": "GlueRead", "Effect": "Allow", "Action": [ "glue:GetCatalog", "glue:GetDatabase", "glue:GetDatabases", "glue:GetTable", "glue:GetTables" ], "Resource": "arn:aws:glue:AWS_REGION:AWS_ACCOUNT_ID:*" }, { "Sid": "S3Read", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::*" ] }, { "Sid": "S3TablesRead", "Effect": "Allow", "Action": [ "s3tables:GetTableBucket", "s3tables:ListNamespaces", "s3tables:GetNamespace", "s3tables:ListTables", "s3tables:GetTable", "s3tables:GetTableMetadataLocation", "s3tables:GetTableData" ], "Resource": [ "arn:aws:s3tables:AWS_REGION:AWS_ACCOUNT_ID:*" ] } ] }
Adjunta esta política de permisos a tu rol de IAM:
aws iam put-role-policy \ --role-name AWS_ROLE_NAME \ --policy-name AWS_POLICY_NAME \ --policy-document file://permissions_policy.json
Reemplaza lo siguiente:
AWS_ROLE_NAME: Es el nombre de tu rol de IAM de AWS. Por ejemplo,biglake_glue_federation_role.AWS_POLICY_NAME: Es un nombre para tu política de permisos. Por ejemplo,biglake_glue_permissionsAWS_REGION: Es la región de AWS en la que residen tu catálogo de Glue o tus tablas de S3. Por ejemplo,us-east-1AWS_ACCOUNT_ID: Es tu cadena de ID de cuenta de AWS de 12 dígitos. Por ejemplo,123456789012
Crea un catálogo federado
Establece el catálogo federado en Google Cloud con la CLI de gcloudo la API de REST.
Para evitar errores prematuros de sincronización de metadatos mientras se propagan las relaciones de confianza de AWS, inicializa el catálogo sin especificar un programa de actualización (que, de forma predeterminada, es 0s).
Google Cloud CLI
Internet pública (sin CCI)
Si no configuras la CCI, la conexión viajará de forma segura a través de la Internet pública.
gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --primary-location="REGION" \ --catalog-type="federated" \ --federated-catalog-type="glue" \ --glue-warehouse="GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE" \ --glue-aws-region="AWS_REGION" \ --glue-aws-role-arn="arn:aws:iam::AWS_ACCOUNT_ID:role/AWS_ROLE_NAME"
Propiedad del cliente (CCI)
Si configuraste una interconexión privada (como CCI dedicada o interconexión de socio), proporciona la referencia del servicio de Directorio de servicios para asegurarte de 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="glue" \ --glue-warehouse="GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE" \ --glue-aws-region="AWS_REGION" \ --glue-aws-role-arn="arn:aws:iam::AWS_ACCOUNT_ID:role/AWS_ROLE_NAME" \ --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME"
REST
curl -s -X POST \ -H "x-goog-user-project: PROJECT_ID" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs?iceberg_catalog_id=FEDERATED_CATALOG_NAME&primary_location=REGION" \ -d '{ "catalog_type": "CATALOG_TYPE_FEDERATED", "storage_regions": ["'"REGION"'"], "federated_catalog_options": { "glue_catalog_info": { "warehouse": "'"GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE"'", "aws_region": "'"AWS_REGION"'", "aws_role_arn": "arn:aws:iam::'"AWS_ACCOUNT_ID"':role/'"AWS_ROLE_NAME"'" } } }'
Reemplaza lo siguiente:
FEDERATED_CATALOG_NAME: Es un nombre para tu catálogo federado.PROJECT_ID: Es el ID del proyecto de Google Cloud .REGION: Es la región de Lakehouse en la que se crea el catálogo federado. Por ejemplo,us-east4GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE: Es el identificador del catálogo del almacén de destino. Para el Data Catalog de Glue de una región de AWS, ingresa tu cadena de ID de cuenta de AWS de 12 dígitos. Por ejemplo,123456789012. Para usar un bucket de tabla de S3 en la región, ingresaAWS_ACCOUNT_ID:s3tablescatalog/S3_TABLE_BUCKET. Por ejemplo,123456789012:s3tablescatalog/my-table-bucket.AWS_ACCOUNT_ID: Es tu cadena de ID de cuenta de AWS de 12 dígitos. Por ejemplo,123456789012AWS_REGION: Es la región de AWS en la que reside tu catálogo de Glue o bucket de tabla de S3. Por ejemplo,us-east-1AWS_ROLE_NAME: Es el nombre de tu rol de IAM de AWS. Por ejemplo,biglake_glue_federation_roleNAMESPACE: (Opcional) Es el espacio de nombres del Directorio de servicios que creaste durante la configuración de la interconexión privada.SERVICE_NAME: (Opcional) Es el nombre del servicio del Directorio de servicios que creaste durante la configuración de la interconexión privada.
Actualiza la política de confianza
Cuando se crea el catálogo, Lakehouse aprovisiona una cuenta de servicio única para él, que se devuelve como el campo biglake-service-account-id en la respuesta de creación del catálogo. Usarás esta cuenta de servicio para establecer la relación de confianza.
Ejecuta el siguiente comando para extraer el valor de
biglake-service-account-iden una variable bash activa:BIGLAKE_SA_ID=$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --format="value(biglake-service-account-id)")
Actualiza la política de confianza de tu rol de IAM de AWS para reemplazar el marcador de posición por tu ID de agente de servicio de Google verificado. El bloque de condición valida la coincidencia de
subyaud. Escribe la política en un archivo llamadotrust_policy_comprehensive.json:cat > trust_policy_comprehensive.json << EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:aud": [ "$BIGLAKE_SA_ID" ], "accounts.google.com:sub": [ "$BIGLAKE_SA_ID" ] } } } ] } EOF
Aplica la política finalizada a tu rol de AWS:
aws iam update-assume-role-policy \ --role-name AWS_ROLE_NAME \ --policy-document file://trust_policy_comprehensive.json
Cómo habilitar la actualización en segundo plano
Ahora que se establecieron correctamente las relaciones de confianza seguras en ambas plataformas, actualiza tu catálogo para activar la actualización en segundo plano (cada 5 minutos o 300s, o más).
gcloud CLI
gcloud alpha biglake iceberg catalogs update FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --refresh-interval="300s"
REST
curl -s -X PATCH \ -H "x-goog-user-project: PROJECT_ID" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME?updateMask=federated_catalog_options.refresh_options.refresh_schedule" \ -d '{ "federated_catalog_options": { "refresh_options": { "refresh_schedule": { "refresh_interval": "300s" } } } }'
Verifica la conexión
Verifica que el ciclo de actualización en segundo plano del catálogo se haya completado correctamente y que los espacios de nombres se estén sincronizando.
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"
Confirma que las bases de datos remotas aparezcan como espacios de nombres sincronizados:
gcloud alpha biglake iceberg namespaces list \ --catalog="FEDERATED_CATALOG_NAME" \ --project="PROJECT_ID" \ --location="REGION"
¿Qué sigue?
- Usa tablas de Lakehouse y de consulta entre nubes.
- Soluciona problemas de Lakehouse en varias nubes.