O blog da AWS

Como migrar do Google Cloud Storage para o Amazon S3 usando o AWS DataSync

Por Brian Choi Arquiteto de Solução na AWS

 

Por muitas vezes, empresas precisam migrar grandes volumes de dados de um provedor de nuvem para outro. As motivações para esse tipo de migração podem ser, por exemplo, a consolidação de dados em um único local, migração de cargas de trabalho, recuperação de desastres ou término de um programa de descontos. Esse tipo de migração geralmente requer criptografia de ponta a ponta, capacidade de detectar alterações, validação de objetos, controle de utilização de rede, monitoramento e otimização de custos. Construir essas soluções do zero é demorado, caro e difícil de dimensionar. Além disso, a migração entre provedores de nuvem possui algumas limitações como, por exemplo, ter acesso fisicamente aos dispositivos de armazenamento no data center.

Neste blog, vamos percorrer o passo a passo de uma migração de dados baseados em objetos do Google Cloud Storage para o Amazon Simple Storage Service (S3) usando o AWS DataSync. Vamos começar com uma visão geral do AWS DataSync, destacando as funcionalidades específicas para esse caso de uso. Em seguida, vamos ao passo a passo da configuração do DataSync para o Amazon S3.

Visão geral do AWS DataSync

O AWS DataSync é um serviço de migração de dados que simplifica, automatiza e acelera a movimentação de dados entre os próprios serviços de armazenamento da AWS, como também entre os serviços de armazenamento da AWS, do Google Cloud Storage e do Microsoft Azure Files. As funcionalidades do AWS DataSync incluem criptografia de dados, validação, monitoramento, programação de tarefas, auditoria e escalabilidade.

Especificamente para o Google Cloud Storage, o AWS DataSync tem integração nativa com a API XML do Google Storage. Trata-se de uma interface RESTful que permite que aplicações manipulem objetos do Google Cloud Storage de forma programática. O DataSync se conecta à API XML do Google Storage com uma chave baseada em hash chamada de HMAC (Hash-based Message Authentication Code). A chave HMAC do Google Cloud Platform (GCP) contém um “Access ID” e um “Secret” que pode ser configurado com as permissões necessárias para acessar os objetos do Google Cloud Storage. Com o AWS DataSync, você não precisa criar um código personalizado para migrar dados do Google Cloud Storage e ainda obtém o benefício de todas as funcionalidades incluídas no DataSync.

 Componentes e terminologia do AWS DataSync

O DataSync tem quatro componentes para a movimentação de dados: tarefa (“Task”), local (“Location”), agente (“Agent”) e a execução (“Task Execution”). A Figura 1 mostra a relação entre os componentes e os atributos que usaremos nesse exemplo.

 

DataSync has four components for data movement: task, locations, agent, and task execution.

