O script de layout do blueprint deve incluir uma função que gera as entidades em seu fluxo de trabalho. Você pode atribuir o nome que quiser a esta função. O AWS Glue usa o arquivo de configuração para determinar o nome totalmente qualificado da função.
Sua função de layout faz o seguinte:
-
(Opcional) instancia a classe
Job
para criar objetosJob
e transmite argumentos, comoCommand
eRole
. Essas são as propriedades de trabalho que você especificaria se estivesse criando o trabalho usando o console ou a API do AWS Glue. -
(Opcional) instancia a classe
Crawler
para criar objetosCrawler
e transmite argumentos de nome, função e destino. -
Para indicar dependências entre os objetos (entidades de fluxo de trabalho), transmite os argumentos adicionais
DependsOn
eWaitForDependencies
paraJob()
eCrawler()
. Esses argumentos são explicados posteriormente nesta seção. -
Instancia a classe
Workflow
para criar o objeto de fluxo de trabalho que é retornado para o AWS Glue, transmitindo um argumentoName
, um argumentoEntities
e um argumento opcionalOnSchedule
. O argumentoEntities
especifica todos os trabalhos e crawlers a serem incluídos no fluxo de trabalho. Para ver como construir um objetoEntities
, consulte o projeto de exemplo mais adiante nesta seção. -
Retorna um objeto
Workflow
.
Para obter definições das classes Job
, Crawler
e Workflow
, consulte Referência de classes de esquema do AWS Glue.
A função de layout aceita os seguintes argumentos:
Argumento | Descrição |
---|---|
user_params |
Dicionário Python de nomes e valores de parâmetros do blueprint. Para ter mais informações, consulte Especificar parâmetros de esquema. |
system_params |
Dicionário Python contendo duas propriedades: region e accountId . |
Aqui está um exemplo de script gerador de layout em um arquivo chamado Layout.py
:
import argparse
import sys
import os
import json
from awsglue.blueprint.workflow import *
from awsglue.blueprint.job import *
from awsglue.blueprint.crawler import *
def generate_layout(user_params, system_params):
etl_job = Job(Name="{}_etl_job".format(user_params['WorkflowName']),
Command={
"Name": "glueetl",
"ScriptLocation": user_params['ScriptLocation'],
"PythonVersion": "2"
},
Role=user_params['PassRole'])
post_process_job = Job(Name="{}_post_process".format(user_params['WorkflowName']),
Command={
"Name": "pythonshell",
"ScriptLocation": user_params['ScriptLocation'],
"PythonVersion": "2"
},
Role=user_params['PassRole'],
DependsOn={
etl_job: "SUCCEEDED"
},
WaitForDependencies="AND")
sample_workflow = Workflow(Name=user_params['WorkflowName'],
Entities=Entities(Jobs=[etl_job, post_process_job]))
return sample_workflow
O script de exemplo importa as bibliotecas de blueprint necessárias e inclui uma função generate_layout
que gera um fluxo de trabalho com dois trabalhos. Esse é um script muito simples. Um script mais complexo poderia empregar lógica e parâmetros adicionais para gerar um fluxo de trabalho com muitos trabalhos e crawlers, ou até mesmo um número variável de trabalhos e crawlers.
Usar o argumento DependsOn
O argumento DependsOn
é uma representação de dicionário de uma dependência que esta entidade tem em outras entidades dentro do fluxo de trabalho. Ele tem o seguinte formato:
DependsOn = {dependency1 : state, dependency2 : state, ...}
As chaves nesse dicionário representam a referência ao objeto, e não o nome da entidade, enquanto os valores são strings que correspondem ao estado a ser vigiado. O AWS Glue infere os acionadores adequados. Para obter os estados válidos, consulte Estrutura de condição.
Por exemplo, um trabalho pode depender da conclusão bem-sucedida de um crawler. Se você definir um objeto de crawler chamado crawler2
como segue:
crawler2 = Crawler(Name="my_crawler", ...)
Em seguida, um objeto dependendo de crawler2
incluiria um argumento construtor, como:
DependsOn = {crawler2 : "SUCCEEDED"}
Por exemplo:
job1 = Job(Name="Job1",
...
, DependsOn = {crawler2 : "SUCCEEDED", ...})
Se DependsOn
for omitido para uma entidade, essa entidade dependerá do acionador de início do fluxo de trabalho.
Usar o argumento WaitForDependencies
O argumento WaitForDependencies
define se um trabalho ou entidade de crawler deve esperar até que todas as entidades das quais depende sejam concluídas ou até que qualquer uma seja concluída.
Os valores permitidos são “AND
” ou “ANY
”.
Usar o argumento OnSchedule
O argumento OnSchedule
para o construtor de classe Workflow
é uma expressão cron
que determina a definição do acionador inicial para um fluxo de trabalho.
Se esse argumento for especificado, o AWS Glue criará um acionador de programação com a programação correspondente. Se ele não for especificado, o acionador de início do fluxo de trabalho será um acionador sob demanda.