Solución de problemas de Amazon DataZone - Amazon DataZone

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Solución de problemas de Amazon DataZone

Si te encuentras con problemas de acceso denegado o dificultades similares al trabajar con Amazon, DataZone consulta los temas de esta sección.

Solución de problemas de permisos de AWS Lake Formation para Amazon DataZone

Esta sección contiene instrucciones de solución de problemas que puedan surgir cuandoConfigurar los permisos de Lake Formation para Amazon DataZone:

Mensaje de error en el portal de datos Resolución

No se puede asumir la función de acceso a los datos.

Este error aparece cuando Amazon DataZone no puede asumir AmazonDataZoneGlueDataAccessRoleque utilizaste para habilitarlo DefaultDataLakeBlueprinten tu cuenta. Para solucionar el problema, ve a la AWS IAM consola de la cuenta en la que se encuentra tu activo de datos y asegúrate de que AmazonDataZoneGlueDataAccessRoletiene la relación de confianza adecuada con el director de DataZone servicio de Amazon. Para obtener más información, consulte AmazonDataZoneGlueAccess- <region>-< > domainId

La función de acceso a los datos no tiene los permisos necesarios para leer los metadatos del activo al que intentas suscribir.

Este error aparece cuando Amazon asume DataZone correctamente el AmazonDataZoneGlueDataAccessRolerol, pero el rol no tiene los permisos necesarios. Para solucionar el problema, ve a la AWS IAM consola de la cuenta en la que se encuentra tu activo de datos y asegúrate de que el rol lo tenga AmazonDataZoneGlueManageAccessRolePolicyasociado. Para obtener más información, consulte AmazonDataZoneGlueAccess- <region>-< > domainId.

El activo es un enlace a un recurso. Amazon DataZone no admite suscripciones a enlaces de recursos.

Este error se muestra cuando el recurso que estás intentando publicar en Amazon DataZone es un enlace de recursos a una tabla de AWS Glue.

AWS Lake Formation no administra el activo.

Este error indica que los permisos de AWS Lake Formation no se aplican al activo que desea publicar. Esto puede ocurrir en los siguientes casos.

  • La ubicación del activo en Amazon S3 no está registrada en AWS Lake Formation. Para solucionar el problema, inicie sesión en la consola de AWS Lake Formation en la cuenta en la que se encuentra la tabla y registre la ubicación de Amazon S3 en modo AWS Lake Formation o modo híbrido. Para obtener más información, consulte Registro de una ubicación de Amazon S3. Hay varios escenarios que requieren modificaciones adicionales. Estos incluyen depósitos de AmazonS3 cifrados o un depósito de S3 multicuenta y una configuración de AWS Glue Catalog. En esos casos, puede que sea necesario modificar la configuración de S3 KMS y/o la configuración. Para obtener más información, consulte Registro de una ubicación de Amazon S3.

  • La ubicación de Amazon S3 está registrada en el modo AWS Lake Formation, pero IAMAllowedPrincipalse añade a los permisos de la tabla. Para solucionar el problema, puede eliminarla IAMAllowedPrincipalde los permisos de la tabla o registrar la ubicación S3 en modo híbrido. Para obtener más información, consulte Acerca de la actualización al modelo de permisos de Lake Formation. Si tu ubicación de S3 está cifrada o la ubicación de S3 está en una cuenta diferente a la de tu tabla de AWS Glue, sigue las instrucciones de Registrar una ubicación cifrada de Amazon S3.

El rol de acceso a datos no tiene los permisos de Lake Formation necesarios para conceder acceso a este activo.

Este error indica que el elemento AmazonDataZoneGlueDataAccessRoleque estás utilizando para habilitar el DefaultDataLakeBlueprintcontenido en tu cuenta no tiene los permisos necesarios para DataZone que Amazon gestione los permisos del activo publicado. Puede resolver el problema añadiendo al AmazonDataZoneGlueDataAccessRolecomo administrador de AWS Lake Formation o concediendo los siguientes permisos al activo que desee publicar. AmazonDataZoneGlueDataAccessRole

  • Describa y describa los permisos concedibles en la base de datos en la que se encuentra el activo

  • Describa, seleccione, describa los permisos concedibles y seleccione los permisos concedibles sobre todos los activos de la base de datos cuyo acceso desea que Amazon gestione en su nombre. DataZone

Solución de problemas de vinculación de activos DataZone de Amazon Linage con conjuntos de datos ascendentes