Figura 1: Os quatro componentes principais do AWS DataSync

 

  • Agente (“Agent”): uma máquina virtual (VM) que lê dados de um local autogerenciado ou grava dados em um local autogerenciado. Nesse exemplo, o agente do DataSync é mapeado para uma instância do Amazon EC2 em execução dentro de uma Amazon VPC.
  • Local (“Location”): o local de origem (“source”) e destino (“destination”) para a migração de dados. Nesse exemplo, o local de origem é um repositório que aponta para a API XML do Google Storage (https://storage.googleapis.com), com o nome do bucket Google Storage. Já o local de destino é um bucket do Amazon S3.
  • Tarefa (“Task”): Uma tarefa consiste em local de origem, local de destino e a configuração que define como os dados são movidos. Uma tarefa sempre move dados de uma origem para um destino. A configuração pode incluir opções como padrões de inclusão/exclusão, programação de tarefas, limites de largura de banda e outras funcionalidades.
  • Execução da tarefa (“Task Automation”): Representa a execução individual de uma tarefa, que inclui informações como hora de início, hora de término, bytes gravados e status.

 

Como migrar dados do Google Cloud Storage para o Amazon S3 com o AWS DataSync

Nesse exemplo, vamos percorrer o passo a passo da configuração do AWS DataSync para migrar objetos do Google Cloud Storage para o Amazon S3. Na Figura 2, temos a arquitetura básica do AWS DataSync utilizando um único agente. Os objetos de origem a serem migrados estão em um bucket do Google Cloud Storage. O destino trata-se de um bucket do Amazon S3.

Architectural diagram illustrates a single AWS DataSync agent’s cross-cloud connectivity between Google Cloud Storage and Amazon S3 using the AWS DataSync service endpoint.

Figura 2: Arquitetura do AWS DataSync utilizando um único agente

 

O AWS DataSync é composto de vários componentes, começando com o agente. Nessa arquitetura, o agente é implantado como uma instância do Amazon Elastic Compute Cloud (Amazon EC2) em uma sub-rede (“Subnet”) dentro da Amazon Virtual Private Cloud (Amazon VPC). A sub-rede contém um VPC Endpoint para o AWS DataSync que permite que o tráfego flua de forma privada do agente do AWS DataSync para o Amazon S3. O agente do AWS DataSync se conecta ao Google Cloud Storage pela Internet usando uma chave HMAC.

Pré-requisitos para esse exemplo

Para este exemplo, os seguintes pré-requisitos devem ser atendidos:

  • Uma conta da AWS
  • Interface de linha de comando (CLI) da AWS
  • Bucket do Google Cloud Storage com objetos de origem para transferência

Visão geral da origem — bucket do Google Cloud Storage

Nesse exemplo, temos um bucket de origem no Google Cloud Storage chamado de demo-customer-bucket. Esse bucket possui duas pastas: business-data e system-data. Nesse exemplo, vamos transferir somente os objetos da pasta business-data e ignorar a pasta system-data. A intenção é demonstrar a capacidade do AWS DataSync de incluir ou excluir pastas do bucket de origem.

Google Cloud Storage bucket as source with two folders.

Figura 3: Bucket de origem no Google Cloud Storage

 

Dentro da pasta business-data, existem seis arquivos. Nosso objetivo aqui é transferir cinco arquivos de texto e ignorar o arquivo chamado de log.tmp. A intenção aqui é demonstrar a capacidade do AWS DataSync de excluir determinados objetos com base no nome do arquivo.

Google Cloud Storage bucket contains five objects to transfer and one temp file to ignore.

Figura 4: Objetos de origem no bucket do Google Cloud Storage

 

Passo a passo

Agora estamos prontos para executar a movimentação de dados entre o Google Cloud Storage e o Amazon S3 usando o AWS DataSync. Abaixo, temos o passo a passo em alto nível:

  1. Crie uma chave HMAC do Google Cloud Platform.
  2. Crie um bucket do Amazon S3 como destino.
  3. Crie uma função do AWS Identity and Access Management (IAM) para acessar o bucket do Amazon S3.
  4. Configure uma sub-rede em uma Amazon VPC.
  5. Instale o agente do AWS DataSync em uma instância Amazon EC2.
  6. Crie os locais do AWS DataSync
    • Google Cloud Storage como origem
    • Amazon S3 como destino
  7. Crie e execute a tarefa do AWS DataSync
    • Crie uma tarefa no DataSync — Location
  8. Verifique os dados migrados

Etapa 1: criar uma chave HMAC do GCP

O agente do AWS DataSync usa uma credencial HMAC para se autenticar no Google Cloud Platform e gerenciar objetos de um bucket do Google Cloud Storage. Isso requer a criação de uma chave para uma conta de serviço (“Service Account”). Você pode seguir as instruções detalhadas nesse link. Quando concluído, você deve ter um Access ID e um Secret. Mantenha essas informações em um local seguro.

A conta de serviço precisa das permissões necessárias para que o agente do AWS DataSync possa se conectar e migrar os objetos. Você pode utilizar uma role existente chamada de Storage Object Viewer para conceder essa permissão.

 

Google Cloud Storage principal role needed to read from source bucket.

Figura 5: Permissões no Google Cloud Storage

 

Você pode limitar ainda mais o acesso à essa role adicionando uma condição para dar permissão apenas quando o nome do recurso começar com projects/_/buckets/demo-customer-bucket, onde demo-customer-bucket é o nome do bucket de origem. Observe que a condição utiliza “Starts with”. Isso vai permitir que o privilégio seja concedido para o bucket como também para os objetos dentro do bucket usando uma única instrução.

Expressão CEL (Common Expression Language):

resource.name.startsWith(“projects/_/buckets/demo-customer-bucket”)

Google Cloud Storage principal role with the condition to only allow read from source bucket.

Figura 6: Condições de permissão no Google Cloud Storage

 

Etapa 2: criar um bucket S3 no destino

Crie um novo bucket do Amazon S3 que será usado como o destino para a transferência do AWS DataSync. Depois de criar o bucket, copie o Amazon Resource Name (ARN) nas propriedades do bucket.

Amazon S3 bucket Properties tab contains the Amazon Resource Name (ARN).

Figura 7: Amazon Resource Name (ARN) no bucket Amazon S3

 

Etapa 3: criar uma função do AWS IAM para acessar o bucket Amazon S3

O AWS DataSync precisa acessar o bucket do Amazon S3 para transferir os dados para o bucket de destino. Isso exige que o AWS DataSync assuma uma função do AWS IAM com a permissão e a relação de confiança apropriada. Crie uma nova função (“Role”) e anexe uma política (“Policy”) que permita que o AWS DataSync leia e grave em seu bucket do Amazon S3.

Etapa 4: configuração da rede para o Amazon VPC endpoint

Crie a Amazon VPC, a sub-rede (“Subnet”), a tabela de rotas (“Routing Table”) e o grupo de segurança (“Security Group”) com base nos requisitos de rede ao usar VPC endpoints. Em seguida, crie um VPC endpoint de interface (“Interface VPC Endpoint”) para o AWS DataSync. Com esse endpoint, a conexão entre o agente e o AWS DataSync não atravessa a Internet e dispensa a utilização de IP público.

Etapa 5: instalação do agente do AWS DataSync como uma instância Amazon EC2

A próxima etapa é instalar o agente do AWS DataSync como uma instância do Amazon EC2. A instância utiliza a Amazon Machine Image (AMI) mais recente do AWS DataSync e deve ser colocada na sub-rede (“Subnet”) criada na etapa anterior com o devido grupo de segurança (“Security Group”). Quando a instância estiver em execução, crie um componente do agente do AWS DataSync utilizando o VPC endpoint. Finalmente, ative seu agente para associá-lo à sua conta da AWS.

Etapa 6: criar os locais (origem e destino) do AWS DataSync

Crie os locais de origem e destino do AWS DataSync usando as etapas a seguir.

Google Cloud Storage (origem)

  1. Abra o console do AWS DataSync e escolha Locations. Em seguida, selecione a opção Create Location.
  2. Em Location Type, selecione Object Storage.
  3. Em Agents, selecione o agente que foi ativado na etapa anterior.
  4. Em Server, digite “storage.googleapis.com”
  5. Em Bucket name, digite o nome do bucket de origem no Google Cloud Storage. Neste exemplo, chama-se “demo-customer-bucket”. Observe que o nome do bucket diferencia maiúsculas de minúsculas.
  6. Para autenticação, informe o Access ID e o Secret da chave HMAC do Google Cloud Platform que foram obtidos na Etapa 1.
  7. Selecione Criar local.

 

Configuration of DataSync source location for Google Cloud Storage.

Figura 8: Google Cloud Storage como local de origem no AWS DataSync

 

Localização do Amazon S3

  1. Abra o console do AWS DataSync e selecione Locations. Em seguida, selecione a opção Create Location.
  2. Em Location Type, selecione Amazon S3.
  3. Selecione o bucket S3 de destino criado na Etapa 2.
  4. Em IAM Role, selecione a função do IAM criada na Etapa 3.
  5. Selecione Create Location.

 

Configuration of DataSync destination location for Amazon S3.

Figura 9: Bucket do Amazon S3 como destino no AWS DataSync

 

Etapa 7: criar e executar uma tarefa do AWS DataSync

A próxima etapa é criar uma tarefa (“Task”) do AWS DataSync. Siga estas etapas para criar uma tarefa começando com a configuração dos locais de origem e destino (“source and destination locations).

Crie uma tarefa do AWS DataSync: Location

  1. Abra o console do AWS DataSync e escolha Tasks. Em seguida, selecione Create Task.
  2. Em source location options, selecione Choose an existing location. Em Existing Locations, selecione object-storage://storage.googleapis.com/<bucket name>/ conforme vimos na Etapa 6. Em seguida, selecione Next.
  3. Para Destination location options, selecione Choose an existing location. Selecione s3:// <bucket name>/ conforme vimos na Etapa 6. Em seguida, selecione Next. Isso abre a página Configure settings.
  4. Selecione Next.

Criar uma tarefa do AWS DataSync: Configure settings

A próxima etapa é definir as configurações para a tarefa do AWS DataSync.

  1. Em Task Name, insira o nome da tarefa.
  2. Em Data transfer configuration, selecione a opção Specific files and folders para especificar a subpasta usando os padrões de inclusão.
  3. Em Transfer mode, selecione Transfer only data that has changed.
    • Desmarque a opção Keep deleted files. Observe que, com essa opção desmarcada, se o objeto de origem for excluído no bucket do Google Cloud Storage, a tarefa vai excluir o objeto correspondente no bucket do Amazon S3. Esse é o comportamento que queremos nessa demonstração para mantermos Amazon S3 em sincronia com a origem, pois o bucket de origem é considerado o repositório primário ativo.
    • Marque Overwrite files. Isso significa que, se a tarefa detectar que o objeto de origem e de destino são diferentes, a tarefa vai substituir o objeto de destino no Amazon S3. Esse é o comportamento que queremos manter pois o Amazon S3 precisa estar sincronia com o bucket de origem.
    • Em Include patterns, insira “/business-data/*”. Utilizando os padrões de inclusão, você pode filtrar os objetos transferidos para o escopo do caminho especificado. Lembre-se que os padrões de inclusão diferenciam maiúsculas de minúsculas.
    • Em Exclude patterns, selecione Add pattern. Para Pattern, insira “*.tmp”. Ao usar esse filtro de exclusão, a tarefa vai ignorar qualquer objeto que termine com um nome .tmp. Lembre-se que os padrões de exclusão diferenciam maiúsculas de minúsculas.
    • Em Additional settings, desmarque Copy object tags. Isso evita a tentativa de ler tags no Google Cloud Storage que não são suportadas.
  4. Com relação aos logs da tarefa, queremos que o AWS DataSync armazene os logs detalhados no Amazon CloudWatch, o serviço nativo de observabilidade da AWS. Em Log level, selecione Log all transferred objects and files. Em nossa demonstração, temos um pequeno número de arquivos. Se você tiver um grande volume de arquivos, é preciso levar em consideração o custo do Amazon CloudWatch. Para obter mais informações, consulte esse link.
    • Em CloudWatch log group, selecione Autogenerate. Isso vai criar a política apropriada e o grupo de logs no Amazon CloudWatch. Em seguida, selecione Next. Revise a configuração da tarefa.
  5. Selecione Create task e aguarde até que Task status mude para Available.

 

DataSync task configuration settings with include and exclude patterns.

Figura 10: Configuração de uma tarefa no AWS DataSync

 

Executando a tarefa do AWS DataSync

Por fim, a última etapa é iniciar a tarefa do AWS DataSync para transferir os arquivos. O status da tarefa será atualizado à medida que a Mesma passar por cada uma das fases. Consulte esse link para entender os possíveis status e significados. Você também pode monitorar o AWS DataSync usando o Amazon CloudWatch.

Etapa 8: verificar os dados migrados

Agora você pode verificar os objetos migrados do Google Cloud Storage para o bucket do Amazon S3. Navegue até o bucket de destino no Amazon S3 e abra a pasta business-data. Os cinco arquivos agora devem ter sido transferidos para o bucket do Amazon S3. Observe que o arquivo log.tmp não foi transferido porque nossa tarefa tinha um filtro de exclusão *.tmp, que desconsiderou esse arquivo durante a transferência.

Você também pode executar a mesma tarefa várias vezes. Sempre que a tarefa for executada, o AWS DataSync detectará as alterações entre a origem e o destino e transferirá apenas os objetos novos ou modificados. Isso permite que você transfira dados que foram alterados no local de origem.

DataSync transferred objects from Google Cloud Storage bucket to S3 bucket.

Figura 11: Objetos transferidos da origem para o destino

 

O AWS DataSync também transfere os metadados dos objetos. Nesse exemplo, o arquivo file-1.txt tinha um metadado personalizado de Department com valor de Math. Esses metadados também foram transferidos para o Amazon S3.

DataSync transferred object metadata from Google Cloud Storage bucket to Amazon S3 bucket.

Figura 12: Metadados transferidos da origem para o destino

 

Efetuando a limpeza

Para evitar cobranças adicionais, exclua os recursos que foram criados durante esse exemplo:

  1. Desative a chave HMAC do GCP. Em seguida, exclua a chave HMAC do GCP e também o bucket do Google Cloud Storage.
  2. Exclua a tarefa, os locais e o agente do AWS DataSync.
  3. Encerre a instância do Amazon EC2.
  4. Exclua o Amazon VPC endpoint.
  5. Exclua o bucket do Amazon S3.

 

Conclusão

Nesse blog post, vimos como o AWS DataSync pode migrar armazenamento baseado em objetos do Google Cloud Storage para o Amazon S3. Percorremos a configuração do AWS DataSync para migrar objetos de um bucket do Google Cloud Storage para um bucket do Amazon S3. Também pudemos testar como é possível incluir e excluir pastas e objetos do bucket de origem.

Usando o AWS DataSync, você pode simplificar a migração de um grande volume de dados do Google Cloud Platform para o Amazon S3. O AWS DataSync possui recursos nativos que permitem que você se conecte ao Google Cloud Storage por meio da API XML do Google Storage utilizando uma chave HMAC. Com o exemplo que utilizamos nesse blog post, você pode testar os recursos do AWS DataSync com a possibilidade de executar as tarefas várias vezes para capturar alterações feitas no local de origem.

Abaixo estão outros links úteis para ajudar você a começar a usar o AWS DataSync:

Obrigado por ler esse blog post sobre como migrar do Google Cloud Storage para o Amazon S3 usando o AWS DataSync. Fique à vontade para compartilhar sua dúvida ou comentário na seção de comentários abaixo.

 

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

 


Sobre o autor

Brian é arquiteto de soluções sênior na Amazon Web Service (AWS). Brian integra a equipe de Setor Público na AWS e ajuda os clientes da área de educação nos EUA. Ele é especialista em migração e modernização de cargas de trabalho na AWS.

 

 

 

 

Revisores

Pedro Calixto é arquiteto de soluções especialista em migrações na AWS. Pedro integra a equipe de Cloud Acceleration para a América Latina. Seu foco é ajudar empresas a exceder resultados de negócio, acelerando a migração e a modernização de workloads para a AWS de forma escalável.

 

 

 

 

Davi Garcia é Arquiteto Especialista de Soluções, focado em Modernização de Aplicações na AWS, e ajuda clientes de diversos segmentos na América Latina. Possui larga experiência em plataforma de containers e automação de infraestrutura. Ele gosta de contribuir com projetos open-source, se divertir em família com jogos de tabuleiros e velejar.