Orquestre um pipeline de ETL com validação, transformação e particionamento usando o AWS Step Functions - Recomendações da AWS

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á.

Orquestre um pipeline de ETL com validação, transformação e particionamento usando o AWS Step Functions

Criado por Sandip Gangapadhyay (AWS)

Repositório de código: aws-step-functions-etl -pipeline-pattern

Ambiente: produção

Tecnologias: análise; big data; lagos de dados DevOps; sem servidor

Serviços da AWS: Amazon Athena; AWS Glue; AWS Lambda; AWS Step Functions

Resumo

Esse padrão descreve como criar um pipeline de extração, transformação e carregamento (ETL) com tecnologia sem servidor para validar, transformar, compactar e particionar um grande conjunto de dados CSV para otimizar o desempenho e os custos. O pipeline é orquestrado pelo AWS Step Functions e inclui atributos de repetição automatizados, tratamento de erros e notificação de usuários.

Quando um arquivo CSV é carregado em uma pasta de origem do bucket do Amazon Simple Storage Service (Amazon S3), o pipeline de ETL começa a ser executado. O pipeline valida o conteúdo e o esquema do arquivo CSV de origem, transforma o arquivo CSV em um formato Apache Parquet compactado, particiona o conjunto de dados por ano, mês e dia e o armazena em uma pasta separada para que as ferramentas de análise possam processá-lo.

O código que automatiza esse padrão está disponível no repositório GitHub ETL Pipeline com AWS Step Functions.

Pré-requisitos e limitações

Pré-requisitos

  • Uma conta AWS ativa

  • A AWS Command Line Interface (AWS CLI) foi instalada e configurada com sua conta da AWS, para que você possa criar recursos da AWS implantando uma CloudFormation pilha da AWS. A versão 2 da AWS CLI é recomendada. Para obter instruções de instalação, consulte Instalar, atualizar e desinstalar a AWS CLI versão 2 na documentação da AWS CLI. Para obter instruções de configuração da AWS CLI, consulte Configurações do arquivo de Configurações e credenciais na documentação da AWS CLI.

  • Um bucket do Amazon S3.

  • Um conjunto de dados CSV com o esquema correto. (O repositório de código incluído nesse padrão fornece um arquivo CSV de amostra com o esquema e o tipo de dados corretos que você pode usar.)

  • Um navegador da web compatível com o Console de Gerenciamento da AWS. (Consulte a lista de navegadores compatíveis.)

  • Acesso ao console do AWS Glue.

  • Acesso ao console do AWS Step Functions.

Limitações

Versões do produto

  • Python 3.11 para AWS Lambda

  • AWS Glue versão 2.0

Arquitetura

Processo de ETL do bucket de origem do S3 por meio de Step Functions, AWS Glue e Amazon SNS em 10 etapas.

O fluxo de trabalho ilustrado no diagrama consiste nestas etapas de alto nível:

  1. O usuário carrega um arquivo CSV na pasta de origem no Amazon S3.

  2. Um evento de notificação do Amazon S3 inicia uma função do AWS Lambda que inicia a máquina de estado Step Functions.

  3. A função do Lambda valida o esquema e o tipo de dados do arquivo CSV bruto.

  4. Dependendo dos resultados da validação:

    1. Se a validação do arquivo de origem for bem-sucedida, o arquivo será movido para a pasta de estágio para processamento adicional.

    2. Se a validação falhar, o arquivo será movido para a pasta de erro e uma notificação de erro será enviada por meio do Amazon Simple Notification Service (Amazon SNS) (Amazon SNS).

  5. Um crawler do AWS Glue cria o esquema do arquivo bruto a partir da pasta de estágio no Amazon S3.

  6. Um trabalho do AWS Glue transforma, compacta e particiona o arquivo bruto no formato Parquet.

  7. O trabalho do AWS Glue também move o arquivo para a pasta de transformação no Amazon S3.

  8. O AWS Glue Crawler cria o esquema a partir do arquivo transformado. O esquema resultante pode ser usado por qualquer trabalho de análise. Você pode usar o Amazon Athena para realizar consultas ad-hoc.

  9. Se o pipeline for concluído sem erros, o arquivo do esquema será movido para a pasta de arquivamento. Se algum erro for encontrado, o arquivo será movido para a pasta de erros.

  10. O Amazon SNS envia uma notificação que indica sucesso ou falha com base no status de conclusão do pipeline.

Todos os recursos da AWS usados nesse padrão têm tecnologia sem servidor. Não há servidores para gerenciar.

