

# Solucionar erros de esquema no AWS Glue
<a name="blueprint_workflow_troubleshoot"></a>

Se você encontrar erros ao usar blueprints do AWS Glue, utilize as seguintes soluções para ajudar a encontrar a fonte dos problemas e corrigi-los.

**Topics**
+ [Erro: módulo PySpark ausente](#blueprint-workflow-error-1)
+ [Erro: arquivo de configuração do blueprint ausente](#blueprint-workflow-error-2)
+ [Erro: arquivo importado ausente](#blueprint-workflow-error-3)
+ [Error: not authorized to perform iamPassRole on resource (Erro: não autorizado a executar iamPassRole no recurso)](#blueprint-workflow-error-4)
+ [Erro: programação cron. inválida](#blueprint-workflow-error-5)
+ [Erro: já existe um acionador com o mesmo nome](#blueprint-workflow-error-6)
+ [Erro: workflow with name: foo already exists (o fluxo de trabalho com nome: foo já existe).](#blueprint-workflow-error-7)
+ [Erro: módulo não encontrado no caminho layoutGenerator especificado](#blueprint-workflow-error-8)
+ [Erro: erro de validação no campo Connections (Conexões)](#blueprint-workflow-error-9)

## Erro: módulo PySpark ausente
<a name="blueprint-workflow-error-1"></a>

AWS GlueO retorna o erro “Unknown error executing layout generator function ModuleNotFoundError: No module named ‘pyspark’” (Erro desconhecido ao executar a função do gerador de layout ModuleNotFounderror: nenhum módulo chamado “pyspark”).

Ao descompactar o arquivo de blueprint, ele pode ser como um dos seguintes:

```
$ unzip compaction.zip 
Archive:  compaction.zip
   creating: compaction/
  inflating: compaction/blueprint.cfg  
  inflating: compaction/layout.py    
  inflating: compaction/README.md    
  inflating: compaction/compaction.py   
  
$ unzip compaction.zip
Archive:  compaction.zip
  inflating: blueprint.cfg           
  inflating: compaction.py           
  inflating: layout.py               
  inflating: README.md
```

No primeiro caso, todos os arquivos relacionados ao blueprint foram colocados em uma pasta chamada compactação e foi então convertido em um arquivo zip chamado *compaction.zip*.

No segundo caso, todos os arquivos necessários para o blueprint não foram incluídos em uma pasta e foram adicionados como arquivos raiz no arquivo zip *compaction.zip*.

Criar um arquivo em qualquer um dos formatos acima é permitido. No entanto, certifique-se de que `blueprint.cfg` tenha o caminho correto para o nome da função no script que gera o layout.

**Exemplos**  
No caso 1: `blueprint.cfg` deve ter `layoutGenerator` como o seguinte:

```
layoutGenerator": "compaction.layout.generate_layout"
```

No caso 2: `blueprint.cfg` deve ter `layoutGenerator` como o seguinte:

```
layoutGenerator": "layout.generate_layout" 
```

Se esse caminho não estiver incluído corretamente, você poderá ver um erro conforme indicado. Por exemplo, se tiver a estrutura de pastas conforme mencionado no caso 2 e tiver `layoutGenerator` indicado como no caso 1, você poderá ver o erro acima.

## Erro: arquivo de configuração do blueprint ausente
<a name="blueprint-workflow-error-2"></a>

AWS GlueO retorna o erro “Unknown error executing layout generator function FileNotFoundError: [Errno 2] No such file or directory: ‘/tmp/compaction/blueprint.cfg’” (Erro desconhecido executando a função do gerador de layout FileNotFoundError: [Errno 2] Nenhum arquivo ou diretório: “/tmp/compaction/blueprint.cfg”).

O blueprint.cfg deve ser colocado no nível raiz do arquivo ZIP ou dentro de uma pasta que tenha o mesmo nome que o arquivo ZIP.

Quando extraímos o arquivo ZIP do blueprint, blueprint.cfg deve ser encontrado em um dos seguintes caminhos. Se não for encontrado em um dos seguintes caminhos, você poderá ver o erro acima.

```
$ unzip compaction.zip 
Archive:  compaction.zip
   creating: compaction/
  inflating: compaction/blueprint.cfg  
  
$ unzip compaction.zip
Archive:  compaction.zip
  inflating: blueprint.cfg
```

## Erro: arquivo importado ausente
<a name="blueprint-workflow-error-3"></a>

AWS GlueO retorna o erro “Unknown error executing layout generator function FileNotFoundError: [Errno 2] No such file or directory: ‘demo-project/foo.py’” (Erro desconhecido executando a função do gerador de layout FileNotFoundError: [Errno 2] Nenhum arquivo ou diretório: “demo-project/foo.py”).

Se o script de geração de layout tiver funcionalidade para ler outros arquivos, certifique-se de fornecer um caminho completo para que o arquivo seja importado. Por exemplo, o script Conversion.py pode ser referenciado em Layout.py. Para obter mais informações, consulte [Projeto de esquema de exemplo](https://docs.aws.amazon.com/glue/latest/dg/developing-blueprints-sample.html).

## Error: not authorized to perform iamPassRole on resource (Erro: não autorizado a executar iamPassRole no recurso)
<a name="blueprint-workflow-error-4"></a>

AWS GlueO retorna o erro “User: arn:aws:sts:: 123456789012:Assumed-Role/AWSGlueservicerole/Gluesession is not authorized to perform: iam:PassRole on resource: arn:aws:iam:: 123456789012:Role/AWSGlueservicerole” (Usuário: arn:aws:sts:: 123456789012:Assumed-Role/AWSGlueservicerole/Gluesession não está autorizado a realizar: iam:PassRole no recurso: arn:aws:iam:: 123456789012:Role/AWSGlueservicerole)

Se os trabalhos e os crawlers no fluxo de trabalho assumirem a mesma função que aquela passada para criar o fluxo de trabalho do blueprint, a função do blueprint precisará incluir a permissão `iam:PassRole` em si mesma.

Se os trabalhos e os crawlers no fluxo de trabalho assumirem uma função diferente da função passada para criar as entidades do fluxo de trabalho do blueprint, a função do blueprint precisará incluir a propriedade `iam:PassRole` nessa outra função em vez de na função do blueprint.

Para obter mais informações, consulte [Permissões para perfis de esquema](https://docs.aws.amazon.com/glue/latest/dg/blueprints-personas-permissions.html#blueprints-role-permissions).

## Erro: programação cron. inválida
<a name="blueprint-workflow-error-5"></a>

AWS GlueO retorna o erro “The schedule cron(0 0 \* \* \* \*) is invalid” (A programação cron(0 0 \* \* \* \*) é inválida).

Forneça uma expressão [cron.](https://en.wikipedia.org/wiki/Cron) válida. Para obter mais informações, consulte [Programações baseadas em hora para tarefas e crawlers](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html).

## Erro: já existe um acionador com o mesmo nome
<a name="blueprint-workflow-error-6"></a>

AWS GlueO retorna o erro “Trigger with name 'foo\_starting\_trigger' already submitted with different configuration” (Acionador com o nome ‘foo\_starting\_trigger’ já enviado com configuração diferente).

Um blueprint não exige que você defina acionadores no script de layout para a criação do fluxo de trabalho. A criação do acionador é gerenciada pela biblioteca do blueprint com base nas dependências definidas entre duas ações. 

A nomeação para os acionadores é a seguinte:
+ Para o acionador inicial no fluxo de trabalho, a nomeação é <workflow\_name>\_starting\_trigger.
+ Para um nó (trabalho/crawler) no fluxo de trabalho que depende da conclusão de um ou vários nós upstream, o AWS Glue define um acionador com o nome <workflow\_name>\_<node\_name>\_trigger

Este erro significa que já existe um acionador com o mesmo nome. Você pode excluir o acionador existente e executar novamente a criação do fluxo de trabalho.

**nota**  
Excluir um fluxo de trabalho não exclui os nós dentro do fluxo de trabalho. É possível que, embora o fluxo de trabalho seja excluído, os acionadores sejam deixados para trás. Devido a isso, você pode não receber um erro “workflow already exists” (o fluxo de trabalho já existe), mas você pode receber um erro “trigger already exists” (o acionador já existe) em um caso em que você cria um fluxo de trabalho, exclui e, em seguida, tenta recriá-lo com o mesmo nome do mesmo blueprint.

## Erro: workflow with name: foo already exists (o fluxo de trabalho com nome: foo já existe).
<a name="blueprint-workflow-error-7"></a>

O nome do fluxo de trabalho deve ser exclusivo. Tente com outro nome.

## Erro: módulo não encontrado no caminho layoutGenerator especificado
<a name="blueprint-workflow-error-8"></a>

AWS GlueO retorna o erro “Unknown error executing layout generator function ModuleNotFoundError: No module named ‘crawl\_s3\_locations’” (Erro desconhecido ao executar a função do gerador de layout ModuleNotFounderror: nenhum módulo chamado “crawl\_s3\_locations”).

```
layoutGenerator": "crawl_s3_locations.layout.generate_layout"
```

Por exemplo, se você tiver o caminho layoutGenerator acima, quando descompactar o arquivo de blueprint, ele precisará se parecer com o seguinte:

```
$ unzip crawl_s3_locations.zip 
Archive:  crawl_s3_locations.zip
   creating: crawl_s3_locations/
  inflating: crawl_s3_locations/blueprint.cfg  
  inflating: crawl_s3_locations/layout.py    
  inflating: crawl_s3_locations/README.md
```

Ao descompactar o arquivo, se o arquivo de blueprint se parecer com o seguinte, então você poderá obter o erro acima.

```
$ unzip crawl_s3_locations.zip
Archive:  crawl_s3_locations.zip
  inflating: blueprint.cfg           
  inflating: layout.py               
  inflating: README.md
```

Você pode ver que não há nenhuma pasta chamada `crawl_s3_locations` e, quando o caminho `layoutGenerator` refere-se ao arquivo de layout por meio do módulo `crawl_s3_locations`, você pode obter o erro acima.

## Erro: erro de validação no campo Connections (Conexões)
<a name="blueprint-workflow-error-9"></a>

AWS GlueO retorna o erro “Unknown error executing layout generator function TypeError: Value ['foo'] for key Connections should be of type <class 'dict'>\!” (Erro desconhecido ao executar a função do gerador de layout TypeError: Valor ['foo'] para chave Conexões deve ser do tipo <class 'dict'>\!).

Este é um erro de validação. O campo `Connections` na classe `Job` está esperando um dicionário e, em vez disso, uma lista de valores é fornecida, causando o erro.

```
User input was list of values
Connections= ['string']

Should be a dict like the following
Connections*=*{'Connections': ['string']}
```

Para evitar esses erros de runtime ao criar um fluxo de trabalho de um esquema, você pode validar as definições de fluxo de trabalho, trabalho e crawler, conforme descrito em [Testar um esquema](https://docs.aws.amazon.com/glue/latest/dg/developing-blueprints-testing.html).

Consulte a sintaxe na [Referência de classes de esquema do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/developing-blueprints-code-classes.html) para definir o trabalho, crawler e fluxo de trabalho do AWS Glue no script de layout.