O Serviço de transferência do Cloud Storage pode detectar notificações de eventos na AWS ou no Google Cloud para transferir automaticamente dados que foram adicionados ou atualizados no local de origem. As transferências baseadas em eventos são compatíveis com o AWS S3 ou o Cloud Storage para o Cloud Storage.
As transferências orientadas a eventos detectam notificações de eventos do Amazon S3 (em inglês). enviados ao Amazon SQS para origens da AWS S3. As origens do Cloud Storage enviam notificações para uma assinatura do Pub/Sub.
Benefícios das transferências baseadas em eventos
Como as transferências baseadas em eventos detectam alterações no bucket de origem, as atualizações são copiadas para o destino quase em tempo real. O Serviço de transferência do Cloud Storage não precisa executar uma operação de lista na origem, economizando tempo e dinheiro.
Os casos de uso incluem:
Análise orientada por eventos: replique dados da AWS para o Cloud Storage para executar análises e processamento.
Replicação do Cloud Storage: ative a replicação de objetos automática e assíncrona entre os buckets do Cloud Storage.
As transferências orientadas por eventos com o Serviço de transferência do Cloud Storage são diferentes da replicação típica do Cloud Storage, porque uma cópia dos dados é criada em um bucket diferente.
Isso oferece benefícios como:
- manter dados de desenvolvimento e produção em namespaces separados;
- compartilhar dados sem fornecer acesso ao bucket original;
- fazer backup para um continente diferente ou para uma área não coberta pelo armazenamento birregional e multirregional.
Configuração de DR/HA: replique objetos da origem para o destino de backup em minutos:
- Backup entre nuvens: crie uma cópia do backup do AWS S3 no Cloud Storage.
- Backup entre regiões ou entre projetos: crie uma cópia do bucket do Cloud Storage em uma região ou projeto diferente.
Migração em tempo real: a transferência baseada em eventos pode potencializar a migração de baixa inatividade, em minutos de inatividade, como uma etapa de acompanhamento à migração em lote única.
Configurar transferências baseadas em eventos do Cloud Storage
As transferências orientadas por eventos do Cloud Storage usam notificações do Pub/Sub para saber quando os objetos no bucket de origem foram modificados ou adicionados. As exclusões de objetos não são detectadas. Excluir um objeto na origem não exclui o objeto associado no bucket de destino.
Configurar permissões
Encontre o nome do agente de serviço do Serviço de transferência do Cloud Storage para seu projeto:
Acesse a página de referência de
googleServiceAccounts.get
.Você verá um painel interativo com o título Testar este método.
No painel, em Parâmetros de solicitação, insira o ID do projeto. O projeto especificado aqui precisa ser o projeto que você está usando para gerenciar o Serviço de transferência do Cloud Storage, que pode ser diferente do projeto do bucket de origem.
Clique em Execute.
O e-mail do agente de serviço é retornado como o valor de
accountEmail
. Copie esse valor.O e-mail do agente de serviço tem o formato
project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com
.Conceda esse papel ao
Pub/Sub Subscriber
agente do Serviço de transferência do Cloud Storage.console do Cloud
Siga as instruções em Como controlar o acesso usando o console do Google Cloud para conceder o papel
Pub/Sub Subscriber
ao serviço de serviço de transferência do Cloud Storage. O papel pode ser concedido no nível do tópico, da assinatura ou do projeto.CLI
gcloud
Siga as instruções em Como definir uma política para adicionar a seguinte vinculação:
{ "role": "roles/pubsub.subscriber", "members": [ "serviceAccount:project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com" }
Configurar o Pub/Sub
Verifique se você atende aos Pré-requisitos para usar o Pub/Sub com o Cloud Storage.
Configurar notificação do Pub/Sub para o Cloud Storage:
gcloud storage buckets notifications create gs://BUCKET_NAME --topic=TOPIC_NAME
Criar uma assinatura de pull no tópico:
gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_NAME --ack-deadline=300
Criar um job de transferência
Use a API REST ou o console do Google Cloud para criar um job de transferência baseado em eventos.
Não inclua informações sensíveis, como informações de identificação pessoal (PII, na sigla em inglês) ou dados de segurança no nome do job de transferência. Os nomes dos recursos podem ser propagados para os nomes de outros recursos do Google Cloud e podem ser expostos aos sistemas internos do Google fora do seu projeto.
console do Cloud
Acesse a página Criar job de transferência no console do Google Cloud.
Selecione Cloud Storage como origem e destino.
No Modo de programação, selecione Baseado em eventos e clique em Próxima etapa.
Selecione o bucket de origem dessa transferência.
Na seção Fluxo de eventos, insira o nome da assinatura:
projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID
Se quiser, defina qualquer filtro e clique em Próxima etapa.
Selecione o bucket de destino dessa transferência.
Também é possível digitar um horário de início e de término para a transferência. Se você não especificar um horário, a transferência vai ser iniciada imediatamente e executada até ser interrompida manualmente.
Especifique as opções de transferência. Veja mais informações na página Criar transferências.
Clique em Criar.
Depois de criado, o job de transferência começa a ser executado e um listener de eventos aguarda notificações na assinatura do Pub/Sub. A página de detalhes do job mostra uma operação a cada hora e contém detalhes sobre os dados transferidos em cada job.
REST
Para criar uma transferência baseada em eventos usando a API REST, envie o seguinte objeto JSON para o endpoint transferJobs.create:
transfer_job { "description": "YOUR DESCRIPTION", "status": "ENABLED", "projectId": "PROJECT_ID", "transferSpec" { "gcsDataSource" { "bucketName": "GCS_SOURCE_NAME" }, "gcsDataSink": { "bucketName": "GCS_SINK_NAME" } } "eventStream" { "name": "projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID", "eventStreamStartTime": "2022-12-02T01:00:00+00:00", "eventStreamExpirationTime": "2023-01-31T01:00:00+00:00" } }
O eventStreamStartTime
e o eventStreamExpirationTime
são opcionais.
Se o horário de início for omitido, a transferência começará imediatamente. Se o horário de
término for omitido, a transferência continuará até que seja interrompida manualmente.
Bibliotecas de cliente
Go
Para saber como instalar e usar a biblioteca de cliente do Serviço de transferência do Cloud Storage, consulte Bibliotecas de clientes do Serviço de transferência do Cloud Storage. Para mais informações, consulte a Documentação de referência da API Go do Serviço de transferência do Cloud Storage.
Para autenticar o Serviço de transferência do Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Java
Para saber como instalar e usar a biblioteca de cliente do Serviço de transferência do Cloud Storage, consulte Bibliotecas de clientes do Serviço de transferência do Cloud Storage. Para mais informações, consulte a Documentação de referência da API Java do Serviço de transferência do Cloud Storage.
Para autenticar o Serviço de transferência do Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca de cliente do Serviço de transferência do Cloud Storage, consulte Bibliotecas de clientes do Serviço de transferência do Cloud Storage. Para mais informações, consulte a Documentação de referência da API Node.js do Serviço de transferência do Cloud Storage.
Para autenticar o Serviço de transferência do Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Python
Para saber como instalar e usar a biblioteca de cliente do Serviço de transferência do Cloud Storage, consulte Bibliotecas de clientes do Serviço de transferência do Cloud Storage. Para mais informações, consulte a Documentação de referência da API Python do Serviço de transferência do Cloud Storage.
Para autenticar o Serviço de transferência do Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Configurar transferências baseadas em eventos do AWS S3
As transferências baseadas em eventos do AWS S3 usam notificações do Amazon Simple Queue Service (SQS) para saber quando os objetos no bucket de origem foram modificados ou adicionados. As exclusões de objetos não são detectadas. Excluir um objeto na origem não exclui o objeto associado no bucket de destino.
Criar uma fila do SQS
No console da AWS, acesse a página Simple Queue Service.
Clique em Criar fila.
Insira um Nome para essa fila.
Na seção Política de acesso, selecione Avançado. Um objeto JSON é exibido:
{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__owner_statement", "Effect": "Allow", "Principal": { "AWS": "01234567890" }, "Action": [ "SQS:*" ], "Resource": "arn:aws:sqs:us-west-2:01234567890:test" } ] }
Os valores de
AWS
eResource
são exclusivos para cada projeto.Copie os valores específicos de
AWS
eResource
do JSON exibido para o seguinte snippet JSON:{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "SQS:SendMessage", "Resource": "RESOURCE", "Condition": { "StringEquals": { "aws:SourceAccount": "AWS" }, "ArnLike": { "aws:SourceArn": "S3_BUCKET_ARN" } } } ] }
Os valores dos marcadores de posição no JSON anterior usam este formato:
- AWS é um valor numérico que representa o projeto do Amazon Web Services. Por exemplo,
"aws:SourceAccount": "1234567890"
. - RESOURCE é um Número de Recurso da Amazon (ARN) que identifica
essa fila. Por exemplo,
"Resource": "arn:aws:sqs:us-west-2:01234567890:test"
. - S3_BUCKET_ARN é um ARN que identifica o bucket de origem. Por exemplo,
"aws:SourceArn": "arn:aws:s3:::example-aws-bucket"
. É possível encontrar o ARN de um bucket na guia Propriedades da página de detalhes do bucket no console da AWS.
- AWS é um valor numérico que representa o projeto do Amazon Web Services. Por exemplo,
Substitua o JSON exibido na seção Política de acesso pelo JSON atualizado acima.
Clique em Criar fila.
Quando for concluído, anote o nome de recurso da Amazon (ARN) na fila. O ARN tem o seguinte formato:
arn:aws:sqs:us-east-1:1234567890:event-queue"
Ativar notificações no bucket S3
No console da AWS, acesse a página S3.
Na lista Buckets, selecione o bucket de origem.
Selecione a guia Propriedades.
Na seção Notificações de eventos, clique em Criar notificações de eventos.
Especifique um nome para esse evento.
Na seção Tipos de evento, selecione Todos os eventos de criação de objeto.
Em Destino, selecione Fila SQS e selecione a fila criada para essa transferência.
Clique em Salvar alterações.
Configurar permissões
Siga as instruções em Configurar o acesso a uma origem: Amazon S3 para criar um ID de chave de acesso e uma chave secreta, ou um papel de identidade federada.
Substitua o JSON de permissões personalizadas pelo seguinte:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:ChangeMessageVisibility", "sqs:ReceiveMessage", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::AWS_BUCKET_NAME", "arn:aws:s3:::AWS_BUCKET_NAME/*", "AWS_QUEUE_ARN" ] } ] }
Após a criação, observe as seguintes informações:
- Para um usuário, anote o ID da chave de acesso e a chave secreta.
- Para um papel de identidade federada, anote o Amazon Resource Name (ARN),
que tem o formato
arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME
.
Criar um job de transferência
Use a API REST ou o console do Google Cloud para criar um job de transferência baseado em eventos.
console do Cloud
Acesse a página Criar job de transferência no console do Google Cloud.
Selecione Amazon S3 como o tipo de origem e Cloud Storage como destino.
No Modo de programação, selecione Baseado em eventos e clique em Próxima etapa.
Insira o nome do bucket S3. O nome do bucket é o nome exibido no AWS Management Console. Por exemplo,
my-aws-bucket
.Selecione seu método de autenticação e insira as informações solicitadas, que você criou e anotou na seção anterior.
Digite o ARN da fila do Amazon SQS que você criou anteriormente. Ele usa o seguinte formato:
arn:aws:sqs:us-east-1:1234567890:event-queue"
Se quiser, defina qualquer filtro e clique em Próxima etapa.
Selecione o bucket de destino do Cloud Storage e, opcionalmente, o caminho.
Também é possível digitar um horário de início e de término para a transferência. Se você não especificar um horário, a transferência será iniciada imediatamente e será executada até ser interrompida manualmente.
Especifique as opções de transferência. Veja mais informações na página Criar transferências.
Clique em Criar.
Depois de criado, o job de transferência começa a ser executado e um listener de eventos aguarda notificações na fila do SQS. A página de detalhes do job mostra uma operação a cada hora e inclui detalhes sobre os dados transferidos para cada job.
REST
Para criar uma transferência baseada em eventos usando a API REST, envie o seguinte objeto JSON para o endpoint transferJobs.create:
transfer_job { "description": "YOUR DESCRIPTION", "status": "ENABLED", "projectId": "PROJECT_ID", "transferSpec" { "awsS3DataSource" { "bucketName": "AWS_SOURCE_NAME", "roleArn": "arn:aws:iam::1234567891011:role/role_for_federated_auth" }, "gcsDataSink": { "bucketName": "GCS_SINK_NAME" } } "eventStream" { "name": "arn:aws:sqs:us-east-1:1234567891011:s3-notification-queue", "eventStreamStartTime": "2022-12-02T01:00:00+00:00", "eventStreamExpirationTime": "2023-01-31T01:00:00+00:00" } }
O eventStreamStartTime
e o eventStreamExpirationTime
são opcionais.
Se o horário de início for omitido, a transferência começará imediatamente. Se o horário de
término for omitido, a transferência continuará até que seja interrompida manualmente.
Bibliotecas de cliente
Go
Para saber como instalar e usar a biblioteca de cliente do Serviço de transferência do Cloud Storage, consulte Bibliotecas de clientes do Serviço de transferência do Cloud Storage. Para mais informações, consulte a Documentação de referência da API Go do Serviço de transferência do Cloud Storage.
Para autenticar o Serviço de transferência do Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Java
Para saber como instalar e usar a biblioteca de cliente do Serviço de transferência do Cloud Storage, consulte Bibliotecas de clientes do Serviço de transferência do Cloud Storage. Para mais informações, consulte a Documentação de referência da API Java do Serviço de transferência do Cloud Storage.
Para autenticar o Serviço de transferência do Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca de cliente do Serviço de transferência do Cloud Storage, consulte Bibliotecas de clientes do Serviço de transferência do Cloud Storage. Para mais informações, consulte a Documentação de referência da API Node.js do Serviço de transferência do Cloud Storage.
Para autenticar o Serviço de transferência do Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Python
Para saber como instalar e usar a biblioteca de cliente do Serviço de transferência do Cloud Storage, consulte Bibliotecas de clientes do Serviço de transferência do Cloud Storage. Para mais informações, consulte a Documentação de referência da API Python do Serviço de transferência do Cloud Storage.
Para autenticar o Serviço de transferência do Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.