Ferramentas

Serviços da AWS

  • AWS Glue: o AWS Glue é um serviço de ETL totalmente gerenciado que facilita para os clientes preparar e carregar seus dados para análise.

  • AWS Step Functions: o AWS Step Functions é um serviço de orquestração de tecnologia sem servidor que permite combinar funções do AWS Lambda e outros serviços da AWS para criar aplicações essenciais aos negócios. A partir do console gráfico do AWS Step Functions, você vê o fluxo de trabalho do seu aplicativo como uma série de etapas orientadas por eventos.

  • Amazon S3: o Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos que oferece escalabilidade líder do setor, disponibilidade de dados, segurança e performance.

  • Amazon SNS: o Amazon Simple Notification Service (Amazon SNS) é um serviço de mensagens pub/sub altamente disponível, durável, seguro e totalmente gerenciado que permite dissociar microsserviços, sistemas distribuídos e aplicativos com tecnologia sem servidor.

  • AWS Lambda: o AWS Lambda é um serviço de computação com tecnologia que pode ser usado para executar código sem provisionamento ou gerenciamento de servidores. O AWS Lambda executa o código somente quando necessário e dimensiona automaticamente, desde algumas solicitações por dia a milhares por segundo.

Código

O código desse padrão está disponível no GitHub repositório ETL Pipeline with AWS Step Functions. O repositório de código contém os seguintes arquivos e pastas:

  • template.yml— CloudFormation Modelo da AWS para criar o pipeline de ETL com o AWS Step Functions.

  • parameter.json: contém todos os parâmetros e valores de parâmetros. Você atualiza esse arquivo para alterar os valores dos parâmetros, conforme descrito na seção Épicos.

  • A pasta myLayer/python: contém os pacotes Python necessários para criar a camada necessária do AWS Lambda para esse projeto.

  • A pasta lambda: contém as seguintes funções do Lambda:

    • move_file.py: move o conjunto de dados de origem para a pasta de arquivamento, transformação ou erro.

    • check_crawler.py: verifica o status do crawler do AWS Glue quantas vezes for configurado pela variável de ambiente RETRYLIMIT , antes de enviar uma mensagem de falha.

    • start_crawler.py: inicia o crawler do AWS Glue.

    • start_step_function.py: inicia o AWS Step Functions.

    • start_codebuild.py— Inicia o CodeBuild projeto da AWS.

    • validation.py: valida o conjunto de dados brutos de entrada.

    • s3object.py: cria a estrutura de diretórios necessária dentro do bucket do S3.

    • notification.py: envia notificações de sucesso ou erro no final do pipeline.

Para usar o código de amostra, siga as instruções na seção Épicos.

Épicos

TarefaDescriçãoHabilidades necessárias

Clone o repositório de código de amostra.

  1. Abra o pipeline de ETL com o repositório AWS Step Functions.

  2. Escolha Código na página principal do repositório, acima da lista de arquivos, e copie o URL listado em Clonar com HTTPS.

  3. Altere seu diretório de trabalho para o local em que você deseja armazenar os arquivos de amostra.

  4. Em um terminal ou prompt de comando, digite o comando:

    git clone <repoURL>

    onde <repoURL> se refere ao URL que você copiou na etapa 2.

Desenvolvedor

Atualizar valores de parâmetro.

Na sua cópia local do repositório, edite o arquivo parameter.json e atualize os valores dos parâmetros padrão da seguinte forma:

  • pS3BucketName ─ O nome do bucket do S3 para armazenar os conjuntos de dados. O modelo criará esse bucket para você. O nome do bucket deve ser exclusivo globalmente.

  • pSourceFolder ─ O nome da pasta dentro do bucket do S3 que será usada para carregar o arquivo CSV de origem.

  • pStageFolder ─ O nome da pasta dentro do bucket do S3 que será usada como área de armazenamento durante o processo.

  • pTransformFolder ─ O nome da pasta dentro do bucket do S3 que será usada para armazenar conjuntos de dados transformados e particionados.

  • pErrorFolder ─ A pasta dentro do bucket do S3 para a qual o arquivo CSV de origem será movido se não puder ser validado.

  • pArchiveFolder  ─ O nome da pasta dentro do bucket do S3 que será usada para arquivar o arquivo CSV de origem.

  • pEmailforNotification ─ Um endereço de e-mail válido para receber notificações de sucesso/erro.

  • pPrefix─ Uma string de prefixo que será usada no nome do rastreador do AWS Glue.

  • pDatasetSchema ─ O esquema do conjunto de dados com o qual o arquivo de origem será validado. O pacote Cerberus Python é usado para validação do conjunto de dados de origem. Para obter mais informações, consulte o site da Cerberus.

