O blog da AWS

Como copiar dados do Azure Blob Storage para o Amazon S3 usando código

Por Mo Mohoboob e Chris Schoerning
Nossos clientes nos dizem que querem uma forma confiável de copiar dados do Azure Blob Storage para o Amazon Simple Storage Service (Amazon S3). Às vezes, os dados precisam ser movidos apenas uma vez, como durante uma migração por exemplo. Outras vezes, ele precisa ser copiado continuamente, como em um pipeline de dados. O que é comum entre essas solicitações é que os clientes desejam uma solução eficiente, de alto desempenho e econômica.Neste blogpost, mostraremos como criar uma aplicação segura, leve e serverless para copiar dados do Azure Blob Storage para o Amazon S3. Essa solução fornece uma maneira perfeita e eficiente de transferir dados e permite a integração programática com outras aplicações. Orientaremos você no design e compartilharemos o código para que você possa implantá-lo em sua própria conta da AWS. O código é fornecido como modelos do AWS CloudFormation e do Terraform.

Visão geral da solução

O design usa o AWS Lambda para criar uma solução serverless. A comunicação entre as funções do AWS Lambda e o Azure usa o SDK do Azure para Python. Para oferecer suporte a essa comunicação, duas bibliotecas são necessárias: uma para lidar com identidade e outra para gerenciar armazenamento. Essas bibliotecas são implantadas como camadas Lambda separadas, permitindo que sejam facilmente reutilizadas em diferentes soluções.

Cada função do Lambda tem um trabalho específico, o que melhora a escalabilidade, o desempenho e a resiliência. As funções do Lambda interagem umas com as outras usando o Amazon Simple Notification Service (Amazon SNS) para um padrão de mensagens de publicação e assinatura.

Para acionar as funções do Lambda diariamente, o Amazon EventBridge emprega uma regra do EventBridge. O cronograma pode ser modificado para atender às suas necessidades específicas.

A sequência de eventos é ilustrada na Figura 1, com setas indicando a direção da invocação. A tabela 1 descreve a ordem dos eventos.

Azure blob to Amazon S3 copy solution process flow diagram. Main Services are Amazon S3, AWS Lambda, Amazon SNS, AWS Secrets Manager, Amazon EventBridge, Azure Blob Storage, Azure AD, Entra

Figura 1: Serviços da AWS e ordem dos eventos

Etapa Descrição
1 Uma tarefa agendada do EventBridge aciona uma função Lambda para iniciar o processo de cópia de dados.
2 As funções do Lambda consultam o AWS Secrets Manager para credenciais de autenticação e parâmetros de configuração do Azure.
3 As funções do Lambda se comunicam entre si usando tópicos do SNS.
4 As funções do Lambda solicitam um token OAUTH do Azure Active Directory via HTTPS.
5 As funções do Lambda interagem com o Azure Blob Storage via HTTPS.
6 As funções do Lambda carregam dados em um bucket do Amazon S3.

Tabela 1: Ordem dos eventos

Os endpoints públicos do Armazenamento de Blobs do Azure são criptografados usando o Transport Layer Security (TLS) 1.2 por padrão. Isso garante que os dados sejam criptografados em trânsito. A partir de 5 de janeiro de 2023, todos os novos objetos enviados para o Amazon S3 são automaticamente criptografados com as chaves gerenciadas do Amazon S3 (SSE-S3). Nessa solução, empregamos criptografia do lado do servidor para o bucket usando o AWS Key Management Service (AWS KMS).

O acesso aos blobs do Azure de um serviço de aplicação principal é autorizado usando o Azure Active Directory. O ID da aplicação Azure, o ID do locatário e o segredo do cliente são armazenados com segurança no AWS Secrets Manager e recuperados pelas funções do Lambda conforme necessário.

O AWS Identity and Access Management (IAM) é um componente essencial de qualquer solução da AWS. Cada serviço da AWS só deve ter permissão para fazer o que precisa fazer no design. Refinamos as permissões para aplicar o princípio do menor privilégio.

A solução pode ser controlada usando dois parâmetros. O primeiro parâmetro, isactive, ativa ou desativa o processo de cópia. O segundo parâmetro, begindate, permite a modificação do requisito de idade mínima para os objetos a serem copiados. Para simplificar o design, esses parâmetros são armazenados no AWS Secrets Manager. As funções do Lambda podem recuperar com eficiência todos os dados necessários interagindo exclusivamente com o AWS Secrets Manager, com um impacto mínimo no custo (0,80 USD no momento da redação).

Para aumentar a observabilidade, um dashboard do Amazon CloudWatch combina métricas e registros em uma única visualização, permitindo a identificação rápida de problemas.

O processo de cópia é otimizado com base no tamanho do blob que está sendo copiado. Para blobs menores que 100 MB, as funções Lambda 1-3 são usadas, enquanto para objetos com mais de 100 MB de tamanho, as funções Lambda 1-6 são empregadas, conforme ilustrado na Figura 2.Diagram showing the flow of data through AWS Lambda functions based on Azure blob size

