Movimiento de datos desde y hacia Amazon Redshift - AWS Glue

Movimiento de datos desde y hacia Amazon Redshift

Al mover datos a un clúster de Amazon Redshift y desde este, los trabajos de AWS Glue emiten instrucciones COPIAR y DESCARGAR para Amazon Redshift a fin de alcanzar un rendimiento máximo. Estos comandos requieren que el clúster de Amazon Redshift acceda a Amazon Simple Storage Service (Amazon S3) como directorio provisional. De forma predeterminada, AWS Glue pasa credenciales temporales creadas mediante la función que especificó para ejecutar el trabajo. Por motivos de seguridad, estas credenciales vencen transcurrida una hora, lo que puede hacer que los trabajos de ejecución prolongada produzcan un error.

Para solucionar este problema, puede asociar uno o más roles de IAM con el propio clúster de Amazon Redshift. COPIAR y DESCARGAR pueden usar el rol y Amazon Redshift actualiza las credenciales según sea necesario. Para obtener más información acerca de cómo asociar un rol a su clúster de Amazon Redshift, consulte Permisos de IAM para COPIAR, DESCARGAR y CREAR BIBLIOTECA en la Guía de desarrollador de base de datos de Amazon Redshift. Asegúrese de que el rol que asocia a su clúster tiene permisos para leer desde el directorio temporal de Amazon S3 que especificó en su trabajo y escribir a este.

Después de configurar un rol para el clúster, debe especificarla en las instrucciones ETL (extracción, transformación y carga) del script de AWS Glue. La sintaxis depende de cómo su script lee y escribe su marco dinámico. Si su script se lee desde una tabla de AWS Glue Data Catalog, puede especificar un rol de la siguiente manera.

glueContext.create_dynamic_frame.from_catalog( database = "database-name", table_name = "table-name", redshift_tmp_dir = args["TempDir"], additional_options = {"aws_iam_role": "arn:aws:iam::account-id:role/role-name"})

Del mismo modo, si su script escribe un marco dinámico y se lee desde Data Catalog, puede especificar el rol de la siguiente manera.

glueContext.write_dynamic_frame.from_catalog( database = "database-name", table_name = "table-name", redshift_tmp_dir = args["TempDir"], additional_options = {"aws_iam_role": "arn:aws:iam::account-id:role/role-name"})

En estos ejemplos, role name es el rol que asoció a su clúster de Amazon Redshift, mientras que database-name y table-name se refieren a una tabla de Amazon Redshift actual definida en su Data Catalog.

También puede especificar una función al usar un marco dinámico y copy_from_options. La sintaxis es similar, pero el parámetro adicional se pone en el mapa connection_options.

my_conn_options = { "url": "jdbc:redshift://host:port/redshift database name", "dbtable": "redshift table name", "user": "username", "password": "password", "redshiftTmpDir": args["TempDir"], "aws_iam_role": "arn:aws:iam::account id:role/role name" } df = glueContext.create_dynamic_frame_from_options("redshift", my_conn_options)

Las opciones son similares al escribir en Amazon Redshift.

my_conn_options = { "dbtable": "redshift table name", "database": "redshift database name", "aws_iam_role": "arn:aws:iam::account id:role/role name" } glueContext.write_dynamic_frame.from_jdbc_conf( frame = input dynamic frame, catalog_connection = "connection name", connection_options = my_conn_options, redshift_tmp_dir = args["TempDir"])

De forma predeterminada, los datos de la carpeta temporal que utilizó AWS Glue al leer datos de la tabla de Amazon Redshift se cifran mediante SSE-S3. Para utilizar las claves administradas por el cliente de AWS Key Management Service (AWS KMS) para cifrar sus datos, debe especificar extraunloadoptions en additional_options y proporcionar el ID de clave de AWS KMS, como se muestra en el ejemplo siguiente:

datasource0 = glueContext.create_dynamic_frame.from_catalog( database = "database-name", table_name = "table-name", redshift_tmp_dir = args["TempDir"], additional_options = {"extraunloadoptions":"ENCRYPTED KMS_KEY_ID 'CMK key ID'"}, transformation_ctx = "datasource0" )