Desenvolvedor

Carregue o código-fonte no bucket do S3.

Antes de implantar o CloudFormation modelo que automatiza o pipeline de ETL, você deve empacotar os arquivos de origem do CloudFormation modelo e carregá-los em um bucket do S3. Para fazer isso, execute o seguinte comando da CLI da AWS com seu perfil pré-configurado:

aws cloudformation package --template-file template.yml --s3-bucket <bucket_name> --output-template-file packaged.template --profile <profile_name>

onde:

  • <bucket_name> é o nome de um bucket do S3 existente na região da AWS em que você deseja implantar a pilha. Esse bucket é usado para armazenar o pacote de código-fonte do CloudFormation modelo.

  • <profile_name> é um perfil válido da AWS CLI que você pré-configurou ao configurar a AWS CLI.

Desenvolvedor
TarefaDescriçãoHabilidades necessárias

Implante o CloudFormation modelo.

Para implantar o CloudFormation modelo, execute o seguinte comando da AWS CLI:

aws cloudformation deploy --stack-name <stack_name> --template-file packaged.template --parameter-overrides file://parameter.json --capabilities CAPABILITY_IAM --profile <profile_name>

onde:

  • <stack_name>é um identificador exclusivo para a CloudFormation pilha.

  • <profile-name> é o seu perfil pré-configurado da AWS CLI.

Desenvolvedor

Verifique o andamento.

No CloudFormation console da AWS, verifique o progresso do desenvolvimento da pilha. Quando o status for CREATE_COMPLETE, a pilha foi implantada com sucesso.

Desenvolvedor

Observe o nome do banco de dados AWS Glue.

A guia Saídas da pilha exibe o nome do banco de dados do AWS Glue. O nome da chave é GlueDBOutput.

Desenvolvedor
TarefaDescriçãoHabilidades necessárias

Inicie o pipeline de ETL.

  1. Navegue até a pasta de origem (sourceou o nome da pasta que você definiu no arquivo parameter.json) dentro do bucket do S3.

  2. Faça upload de um arquivo CSV de amostra para essa pasta. (O repositório de código fornece um arquivo de amostra chamado Sample_Bank_Transaction_Raw_Dataset.csv que você pode usar.) O upload do arquivo iniciará o pipeline de ETL por meio de Step Functions.

  3. No console Step Functions, verifique o status do pipeline de ETL.

Desenvolvedor

Verifique o conjunto de dados particionado.

Quando o pipeline de ETL for concluído, verifique se o conjunto de dados particionado está disponível na pasta de transformação do Amazon S3 (transform, ou no nome da pasta que você definiu no arquivo parameter.json).

Desenvolvedor

Verifique o banco de dados AWS Glue particionado.

  1. No console do AWS Glue, selecione o banco de dados AWS Glue criado pela pilha (esse é o banco de dados que você observou no épico anterior).

  2. Verifique se a tabela particionada está disponível no Catálogo de dados do AWS Glue.

Desenvolvedor

Executar consultas.

(Opcional) Use o Amazon Athena para executar consultas ad-hoc no banco de dados particionado e transformado. Para obter instruções, consulte Como executar consultas SQL usando o Amazon Athena na documentação da AWS.

Analista de banco de dados

Solução de problemas

ProblemaSolução

Permissões do AWS Identity and Access Management (IAM) para o trabalho e o rastreador do AWS Glue

Se você personalizar ainda mais a tarefa do AWS Glue ou o rastreador, certifique-se de conceder as permissões apropriadas do IAM na função do IAM usada pela tarefa do AWS Glue ou fornecer permissões de dados ao AWS Lake Formation. Para obter mais informações, consulte a documentação da AWS.

Recursos relacionados

Documentação do serviço da AWS

Mais informações

O diagrama a seguir mostra o fluxo de trabalho do AWS Step Functions para um pipeline de ETL bem-sucedido, a partir do painel Step Functions Inspector.

Fluxo de trabalho do Step Functions para validar o .csv de entrada, rastrear dados e executar o trabalho do AWS Glue.

O diagrama a seguir mostra o fluxo de trabalho do AWS Step Functions para um pipeline de ETL que falha devido a um erro de validação de entrada, no painel Step Functions Inspector.

Fluxo de trabalho do Step Functions com falha, então o arquivo é movido para a pasta de erro.