Esta página apresenta uma vista geral da replicação entre contentores e instruções sobre como usar a funcionalidade.
Vista geral da replicação entre contentores
Em alguns casos, pode querer copiar dados de um contentor do Cloud Storage para outro. A replicação entre contentores copia objetos novos e atualizados de forma assíncrona de um contentor de origem para um contentor de destino.
A replicação entre contentores difere da replicação predefinida e da replicação turbo, uma vez que os seus dados existem em dois contentores, cada um com as suas próprias configurações, como a localização de armazenamento, a encriptação, o acesso e a classe de armazenamento. Como resultado, oferece recuperação e disponibilidade de dados, mas também é adequado para:
- Soberania dos dados: mantenha os dados em regiões geograficamente distantes.
- Mantenha versões de desenvolvimento e produção separadas: crie contentores e espaços de nomes distintos para que o desenvolvimento não afete a sua carga de trabalho de produção.
- Partilhe dados: replique dados para um contentor pertencente a um fornecedor ou parceiro.
- Agregação de dados: combine dados de diferentes contentores num único contentor para executar cargas de trabalho de estatísticas.
- Faça a gestão dos custos, da segurança e da conformidade: mantenha os seus dados sob diferentes proprietários, classes de armazenamento e períodos de retenção.
A replicação entre contentores usa o Serviço de transferência de armazenamento para replicar objetos e o Pub/Sub para receber alertas de alterações aos contentores de origem e de destino. A replicação entre contentores pode ser ativada em novos contentores que criar e em contentores existentes. A maioria dos objetos pode ser replicada em minutos, enquanto os objetos com mais de 1 GiB podem demorar várias horas.
Limitações
A replicação entre contentores não é suportada para contentores de espaço de nomes hierárquicos.
As eliminações de objetos no contentor de origem não são replicadas para o contentor de destino.
As configurações do ciclo de vida dos objetos não são replicadas.
Quando os objetos são replicados, os metadados de data/hora (por exemplo,
timeCreated
etimeUpdated
) não são preservados. Consulte o artigo Transferências entre contentores do Cloud Storage para ver detalhes sobre a preservação de metadados.Uma vez que a replicação entre contentores pode ser usada para replicar dados entre contentores localizados em qualquer localização, o desempenho da replicação entre contentores varia consoante as localizações selecionadas. Google Cloud Consequentemente, a replicação entre contentores não oferece um objetivo de ponto de recuperação (OPR).
Antes de começar
Antes de começar, conclua os seguintes passos.
Ative a API Storage Transfer Service
Se ainda não o fez, ative a API Storage Transfer Service.
Obtenha as funções necessárias
Para obter as autorizações de que
precisa para usar a replicação entre contentores,
peça ao seu administrador para lhe conceder a
função do IAM utilizador da Transferência de armazenamento (roles/storagetransfer.user
)
no contentor ou no projeto de origem.
Esta função predefinida contém as autorizações necessárias para usar a replicação entre contentores. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:
Autorizações necessárias
São necessárias as seguintes autorizações para usar a replicação entre contentores:
-
storagetransfer.jobs.create
-
storagetransfer.jobs.delete
-
storagetransfer.jobs.get
-
storagetransfer.jobs.list
-
storagetransfer.jobs.run
-
storagetransfer.jobs.update
Para obter instruções sobre como conceder funções em contentores, consulte o artigo Use o IAM com contentores. Para obter instruções sobre como conceder funções em projetos, consulte o artigo Gerir o acesso a projetos.
Conceda as funções necessárias
A replicação entre contentores usa o serviço de transferência de armazenamento para replicar objetos do contentor de origem para o contentor de destino e o Pub/Sub para receber notificações de alterações ao contentor de origem.
Para que a replicação entre contentores possa usar estes serviços, tem de conceder as autorizações necessárias à conta de serviço usada pelo serviço de transferência de armazenamento para replicar dados, bem como ao agente do serviço usado pelo Pub/Sub para escrever notificações.
Conceda as funções necessárias para o Serviço de transferência de armazenamento
As autorizações necessárias para replicar dados através do serviço de transferência de armazenamento podem ser concedidas a uma de duas contas de serviço. Uma das seguintes opções:
- O agente do serviço do Serviço de transferência de armazenamento, que é criado automaticamente e
gerido pela Google. O endereço de email deste agente de serviço segue o formato de
nomenclatura
project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com
. Pode obter o endereço de email do agente de serviço do Serviço de transferência de armazenamento através da API Serviço de transferência de armazenamento.googleServiceAccounts.get
Ou:
Uma conta de serviço gerida pelo utilizador. O endereço de email desta conta de serviço segue o formato de nomenclatura
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
. Pode criar a sua própria conta de serviço e conceder as autorizações necessárias para replicar os dados.Para obter instruções sobre como usar uma conta de serviço gerida pelo utilizador com o Serviço de transferência de armazenamento, consulte o artigo Delegue autorizações do agente do serviço a uma conta de serviço gerida pelo utilizador. São necessárias autorizações adicionais além das que constam nas listas seguintes. Em particular, tem de conceder ao agente de serviço acesso à conta de serviço gerida pelo utilizador atribuindo-lhe a função de criador de tokens da conta de serviço (
roles/iam.serviceAccountTokenCreator
). Consulte o artigo Conceda acesso ao agente de serviço.
O agente do serviço ou a conta de serviço do utilizador do Serviço de transferência de armazenamento precisa das seguintes autorizações para replicar os seus objetos e configurar notificações do Pub/Sub para o seu contentor de origem:
Autorizações necessárias
As seguintes autorizações têm de ser concedidas no projeto de origem:
pubsub.topics.create
pubsub.subscriptions.create
pubsub.subscriptions.consume
As seguintes autorizações têm de ser concedidas no contentor de origem:
storage.buckets.get
storage.buckets.update
storage.objects.get
As seguintes autorizações têm de ser concedidas no contentor de destino:
storage.buckets.get
storage.objects.create
storage.objects.get
Estas autorizações podem ser concedidas através de funções personalizadas ou concedendo todas as seguintes funções predefinidas:
- Função Editor do Pub/Sub (
roles/pubsub.editor
) no projeto de origem - Funções de proprietário de contentores antigos do Storage (
roles/storage.legacyBucketOwner
) e visualizador de objetos do Storage (roles/storage.objectViewer
) no contentor de origem - Funções Storage Legacy Bucket Writer (
roles/storage.legacyBucketWriter
) e Storage Object Viewer (roles/storage.objectViewer
) no contentor de destino
Conceda as funções necessárias para o Pub/Sub
O Cloud Storage usa um agente de serviço gerido pela Google para gerir as notificações do Pub/Sub. O endereço de email deste agente do serviço segue o formato de nomenclatura service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com
.
O agente do serviço Cloud Storage precisa das seguintes autorizações para configurar o Pub/Sub e publicar mensagens num tópico:
Autorizações necessárias
pubsub.topics.publish
no tópico do Pub/Subpubsub.subscriptions.consume
no tópico do Pub/Subpubsub.subscriptions.create
no projeto de origem
Estas autorizações podem ser concedidas através de funções personalizadas ou através da concessão da seguinte função predefinida:
- Publicador do Pub/Sub (
roles/pubsub.publisher
) no projeto de origem
Crie um trabalho de replicação
Consola
Para ver Google Cloud instruções da consola sobre como criar uma tarefa de replicação, consulte o artigo Crie uma tarefa de replicação através da Google Cloud consola.
Linha de comandos
Quando usa a Google Cloud CLI, pode criar uma tarefa de replicação para contentores existentes.
Para criar uma tarefa de replicação, use o comando gcloud alpha transfer jobs create
com a flag --replication
:
gcloud alpha transfer jobs create gs://SOURCE_BUCKET_NAME gs://DESTINATION_BUCKET_NAME --replication
Substituição:
SOURCE_BUCKET_NAME
com o nome do contentor de origem que quer replicar. Por exemplo,my-source-bucket
.DESTINATION_BUCKET_NAME
com o nome do contentor de destino. Por exemplo,my-destination-bucket
.
APIs REST
API JSON
Quando usa a API JSON, pode criar uma tarefa de replicação para contentores existentes.
Ter a CLI gcloud instalada e inicializada, o que lhe permite gerar um token de acesso para o cabeçalho
Authorization
.Crie um ficheiro JSON que contenha um objeto
TransferJob
com um recursoReplicationSpec
inicializado:TransferJob { "name": "TRANSFER_JOB_NAME", ... ReplicationSpec: { "gcsDataSource": { "bucketName": "SOURCE_BUCKET_NAME" }, "gcsDataSink" { "bucketName": "DESTINATION_BUCKET_NAME" }, "objectConditions": { }, "transferOptions": { "overwriteWhen": "OVERWRITE_OPTION" } } ... }
Substituição:
TRANSFER_JOB_NAME
com o nome que quer atribuir ao trabalho de replicação. Consulte atransferJobs
documentação de referência para ver os requisitos de nomenclatura.SOURCE_BUCKET_NAME
com o nome do contentor de origem que contém os objetos que quer replicar. Por exemplo,example-source-bucket
.DESTINATION_BUCKET_NAME
com o nome do contentor de destino onde os seus objetos vão ser replicados. Por exemplo,example-destination-bucket
.OVERWRITE_OPTION
com uma opção para determinar como os objetos existentes no contentor de destino podem ser substituídos como resultado de uma tarefa de replicação, o que pode acontecer quando o objeto de destino e o objeto de origem têm o mesmo nome. O valor tem de ser um dos seguintes:ALWAYS
: substitui sempre os objetos no contentor de destinoDIFFERENT
: apenas substitua objetos no contentor de destino se os dados do objeto de destino forem diferentes dos dados do objeto de origemNEVER
: nunca substitua objetos no contentor de destino
Use o cURL para chamar a API REST do serviço de transferência de armazenamento com um pedido
transferJobs.create
:curl -X POST --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storagetransfer.googleapis.com/v1/transferJobs"
Onde:
JSON_FILE_NAME
é o nome do ficheiro JSON que criou no passo 2.
Para verificar o estado da tarefa de replicação, veja os registos do Cloud Logging para o Serviço de transferência de armazenamento.
Apresentar tarefas de replicação
Consola
Para ver Google Cloud instruções da consola sobre como listar tarefas de replicação, consulte o artigo Liste tarefas de replicação com a Google Cloud consola.
Linha de comandos
Use o comando gcloud alpha transfer jobs list
com a flag
--job-type
:
gcloud alpha transfer jobs list --job-type=replication
APIs REST
API JSON
Ter a CLI gcloud instalada e inicializada, o que lhe permite gerar um token de acesso para o cabeçalho
Authorization
.Use o cURL para chamar a API REST do serviço de transferência de armazenamento com um pedido
transferJobs.list
:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storagetransfer.googleapis.com/v1/transferJobs"
Veja uma tarefa de replicação
Consola
Para ver Google Cloud instruções da consola sobre como ver uma tarefa de replicação, consulte o artigo Veja uma tarefa de replicação através da Google Cloud consola.
Linha de comandos
Use o comando gcloud alpha transfer jobs describe
:
gcloud alpha transfer jobs describe JOB_NAME
Substituição:
JOB_NAME
com o ID exclusivo da tarefa de replicação. Por exemplo,1234567890
. Para encontrar o ID da tarefa de transferência, liste as suas tarefas de replicação.
APIs REST
API JSON
Ter a CLI gcloud instalada e inicializada, o que lhe permite gerar um token de acesso para o cabeçalho
Authorization
.Use
cURL
para chamar a API REST do serviço de transferência de armazenamento com um pedidotransferJobs.get
:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storagetransfer.googleapis.com/v1/transferJobs/JOB_NAME"
Substituição:
JOB_NAME
com o ID exclusivo da tarefa de replicação. Por exemplo,1234567890
. Para encontrar o ID da sua tarefa de replicação, liste as suas tarefas de replicação.
Atualize uma tarefa de replicação
Pode atualizar os seguintes campos de uma tarefa de replicação:
A descrição da tarefa de replicação
A configuração para executar uma tarefa de replicação
A configuração das notificações publicadas no Pub/Sub
O comportamento de registo das operações de tarefas de replicação
O estado da tarefa de replicação (se está ativada, desativada ou eliminada)
Consola
Para ver Google Cloud instruções da consola sobre como atualizar uma tarefa de replicação, consulte o artigo Atualize uma tarefa de replicação através da Google Cloud consola.
Linha de comandos
Use o comando gcloud alpha transfer jobs update
com as flags que controlam as propriedades da tarefa de replicação que quer atualizar. Para ver uma lista
de possíveis flags, consulte a
documentação do gcloud alpha transfer jobs update
.
Por exemplo, para atualizar o comportamento de substituição de objetos da tarefa de replicação,
execute o comando gcloud alpha transfer jobs update
com a flag --overwrite-when
:
gcloud alpha transfer jobs update JOB_NAME --overwrite-when=OVERWRITE_OPTION
Substituição:
JOB_NAME
com o ID exclusivo da tarefa de replicação. Por exemplo,1234567890
. Para encontrar o ID da tarefa de transferência, liste ou veja a sua tarefa de transferência.OVERWRITE_OPTION
com uma opção para determinar como os objetos existentes no contentor de destino podem ser substituídos como resultado de uma tarefa de replicação, o que pode acontecer quando o objeto de destino e o objeto de origem têm o mesmo nome. O valor tem de ser um dos seguintes:always
: substitui sempre os objetos de destino.different
: Apenas substitua objetos no contentor de destino se os dados do objeto de destino forem diferentes dos dados do objeto de origem.never
: nunca substitua objetos de destino.
APIs REST
API JSON
Ter a CLI gcloud instalada e inicializada, o que lhe permite gerar um token de acesso para o cabeçalho
Authorization
.Crie um ficheiro JSON que contenha a seguinte estrutura que inclui os campos do objeto
TransferJob
que quer atualizar:{ "projectId": string, "transferJob": { object (TransferJob) }, "updateTransferJobFieldMask": UPDATE_MASK }
Onde:
object (TransferJob)
é substituído pelos campos da tarefa de replicação que quer atualizar. Consulte aTransferJob
representação de recursos para mais informações.UPDATE_MASK
é uma lista separada por vírgulas dos nomes dos campos que quer atualizar. Os valores podem ser um ou mais dos seguintes:description
,transferSpec
,notificationConfig
,loggingConfig
,status
.
Para mais informações sobre os nomes dos campos que pode incluir, consulte o
transferJobs.patch
corpo do pedido.Use o cURL para chamar a API REST do serviço de transferência de armazenamento com um pedido
transferJobs.patch
:curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storagetransfer.googleapis.com/v1/transferJobs/JOB_NAME"
Substituição:
JOB_NAME
com o ID exclusivo da tarefa de replicação. Por exemplo,1234567890
. Para encontrar o ID da sua tarefa de replicação, liste as suas tarefas de replicação.
Elimine uma tarefa de replicação
Consola
Para Google Cloud instruções da consola sobre como eliminar uma tarefa de replicação, consulte o artigo Elimine uma tarefa de replicação através da Google Cloud consola.
Linha de comandos
Use o comando gcloud alpha transfer jobs delete
:
gcloud alpha transfer jobs delete JOB_NAME
Substituição:
JOB_NAME
com o ID exclusivo da tarefa de replicação. Por exemplo,1234567890
. Para encontrar o ID da tarefa de replicação, liste as suas tarefas de replicação.
APIs REST
API JSON
Ter a CLI gcloud instalada e inicializada, o que lhe permite gerar um token de acesso para o cabeçalho
Authorization
.Use o cURL para chamar a API REST do serviço de transferência de armazenamento com um pedido
transferJobs.delete
:curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storagetransfer.googleapis.com/v1/transferJobs/JOB_NAME"
Substituição:
JOB_NAME
com o ID exclusivo da tarefa de replicação. Por exemplo,1234567890
. Para encontrar o ID da sua tarefa de replicação, liste as suas tarefas de replicação.