Figura 2: Roteamento de objetos do Amazon S3

A Figura 3 ilustra a lógica implementada nas funções do Lambda e a Tabela 2 descreve a finalidade de cada função.

Diagram showing AWS Lambda logic used within the Azure blob to Amazon S3 copy solution

Figura 3: Lógica da função Lambda

Lambda Propósito
Lambda01 (qualificação de lançamento) Verifique se o processo de cópia deve ser executado.
Lambda02 (encontre blobs) Encontre blobs do Azure que precisam ser copiados.
Lambda03 (baixar) Faz o download de blobs do Azure com menos de 100 MB de tamanho.
Lamda04 (inicializador de arquivo grande) Iniciado para blobs do Azure com mais de 100 MB de tamanho. Cria um manifesto manual de upload de várias partes em JSON.
Lambda 05 (divide arquivos grandes) Baixa blobs por intervalo de bytes como uma transferência para o fluxo de dados.
Lambda 06 (recombinador de arquivos grandes) Combina várias partes em objetos do Amazon S3

Tabela 2: Propósito da função Lambda

Omitimos alguns aspectos do design do diagrama e da tabela acima para manter a visão geral concisa. Por exemplo, adicionamos uma Amazon SNS dead-letter queue para ajudar na solução de falhas, o que não é mostrado na Figura 2.

Na próxima seção, mostraremos como implantar a solução.

Pré-requisitos

Observação: a cópia de arquivos do armazenamento de blobs do Azure para o Amazon S3 gera cobranças de saída de dados do Azure.

Passo a passo

O código deste blogpost está disponível em um repositório AWS Samples Git. No passo a passo a seguir, vamos nos concentrar em uma implantação do AWS CloudFormation. Este exercício levará cerca de 20 minutos para ser concluído.

Para implantar o AWS CloudFormation Stack:

  1. Baixe o código-fonte e extraia localmente. O arquivo contém um conjunto de pastas e arquivos. Você não precisa extrair arquivos zip individuais dentro das pastas.
  2. Faça upload de arquivos da pasta AzureBlobToAmazonS3Copy/CFN para um bucket do Amazon S3 de sua escolha. Esse será seu repositório de artefatos. A pasta contém os seguintes arquivos:

Camada Lambda azure-arm-identity.zip para identidade do Azure

Camada Lambda azure-arm-storage.zip para armazenamento do Azure

azs3copy-lambda01.zip azs3copy-lambda06.zip  Funções lambda de cópia de blob do Azure

azs3copy-stack.yaml Modelo do AWS CloudFormation

3. Depois que os arquivos tiverem sido carregados, copie a URL do objeto para azs3copy-stack.yaml, conforme mostrado na Figura 4:

Screenshot showing where to retrieve the Amazon S3 Object URL location within the S3 console

Figura 4: Recuperando a localização do URL do objeto Amazon S3

  1. Siga esta documentação para criar uma nova stack do AWS CloudFormation. Ao escolher um modelo de stack, use a URL do objeto Amazon S3 que você copiou na etapa 2.
  2. Configure os parâmetros de implantação do AWS CloudFormation. As descrições e exemplos de parâmetros estão incluídos no modelo do CloudFormation. Não altere as configurações avançadas — elas são atualmente experimentais.
  3. A implantação levará de 5 a 10 minutos. Ao terminar, uma mensagem CREATE_COMPLETE é exibida conforme ilustrado na Figura 5.

Screenshot showing AWS CloudFormation deployment complete log message

Figura 5: Mensagem completa da Stack do AWS CloudFormation

A solução agora está configurada e pronta. Ele será executado automaticamente com base na programação especificada nos parâmetros. Se você deseja iniciar uma cópia imediatamente, vá para a próxima seção.

Inicializar uma cópia manual dos dados

  1. Navegue até o console do AWS Secrets Manager e escolha o segredo criado pela implantação. Na Figura 6, você pode ver que usamos “etl” como código de prefixo.

Screenshot showing AWS Secrets Manager secret locationFigura 6: Localizando o segredo no AWS Secrets Manager

  1. Escolha Recuperar valor secreto, conforme mostrado na Figura 7.

Screenshot showing AWS Secrets Manager retrieve secret button location

Figura 7: Botão de recuperação de valor secreto de localização

  1. Observe a tecla para isactive. Alterar o valor para False desativará o processo de cópia. Revise a chave para begindate, conforme ilustrado na Figura 8. Essa é a idade mínima dos objetos a serem copiados. Certifique-se de que ele atenda às suas necessidades.

Screenshot showing AWS Secrets Manager secret values

Figura 8: Configuração secreta do AWS Secret Manager

  1. Navegue até o AWS Lambda
  2. Pesquise as funções do Lambda criadas pela implantação. Na Figura 9, você pode ver que usamos “etl” como código de prefixo

