As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Solução de problemas do Amazon DataZone
Se você encontrar problemas de acesso negado ou dificuldades semelhantes ao trabalhar com o Amazon DataZone, consulte os tópicos nesta seção.
Solução de problemas de permissões do AWS Lake Formation para o Amazon DataZone
Esta seção contém as instruções de solução de problemas que podem ocorrer ao Configurar as permissões do Lake Formation para a Amazon DataZone.
| Mensagem de erro no Portal de Dados | Resolução |
|---|---|
|
Não é possível assumir o perfil de acesso a dados. |
Esse erro é exibido quando o Amazon DataZone não consegue assumir o perfil AmazonDataZoneGlueDataAccessRole que você usou para habilitar o DefaultDataLakeBlueprint em sua conta. Para corrigir o problema, acesse o console do AWS IAM na conta em que o ativo de dados existe e confirme se o AmazonDataZoneGlueDataAccessRole tem a relação de confiança correta com a entidade principal pelo serviço Amazon DataZone. Para obter mais informações, consulte . AmazonDataZoneGlueAccess- <region>- <domainId> |
|
O perfil de acesso a dados não tem as permissões necessárias para ler os metadados do ativo que você está tentando assinar. |
Esse erro é exibido quando o Amazon DataZone assume com sucesso o perfil AmazonDataZoneGlueDataAccessRole, mas o perfil não tem as permissões necessárias. Para corrigir o problema, acesse o console do AWS IAM na conta em que o ativo de dados existe e confirme se o perfil tem a AmazonDataZoneGlueManageAccessRolePolicy anexada. Para obter mais informações, consulte AmazonDataZoneGlueAccess- <region>- <domainId>. |
|
O ativo é um link de recurso. O Amazon DataZone não oferece suporte a assinaturas de links de recursos. |
Esse erro é exibido quando o ativo que você está tentando publicar no Amazon DataZone é um link de recurso para uma tabela do AWS Glue. |
|
O ativo não é gerenciado pelo AWS Lake Formation. |
Esse erro indica que as permissões do AWS Lake Formation não são aplicadas ao ativo que você deseja publicar. Isso ocorre nos casos a seguir.
|
|
O perfil Acesso a Dados não tem as permissões necessárias do Lake Formation para conceder acesso a esse ativo. |
Esse erro indica que o AmazonDataZoneGlueDataAccessRole que você está usando para habilitar o DefaultDataLakeBlueprint na conta não tem as permissões necessárias para que o Amazon DataZone gerencie as permissões no ativo publicado. Você pode resolver o problema adicionando o AmazonDataZoneGlueDataAccessRole como administrador do AWS Lake Formation ou concedendo as permissões a seguir ao AmazonDataZoneGlueDataAccessRole no ativo que você deseja publicar.
|
Solução de problemas de vinculação de ativos de linhagem do Amazon DataZone com conjuntos de dados upstream
Esta seção contém as instruções de solução de problemas que você pode encontrar com a linhagem do Amazon DataZone. Em alguns dos eventos de execução de linhagem aberta relacionados ao AWS Glue e ao Amazon Redshift, você pode ver que a linhagem de ativos não está vinculada a um conjunto de dados upstream. Este tópico explica os cenários e algumas abordagens para reduzir problemas. Para obter mais informações sobre linhagem, consulte Linhagem de dados na Amazon DataZone.
SourceIdentifier no nó de linhagem
O atributo sourceIdentifier em um nó de linhagem representa os eventos que acontecem em um conjunto de dados. Para obter mais informações, consulte Atributos principais em nós de linhagem.
O nó de linhagem representa todos os eventos que acontecem no conjunto de dados ou no trabalho correspondente. O nó de linhagem contém um atributo “sourceIdentifier” que contém o identificador do conjunto de dados/trabalho correspondente. Como oferecemos suporte a eventos de linhagem aberta, o valor sourceIdentifier é preenchido por padrão como a combinação de “namespace” e “nome” para um conjunto de dados, trabalho e execução de trabalhos.
Para recursos da AWS, como o AWS Glue e o Amazon Redshift, o sourceIdentifier seria o ARN da tabela do AWS Glue e os ARNs da tabela Redshift, a partir dos quais o Amazon DataZone construirá o evento de execução e outros detalhes da seguinte forma:
nota
Na AWS, o ARN contém informações como accountId, região, banco de dados e tabela para cada recurso.
O evento OpenLineage para esses conjuntos de dados contém o nome do banco de dados e da tabela.
A região é capturada na faceta “environment-properties” de uma execução. Se não estiver presente, o sistema usa a região a partir das credenciais do chamador.
O AccountId é obtido das credenciais do chamador.
SourceIdentifier nos ativos dentro do DataZone
AssetCommonDetailForm tem um atributo chamado “sourceIdentifier” que representa o identificador do conjunto de dados que o ativo representa. Para que os nós de linhagem de ativos sejam vinculados a um conjunto de dados upstream, o atributo precisa ser preenchido com o valor correspondente ao do nó do conjunto de dados sourceIdentifier. Se os ativos forem importados por fonte de dados, o fluxo de trabalho preencherá como ARN da tabela do sourceIdentifier/ARN da tabela do Redshift do AWS Glue automaticamente, enquanto outros ativos (incluindo ativos personalizados) criados por meio da API CreateAsset devem ter esse valor preenchido pelo chamador.
Como o Amazon DataZone constrói o sourceIdentifier a partir do evento OpenLineage?
Para ativos do AWS Glue e do Redshift, o sourceIdentifier é construído usando ARNs do Glue e do Redshift. Veja como o Amazon DataZone faz isso:
AWS GlueARN do
O objetivo é construir um evento OpenLineage no qual o nó da linhagem de saída sourceIdentifier seja:
arn:aws:glue:us-east-1:123456789012:table/testlfdb/testlftb-1
Para determinar se uma execução está usando dados do AWS Glue, procure determinadas palavras-chave na faceta environment-properties. Especificamente, se houver algum desses campos designados, o sistema presume que a RunEvent é proveniente de 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 uma execução do AWS Glue, use o nome da faceta symlinks para obter o nome do banco de dados e da tabela, que podem ser usados para construir o ARN.
Preciso ter certeza de que o nome é databaseName.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" } ] }
Exemplo de evento COMPLETE:
{ "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" } ] } } } ] }
Com base no evento OpenLineage enviado, o nó sourceIdentifier da linhagem de saída será:
arn:aws:glue:us-east-1:123456789012:table/testlfdb/testlftb-1
O nó de linhagem de saída será conectado ao nó de linhagem de um ativo, onde o do ativo é sourceIdentifier:
arn:aws:glue:us-east-1:123456789012:table/testlfdb/testlftb-1
Amazon Redshift, ARN
O objetivo é construir um evento OpenLineage no qual o nó da linhagem de saída sourceIdentifier seja:
arn:aws:redshift:us-east-1:123456789012:table/workgroup-20240715/tpcds_data/public/dws_tpcds_7
O sistema determina se uma entrada ou saída é armazenada no Redshift com base no namespace. Particularmente, se o namespace começar com redshift:// ou contiver as cadeias de caracteres redshift-serverless.amazonaws.com ou redshift.amazonaws.com, ele é um recurso Redshift.
"outputs": [ { "namespace":"redshift://workgroup-20240715.123456789012.us-east-1.redshift.amazonaws.com:5439", "name":"tpcds_data.public.dws_tpcds_7" } ]
Observe que o namespace precisa estar no seguinte formato:
provider://{cluster_identifier}.{region_name}:{port}
Para redshift-serverless:
"outputs": [ { "namespace":"redshift://workgroup-20240715.123456789012.us-east-1.redshift-serverless.amazonaws.com:5439", "name":"tpcds_data.public.dws_tpcds_7" } ]
Isso resulta no sourceIdentifier a seguir
arn:aws:redshift-serverless:us-east-1:123456789012:table/workgroup-20240715/tpcds_data/public/dws_tpcds_7
Com base no evento OpenLineage enviado, o nó de linhagem sourceIdentifier a ser mapeado para um nó de linhagem para baixo (ou seja, uma saída do evento) é:
arn:aws:redshift-serverless:us-e:us-east-1:123456789012:table/workgroup-20240715/tpcds_data/public/dws_tpcds_7
Esse é o mapeamento que ajuda você a visualizar a linhagem de um ativo no catálogo.
Abordagem alternativa
Quando nenhuma das condições acima for atendida, o sistema usa o namespace/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" } ]
Solucionando a falta de upstream para o nó de linhagem de ativos
Se você não vê o upstream do nó da linhagem do ativo, faça o seguinte para solucionar o motivo pelo qual ele não está vinculado ao conjunto de dados:
Invoque
GetAssetenquanto fornece odomainIde oassetId:aws datazone get-asset --domain-identifier <domain-id> --identifier <asset-id>A resposta é exibida da seguinte maneira:
{ ..... "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>", .... }Invoque
GetLineageNodepara obter o nósourceIdentifierda linhagem do conjunto de dados. Como não há como obter diretamente o nó de linhagem para o nó do conjunto de dados correspondente, você pode começar com a execuçãoGetLineageNodedo trabalho: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.A resposta do exemplo é semelhante à seguinte:
{ ..... "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" } ] }Invoque
GetLineageNodenovamente passando o identificador do nó para cima/para baixo (que você acha que deveria estar vinculado ao nó do ativo), pois ele corresponde ao conjunto de dados:Exemplo de comando usando o exemplo de resposta acima:
aws datazone get-lineage-node --domain-identifier <domain-id> --identifier afymge5k4v0eufOs detalhes do nó de linhagem correspondentes ao conjunto de dados: afymge5k4v0euf são retornados
{ ..... "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": [ ... ] }Compare o nó
sourceIdentifierdesse conjunto de dados e a resposta deGetAsset. Se não estiverem vinculados, eles não corresponderão e, portanto, não estarão visíveis na interface de usuário da linhagem.
Cenários e mitigações incompatíveis
A seguir estão os cenários comumente conhecidos em que eles não coincidem e as possíveis mitigações:
Causa raiz: as tabelas estão presentes em uma conta diferente da conta de domínio do Amazon DataZone.
Atenuação: você pode invocar a operação PostLineageEvent por meio de uma conta associada. Como accountId a criação do ARN é selecionada a partir das credenciais do chamador, você pode assumir o perfil na conta que contém as tabelas ao executar o script de introdução ou invocar PostLineageEvent. Isso ajudará na construção correta dos ARNs e na vinculação aos nós do ativo.
Causa raiz: o ARN para tabelas/visualizações do Redshift contém Redshift/Redshift-serverless com base no namespace e nos atributos de nome das informações do conjunto de dados correspondente no evento de execução do OpenLineage.
Atenuação: como não há uma forma determinística de saber se o nome fornecido pertence ao cluster ou ao grupo de trabalho, usamos a seguinte heurística:
Se o “nome” correspondente ao conjunto de dados contiver "
redshift-serverless.amazonaws.com“, usaremos redshift-serverless como parte do ARN, caso contrário, o padrão será “redshift”.O que foi dito acima significa que os aliases nos nomes dos grupos de trabalho não funcionarão.
Causa-raiz: os conjuntos de dados upstream não estão vinculados corretamente para ativos personalizados.
Atenuação: preencha o sourceIdentifier no ativo invocando CreateAsset/CreateAssetRevision que corresponda ao do sourceIdentifier do nó do conjunto de dados (que seria <namespace>/<name> para nós personalizados).