Organize um pipeline de ETL com validação, transformação e particionamento usando 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á.

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

Sandip Gangapadhyay, Amazon Web Services

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 AWS Step Functions e inclui recursos de tratamento de erros, repetição automática e notificação ao usuário.

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 em GitHub, no pipeline ETL com AWS Step Functions repositório.

Pré-requisitos e limitações

Pré-requisitos

  • Um ativo Conta da AWS.

  • AWS Command Line Interface (AWS CLI) instalado e configurado com o seu Conta da AWS, para que você possa criar AWS recursos implantando uma AWS CloudFormation pilha. Recomendamos usar a AWS CLI versão 2. Para obter instruções, consulte Instalação ou atualização para a versão mais recente do AWS CLI na AWS CLI documentação. Para obter instruções de configuração, consulte Configurações e configurações do arquivo de credenciais na AWS CLI documentação.

  • 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 que suporta AWS Management Console o. (Consulte a lista de navegadores compatíveis.)

  • AWS Glue acesso ao console.

  • AWS Step Functions acesso ao console.

Limitações

  • Em AWS Step Functions, o limite máximo para manter registros históricos é de 90 dias. Para obter mais informações, consulte as cotas de serviço do Step Functions na AWS Step Functions documentação.

Versões do produto

  • Python 3.13 para AWS Lambda

  • AWS Glue versão 4.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 AWS Lambda função que inicia a AWS Step Functions máquina de estado.

  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 AWS Glue rastreador cria o esquema do arquivo bruto a partir da pasta de estágio no Amazon S3.

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

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

  8. O AWS Glue rastreador 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 AWS recursos usados nesse padrão não têm servidor. Não há servidores para gerenciar.

Ferramentas

Serviços da AWS

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

  • AWS Step Functions— AWS Step Functions é um serviço de orquestração sem servidor que permite combinar AWS Lambda funções e outras Serviços da AWS para criar aplicativos essenciais para os negócios. Por meio do console AWS Step Functions gráfico, 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 altamente disponível, durável, seguro e totalmente pub/sub gerenciado que permite dissociar microsserviços, sistemas distribuídos e aplicativos sem servidor.

  • AWS Lambda— AWS Lambda é um serviço de computação que permite executar código sem provisionar ou gerenciar servidores. AWS Lambda executa seu código somente quando necessário e escala automaticamente, de algumas solicitações por dia a milhares por segundo.

Código

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

  • template.yml— AWS CloudFormation modelo para criar o pipeline ETL com 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.

  • myLayer/pythonpasta — Contém os pacotes Python necessários para criar a AWS Lambda camada necessária para este 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 AWS Glue rastreador quantas vezes for configurado pela variável de RETRYLIMIT  ambiente antes de enviar uma mensagem de falha.

    • start_crawler.py— Inicia o AWS Glue rastreador.

    • start_step_function.py— Começa AWS Step Functions.

    • start_codebuild.py— Inicia o AWS CodeBuild projeto.

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

    • s3object.py— Cria a estrutura de diretórios necessária dentro do bucket do Amazon 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 AWS Step Functions repositório.

  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 Amazon 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 Amazon S3 que será usada para fazer o upload do arquivo CSV de origem.

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

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

  • pErrorFolder─ A pasta dentro do bucket do Amazon 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 Amazon S3 que será usada para arquivar o arquivo CSV de origem.

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

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

  • 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

Faça o upload do código-fonte no bucket do Amazon S3.

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

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

em que:

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

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

Desenvolvedor
TarefaDescriçãoHabilidades necessárias

Implante o CloudFormation modelo.

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

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

em que:

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

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

Desenvolvedor

Verifique o andamento.

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

Desenvolvedor

Anote o nome do AWS Glue banco de dados.

A guia Saídas da pilha exibe o nome do banco de dados. 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 parameter.json arquivo) dentro do bucket do Amazon 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 AWS Glue banco de dados particionado.

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

  2. Verifique se a tabela particionada está disponível no AWS Glue Data Catalog.

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 Executar consultas SQL no Amazon Athena na AWS documentação.

Analista de banco de dados

Solução de problemas

ProblemaSolução

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

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

Recursos relacionados

AWS service (Serviço da AWS) documentação

Mais informações

O diagrama a seguir mostra o AWS Step Functions fluxo de trabalho de um pipeline ETL bem-sucedido, a partir do painel AWS 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 AWS Step Functions fluxo de trabalho de 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.