Quero usar uma função do AWS Lambda para iniciar automaticamente um trabalho do AWS Glue quando a execução de um crawler for concluída.
Breve descrição
Para iniciar um trabalho quando a execução de um crawler for concluída, crie uma função do AWS Lambda e uma regra do Amazon EventBridge.
Observação: também é possível usar os fluxos de trabalho do AWS Glue para iniciar automaticamente um trabalho quando a execução de um crawler for concluída. Para obter mais informações, consulte Como posso usar os fluxos de trabalho do AWS Glue para iniciar automaticamente um trabalho quando a execução de um crawler for concluída?
Resolução
Pré-requisitos:
Você deve ter o seguinte:
- Um trabalho de extração, transformação e carregamento (ETL) do AWS Glue.
- Um crawler do AWS Glue.
- Um perfil do AWS Identity and Access Management (AWS IAM) para o Lambda com permissão para executar trabalhos do AWS Glue. Por exemplo, configure um perfil vinculado a serviço para o Lambda que tenha a política AWSGlueServiceRole anexada ao perfil.
Crie a função do Lambda
Conclua as seguintes etapas:
- Abra o console do Lambda.
- Escolha Criar função.
- Na página Criar função, insira as seguintes informações:
Escolha Criar do zero.
Em Nome da função, insira um nome para sua função.
Em Runtime, escolha uma opção Python.
Para Arquitetura, use a opção padrão, x86_64.
Em Alterar perfil de execução padrão, em Perfil de execução, escolha Usar um perfil existente.
Em Perfil existente, selecione o perfil do IAM que tenha permissão para executar trabalhos do AWS Glue.
- Escolha Criar função.
- Na página de detalhes da função, em Fonte do código, insira o seguinte código:
# Set up loggingimport json
import os
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# Import Boto 3 for AWS Glue
import boto3
client = boto3.client('glue')
# Variables for the job:
glueJobName = "MyTestJob"
# Define Lambda function
def lambda_handler(event, context):
logger.info('## INITIATED BY EVENT: ')
logger.info(event['detail'])
response = client.start_job_run(JobName = glueJobName)
logger.info('## STARTED GLUE JOB: ' + glueJobName)
logger.info('## GLUE JOB RUN ID: ' + response['JobRunId'])
return response
Observação: substitua MyTestJob pelo nome do seu trabalho de ETL do AWS Glue.
- Em Fonte do código, escolha Testar.
- Abra o console do AWS Glue e confirme se o trabalho começou.
Para testar a função do Lambda, execute seu crawler do AWS Glue. Em seguida, verifique a lista de recursos de execução de trabalhos do seu trabalho de ETL do AWS Glue. O status Executar exibe Iniciando ou Executando.
Criar a regra do EventBridge
Conclua as seguintes etapas:
- Abra o console do EventBridge.
- No painel de navegação, escolha Regras e, em seguida, Criar regra.
- Insira um nome e uma descrição para a regra e selecione Próximo.
- Use valores padrão para Origem do evento e Evento de amostra.
- Na seção Padrão de eventos, selecione Padrões personalizados (editor JSON).
- Insira o código a seguir no campo Padrão de evento:
{
"detail-type": [
"Glue Crawler State Change"
],
"source": [
"aws.glue"
],
"detail": {
"crawlerName": [
"MyTestCrawl"
],
"state": [
"Succeeded"
]
}
}
Observação: substitua MyTestCrawl pelo nome do seu crawler do AWS Glue.
- Em Selecionar destinos, insira as seguintes informações:
Em Destino, selecione Função do Lambda.
Em Função, selecione sua função do Lambda.
- Escolha Criar.
Para testar a função do Lambda e a regra do EventBridge, execute seu crawler do AWS Glue. Em seguida, verifique a lista de recursos de execução de trabalhos do seu trabalho de ETL do AWS Glue. O status Executar exibe Iniciando ou Executando.
Informações relacionadas
Criar regras que reagem a eventos do Amazon EventBridge