Screenshot showing how to browse AWS Lambda and identify functions used by the solution

Figura 9: Seleção de soluções: Funções Lambda

  1. Escolha a função com lambda01 no nome, conforme mostrado na Figura 10. O código Python estará visível no console.

Screenshot showing Lambda function 1 landing page

Figura 10: Selecionando lambda01

  1. Selecione a guia Teste e escolha Teste conforme ilustrado na Figura 11.

Screenshot showing location of Test button in Lambda console view

Figura 11: Visualizando o código Python da função Lambda

  1. Você deve receber uma mensagem Resultado de execução: êxito, conforme ilustrado na Figura 12.

Screenshot showing how s successful test trigger of Lambda Function 1Figura 12: A execução da função Lambda foi bem-sucedida

  1. Navegue até o bucket do Amazon S3 criado pela implantação. O nome do bucket começará com o nome da stack do AWS CloudFormation, conforme ilustrado na Figura 13. Os arquivos começarão a aparecer no diretório. Atualize a página para verificar o progresso.

Screenshot showing how to browse to Amazon S3 and locate copied Azure objectsFigura 13: Localizando objetos copiados no Amazon S3

Solução de problemas

Se não houver arquivos no bucket de destino, você pode verificar se há erros no dashboard do Amazon CloudWatch.

  1. Navegue até o Amazon CloudWatch.
  2. Selecione Dashboards à esquerda e escolha o painel criado pela implantação, conforme ilustrado na Figura 14. Neste exemplo, usamos “etl” como código de prefixo.

Screenshot showing the location of the Amazon CloudWatch dashboard used to monitor the solutionFigura 14: Localizando o painel do Amazon CloudWatch

  1. Um dashboard é exibido conforme mostrado na Figura 15. Analise os dados nos widgets para identificar possíveis erros, como segredos incorretos do aplicativo Azure ou permissões insuficientes para a conta do Azure Blob Storage.

Screenshot showing Amazon CloudWatch dashboard layoutFigura 15: Uma visão do painel do Amazon CloudWatch

No exemplo acima, copiamos 76 arquivos, totalizando 122,11 GB em 7,32 segundos.

Limpeza

Antes de excluir a stack do AWS CloudFormation, você precisará esvaziar o bucket do Amazon S3.

  1. Navegue até o Amazon S3 no Console de Gerenciamento da AWS.
  2. Escolha o bucket do Amazon S3 criado durante a implantação e verifique seu conteúdo. Você pode querer manter os dados para uso futuro. Se você quiser reter os arquivos, mova a pasta para outro bucket do Amazon S3.
  3. Quando estiver pronto, selecione o bucket do Amazon S3 e escolha Empty, conforme ilustrado na Figura 16.

Screenshot showing Empty button in Amazon S3 consoleFigura 16: Esvaziando o bucket do Amazon S3

  1. Siga as instruções na tela para confirmar a ação.
  2. Por fim, siga esta documentação para excluir o modelo do AWS CloudFormation.

Conclusão

Neste BlogPost, mostramos como você pode usar os serviços da AWS para criar um aplicativo serverless que copia dados do Azure Blob Storage para o Amazon S3 de maneira eficiente e econômica.

 

Este artigo foi traduzido do Blog da AWS em Inglês.

 


Sobre o autor

Mo Mohoboob é arquiteto sênior de soluções na AWS, especializado em cargas de trabalho da Microsoft. Mo tem paixão por tornar as coisas simples para os clientes usarem. Ele é um defensor do DevOps e adora criar soluções que ajudem os clientes a se moverem mais rapidamente. Em seu tempo livre, Mo gosta de estar ao ar livre, fazer caminhadas, jardinar e viajar para destinos distantes e fora dos roteiros mais conhecidos.

 

 

 

 

Chris Schoerning é arquiteto de soluções especialista na AWS. Ele é um defensor excêntrico do desenvolvimento de soluções Database First devido à sua experiência em desenvolvimento de banco de dados e desenvolvimento de aplicativos. Ele gosta de simplificar os processos, inicialmente complicando-os demais e depois reduzindo-os às partes necessárias. Banana.

 

 

 

 

Tradutor e Revisor

Luiz Rampanelli é um Solutions Architect no time da AWS Latam. Possui mais de 10 anos anos de experiência com workloads Microsoft em nuvem e ambientes híbridos. Atua com desenho de soluções seguindo as melhores práticas para que os clientes possam aproveitar ao máximo os benefícios da nuvem da AWS.

 

 

 

 

Diego Voltz atua como arquiteto de soluções senior no seguimento de enterprise na AWS no sul da Florida. Ele atuou por 15 anos como CTO de Startups no seguimento de Web Hosting e Health, tendo como foco virtualização, Storage e containers, hoje ajuda os clientes da AWS na jornada de adoção da nuvem e na otimização dos custos.