Esta sección contiene instrucciones de solución de problemas que puedan surgir con el DataZone linaje de Amazon. En algunos de los eventos de ejecución de linaje abierto AWS Glue y relacionados con Amazon Redshift, es posible que vea que el linaje de activos no está vinculado a un conjunto de datos ascendente. En este tema se explican los escenarios y algunos enfoques para mitigar los problemas. Para obtener más información sobre el linaje, consulteLinaje de datos en Amazon DataZone (versión preliminar) .

SourceIdentifier en el nodo de linaje

El sourceIdentifier atributo de un nodo de linaje representa los eventos que ocurren en un conjunto de datos. Para obtener más información, consulte Atributos clave en los nodos de linaje.

El nodo de linaje representa todos los eventos que ocurren en el conjunto de datos o trabajo correspondiente. El nodo de linaje contiene un atributo «sourceIdentifier» que contiene el identificador del conjunto de datos/trabajo correspondiente. Como admitimos los eventos de linaje abierto, el sourceIdentifier valor se rellena de forma predeterminada como la combinación de «espacio de nombres» y «nombre» para un conjunto de datos, una tarea y una ejecución de tareas.

En el caso de AWS recursos como AWS Glue Amazon Redshift, estas sourceIdentifier serían la AWS Glue tabla ARN y la tabla Redshift a partir de las ARNs cuales Amazon DataZone construirá el evento de ejecución y otros detalles, como se indica a continuación:

nota

En AWS, ARN contiene información como la regiónaccountId, la base de datos y la tabla de cada recurso.

  • OpenLineage el evento de estos conjuntos de datos contiene el nombre de la base de datos y la tabla.

  • La región se captura en la faceta «propiedades del entorno» de una ejecución. Si no está presente, el sistema utiliza la región de las credenciales de la persona que llama.

  • AccountId se toma de las credenciales de la persona que llama.

SourceIdentifier sobre los activos que contiene DataZone

AssetCommonDetailFormtiene un atributo llamado sourceIdentifier "» que representa el identificador del conjunto de datos que representa el activo. Para que los nodos del linaje de activos se vinculen a un conjunto de datos ascendente, el atributo debe rellenarse con el valor que coincida con el del nodo del conjunto de datos. sourceIdentifier Si los activos se importan por fuente de datos, el flujo de trabajo se rellena ARN automáticamente sourceIdentifier como tabla o AWS Glue tabla ARN Redshift, mientras que otros activos (incluidos los activos personalizados) creados mediante ella CreateAsset API deberían tener ese valor rellenado por la persona que llama.

¿Cómo DataZone construye Amazon a sourceIdentifier partir del OpenLineage evento?

Para AWS Glue los activos de Redshift, sourceIdentifier se construye a partir de Glue y Redshift. ARNs Así es como lo DataZone construye Amazon:

AWS Glue ARN

El objetivo es construir un OpenLineage evento en el que el nodo de linaje de sourceIdentifier salida sea:

arn:aws:glue:us-east-1:123456789012:table/testlfdb/testlftb-1

Para determinar si una ejecución utiliza datos de AWS Glue, busca la presencia de determinadas palabras clave en la environment-properties faceta. En concreto, si alguno de estos campos designados está presente, el sistema asume que RunEvent se origina en. AWS Glue

  • GLUE_VERSION

  • GLUE_COMMAND_CRITERIA

  • GLUE_PYTHON_VERSION

