Como consultar Glue Data Catalog entre Cuentas de AWS.

Carlos Andres Zambrano Barrera
4 min readMay 19, 2021

Introducción

Actualmente muchos clientes optan por un esquema multi-cuenta en AWS, en esta forma de trabajo cuando se hacen proyectos de Data & Analytics se vuelve importante optimizar al máximo el uso de recursos y asegurar el acceso a los datos, por eso muchas veces se opta por un Glue Data Catalog completamente centralizado y que pueda ser consultado desde otras cuentas, sin la necesidad de replicar los datos entre ellas.

Anteriormente para acceder a un Glue Data Catalog en un esquema entre cuentas era necesario la implementación de una función lambda que se encargara de hacer esta conectividad como podemos ver en este blog. Sin embargo ahora esta configuración es más sencilla con una nueva funcionalidad para consultar Glue Data Catalog entre cuentas.

Te voy a mostrar cómo hacerlo!

A continuación les muestro nuestra arquitectura objetivo y el paso a paso a desarrollar.

El objetivo es desde la Cuenta A consultar el Glue Data Catalog de la Cuenta B

Paso 1 — Actualizar Athena a Versión 2

Es importante garantizar que las que tanto la Cuenta A como la Cuenta B tengan la última versión de Athena, para cambiarla puedes revisar este blog.

Paso 2 — Crear una Política para permitir acceso a la Cuenta B desde el role o usuario de la Cuenta A

En la Cuenta B en la consola de Glue en la parte izquierda debes dar click en Settings.

Click en Settings

Una vez en settings se debe copiar y pegar la política, teniendo en cuenta reemplazar los siguientes valores:

  • ID_CUENTA_A: ID de la cuenta A.
  • ID_CUENTA_B: ID de la cuenta B.
  • Reemplazar los valores de base de datos y la respectiva tabla que queremos consultar.
Click en Save para guardar la política.

La siguiente es la política a utilizar:

{
"Version" : "2012-10-17",
"Statement" : [ {
"Effect" : "Allow",
"Principal" : {
"AWS" : [ "arn:aws:iam::ID_CUENTA_A:root", "arn:aws:iam::ID_CUENTA_A:role/mirole", "arn:aws:iam::ID_CUENTA_A:user/czambrano" ]
},
"Action" : "glue:*",
"Resource" : [ "arn:aws:glue:us-east-1:ID_CUENTA_B:catalog", "arn:aws:glue:us-east-1:ID_CUENTA_B:database/mibasededatos", "arn:aws:glue:us-east-1:ID_CUENTA_B:table/mibasededatos/mitabla" ]
} ]
}

Paso 3— Crear un usuario o role en la Cuenta A

Crear una política IAM y asociarla a nuestro usuario o role que hará la consulta desde la Cuenta A.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "glue:*",
"Resource": [
"arn:aws:glue:us-east-1:ID_CUENTA_B:catalog",
"arn:aws:glue:us-east-1:ID_CUENTA_B:database/mibasededatos",
"arn:aws:glue:us-east-1:ID_CUENTA_B:table/mibasededatos/mitabla",
]
}
]
}

Paso 4 — Crear el Glue Data Catalog en la Cuenta A

El Glue Data Catalog se debe crear haciendo una llamada a la API para poder especificar el catálogo de la cuenta B. Para esta creación puedes usar boto3 en un cloud9 haciendo la siguiente llamada

import boto3response = boto3.client('athena')response.create_data_catalog(
Name='crossdc',
Type='GLUE',
Description='mi cross data catalog',
Parameters={
'catalog-id': 'ID_CUENTA_B'
},
)

Una vez ejecutado en Cloud9 estas líneas podemos verificar con un comando de la CLI que haya quedado creado de forma adecuada:

ec2-user:~/environment $ aws athena get-data-catalog --name crossdc
{
"DataCatalog": {
"Type": "GLUE",
"Name": "crossdc",
"Parameters": {
"catalog-id": "ID_CUENTA_B"
},
"Description": "mi cross data catalog"
}
}

Paso 5 — Consultar el Glue Data Catalog desde la Cuenta A

En la consola de Athena buscamos en el campo Datasource y ya debemos ver nuestro catálogo creado con Boto3.

Seleccionamos nuestra base de datos y ejecutamos una consulta para verificar:

SELECT * FROM "crossdc"."mibasededatos"."mitabla" limit 10;

Ahora podemos consultar la data de la cuenta B desde la Cuenta A.

Lecciones Aprendidas

1- Si en el paso 5 tienen problemas consultando la data, usualmente puede se problema de permisos en S3, se debe dar acceso desde el bucket origen de los datos (Cuenta B) a los usuario o roles de la Cuenta A que van a consultar la data.

2- Esta configuración permitirá tener multiples cuentas que puedan consultar nuestros datos centralizados sin la necesidad de tener que replicarlos en otras cuentas.

3- Utilizando herramientas de visualización como Quicksight se puede tomar ventaja para graficar los datos de la Cuenta B desde la Cuenta A.

Carlos Zambrano

--

--

Carlos Andres Zambrano Barrera

AWS x10, Tech Director en Globant con más de 7 años de experiencia en AWS.