Como consultar Glue Data Catalog entre Cuentas de AWS.

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.

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
  • 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.
{
"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'
},
)
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.

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

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.

--

--

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

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Carlos Andres Zambrano Barrera

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