"run": { "runId":"4e3da9e8-6228-4679-b0a2-fa916119fthr", "facets":{ "environment-properties":{ "_producer":"https://github.com/OpenLineage/OpenLineage/tree/1.9.1/integration/spark", "_schemaURL":"https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunFacet", "environment-properties":{ "GLUE_VERSION":"3.0", "GLUE_COMMAND_CRITERIA":"glueetl", "GLUE_PYTHON_VERSION":"3" } } }

Para una AWS Glue ejecución, puede usar el nombre de la symlinks faceta para obtener el nombre de la base de datos y la tabla, que se pueden usar para construir la. ARN

Debes asegurarte de que el nombre seadatabaseName.tableName:

"symlinks": { "_producer":"https://github.com/OpenLineage/OpenLineage/tree/1.9.1/integration/spark", "_schemaURL":"https://openlineage.io/spec/facets/1-0-0/SymlinksDatasetFacet.json#/$defs/SymlinksDatasetFacet", "identifiers":[ { "namespace":"s3://object-path", "name":"testlfdb.testlftb-1", "type":"TABLE" } ] }

Ejemplo de COMPLETE evento:

{ "eventTime":"2024-07-01T12:00:00.000000Z", "producer":"https://github.com/OpenLineage/OpenLineage/tree/1.9.1/integration/glue", "schemaURL":"https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent", "eventType":"COMPLETE", "run": { "runId":"4e3da9e8-6228-4679-b0a2-fa916119fthr", "facets":{ "environment-properties":{ "_producer":"https://github.com/OpenLineage/OpenLineage/tree/1.9.1/integration/spark", "_schemaURL":"https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunFacet", "environment-properties":{ "GLUE_VERSION":"3.0", "GLUE_COMMAND_CRITERIA":"glueetl", "GLUE_PYTHON_VERSION":"3" } } } }, "job":{ "namespace":"namespace", "name":"job_name", "facets":{ "jobType":{ "_producer":"https://github.com/OpenLineage/OpenLineage/tree/1.9.1/integration/glue", "_schemaURL":"https://openlineage.io/spec/facets/2-0-2/JobTypeJobFacet.json#/$defs/JobTypeJobFacet", "processingType":"BATCH", "integration":"glue", "jobType":"JOB" } } }, "inputs":[ { "namespace":"namespace", "name":"input_name" } ], "outputs":[ { "namespace":"namespace.output", "name":"output_name", "facets":{ "symlinks":{ "_producer":"https://github.com/OpenLineage/OpenLineage/tree/1.9.1/integration/spark", "_schemaURL":"https://openlineage.io/spec/facets/1-0-0/SymlinksDatasetFacet.json#/$defs/SymlinksDatasetFacet", "identifiers":[ { "namespace":"s3://object-path", "name":"testlfdb.testlftb-1", "type":"TABLE" } ] } } } ] }

Según el OpenLineage evento enviado, el nodo sourceIdentifier del linaje de salida será:

arn:aws:glue:us-east-1:123456789012:table/testlfdb/testlftb-1

El nodo de linaje de salida se conectará al nodo de linaje de un activo en el que el activo esté: sourceIdentifier

arn:aws:glue:us-east-1:123456789012:table/testlfdb/testlftb-1
La captura de pantalla muestra el identificador de origen de un activo.
La captura de pantalla muestra el identificador de origen de un activo.

Amazon Redshift ARN

El objetivo es construir un OpenLineage evento en el que el nodo de linaje de sourceIdentifier salida sea:

arn:aws:redshift:us-east-1:123456789012:table/workgroup-20240715/tpcds_data/public/dws_tpcds_7

El sistema determina si una entrada o una salida se almacena en Redshift en función del espacio de nombres. En concreto, si el espacio de nombres comienza por redshift://o contiene las cadenas redshift-serverless.amazonaws.com o es un redshift.amazonaws.com recurso de Redshift.

"outputs": [ { "namespace":"redshift://workgroup-20240715.123456789012.us-east-1.redshift.amazonaws.com:5439", "name":"tpcds_data.public.dws_tpcds_7" } ]

Tenga en cuenta que el espacio de nombres debe tener el siguiente formato:

provider://{cluster_identifier}.{region_name}:{port}

En:redshift-serverless

"outputs": [ { "namespace":"redshift://workgroup-20240715.123456789012.us-east-1.redshift-serverless.amazonaws.com:5439", "name":"tpcds_data.public.dws_tpcds_7" } ]

El resultado es el siguiente sourceIdentifier

arn:aws:redshift-serverless:us-east-1:123456789012:table/workgroup-20240715/tpcds_data/public/dws_tpcds_7

Según el OpenLineage evento enviado, el sourceIdentifier nodo de linaje que se va a mapear a un nodo de linaje descendente (es decir, una salida del evento) es:

arn:aws:redshift-serverless:us-e:us-east-1:123456789012:table/workgroup-20240715/tpcds_data/public/dws_tpcds_7

Este es el mapeo que le ayuda a visualizar el linaje de un activo del catálogo.

Enfoque alternativo

Cuando no se cumple ninguna de las condiciones anteriores, el sistema utiliza el espacio de nombres/name para construir: sourceIdentifier

"inputs": [ { "namespace":"arn:aws:redshift:us-east-1:123456789012:table", "name":"workgroup-20240715/tpcds_data/public/dws_tpcds_7" } ], "outputs": [ { "namespace":"arn:aws:glue:us-east-1:123456789012:table", "name":"testlfdb/testlftb-1" } ]

Solución de problemas por la falta de flujo inicial para el nodo de linaje de activos

Si no ves el flujo ascendente del nodo de linaje del activo, puedes hacer lo siguiente para solucionar el problema por el que no está vinculado al conjunto de datos:

  1. Invoca GetAsset mientras proporcionas las letras y: domainId assetId

    aws datazone get-asset --domain-identifier <domain-id> --identifier <asset-id>

    La respuesta aparece de la siguiente manera:

    { ..... "formsOutput": [ ..... { "content": "{\"sourceIdentifier\":\"arn:aws:glue:eu-west-1:123456789012:table/testlfdb/testlftb-1\"}", "formName": "AssetCommonDetailsForm", "typeName": "amazon.datazone.AssetCommonDetailsFormType", "typeRevision": "6" }, ..... ], "id": "<asset-id>", .... }
  2. GetLineageNodeInvoque para obtener el nodo sourceIdentifier de linaje del conjunto de datos. Como no hay forma de obtener directamente el nodo de linaje para el nodo del conjunto de datos correspondiente, puede empezar con GetLineageNode la siguiente tarea:

    aws datazone get-lineage-node --domain-identifier <domain-id> --identifier <job_namespace>.<job_name>/<run_id> if you are using the getting started scripts, job name and run ID are printed in the console and namespace is "default". Otherwise you can get these values from run event content.

    El ejemplo de respuesta tiene el siguiente aspecto:

    { ..... "downstreamNodes": [ { "eventTimestamp": "2024-07-24T18:08:55+08:00", "id": "afymge5k4v0euf" } ], "formsOutput": [ <some forms corresponding to run and job> ], "id": "<system generated node-id for run>", "sourceIdentifier": "default.redshift.create/2f41298b-1ee7-3302-a14b-09addffa7580", "typeName": "amazon.datazone.JobRunLineageNodeType", .... "upstreamNodes": [ { "eventTimestamp": "2024-07-24T18:08:55+08:00", "id": "6wf2z27c8hghev" }, { "eventTimestamp": "2024-07-24T18:08:55+08:00", "id": "4tjbcsnre6banb" } ] }
  3. GetLineageNodeVuelva a invocar introduciendo el identificador del nodo ascendente/ascendente (que cree que debería estar vinculado al nodo del activo), ya que corresponde al conjunto de datos:

    Ejemplo de comando utilizando la respuesta del ejemplo anterior:

    aws datazone get-lineage-node --domain-identifier <domain-id> --identifier afymge5k4v0euf

    Esto devuelve los detalles del nodo de linaje correspondientes al conjunto de datos: afymge5k4v0euf

    { ..... "domainId": "dzd_cklzc5s2jcr7on", "downstreamNodes": [], "eventTimestamp": "2024-07-24T18:08:55+08:00", "formsOutput": [ ..... ], "id": "afymge5k4v0euf", "sourceIdentifier": "arn:aws:redshift:us-east-1:123456789012:table/workgroup-20240715/tpcds_data/public/dws_tpcds_7", "typeName": "amazon.datazone.DatasetLineageNodeType", "typeRevision": "1", .... "upstreamNodes": [ ... ] }
  4. Compare el nodo de este conjunto de datos y la respuesta de. sourceIdentifier GetAsset Si no están vinculados, no coincidirán y, por lo tanto, no estarán visibles en la interfaz de usuario del linaje.

Escenarios y mitigaciones que no coinciden

Los siguientes son los escenarios más conocidos en los que no coincidirán y las posibles mitigaciones:

Causa raíz: las tablas están presentes en una cuenta diferente a la de la cuenta de DataZone dominio de Amazon.

Mitigación: puedes invocar la PostLineageEvent operación desde una cuenta asociada. Como la construcción ARN se selecciona accountId a partir de las credenciales de la persona que llama, puede asumir el rol desde la cuenta que contiene las tablas al ejecutar el script de introducción o al invocar. PostLineageEvent Hacerlo ayudará a construir ARNs correctamente los nodos de activos y a vincularlos con ellos.

Causa raíz: la ARN de Redshift table/views contains Redshift/Redshift -serverless se basa en el espacio de nombres y los atributos de nombre de la información del conjunto de datos correspondiente en el evento de ejecución. OpenLineage

Mitigación: Como no existe una forma determinista de saber si el nombre de pila pertenece a un clúster o grupo de trabajo, utilizamos la siguiente heurística:

  • Si el «nombre» correspondiente al conjunto de datos contiene «redshift-serverless.amazonaws.com«, utilizamos redshift-serverless como parte del conjunto de datos; de lo contrario, el valor predeterminado es «redshift». ARN

  • Lo anterior significa que los alias en los nombres de los grupos de trabajo no funcionarán.

Causa principal: los conjuntos de datos ascendentes no están enlazados correctamente para los activos personalizados.

Mitigación<name>: asegúrate de rellenar el campo correspondiente sourceIdentifier al activo invocandoCreateAsset/CreateAssetRevisionque coincida con el nodo del conjunto sourceIdentifier de datos (que sería<namespace>/en el caso de los nodos personalizados).