Use a replicação entre contentores

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 e timeUpdated) 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/Sub
  • pubsub.subscriptions.consume no tópico do Pub/Sub
  • pubsub.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.

  1. Ter a CLI gcloud instalada e inicializada, o que lhe permite gerar um token de acesso para o cabeçalho Authorization.

  2. Crie um ficheiro JSON que contenha um objeto TransferJob com um recurso ReplicationSpec 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 a transferJobs 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 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 no contentor de destino

  3. 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

  1. Ter a CLI gcloud instalada e inicializada, o que lhe permite gerar um token de acesso para o cabeçalho Authorization.

  2. 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:

APIs REST

API JSON

  1. Ter a CLI gcloud instalada e inicializada, o que lhe permite gerar um token de acesso para o cabeçalho Authorization.

  2. Use cURL para chamar a API REST do serviço de transferência de armazenamento com um pedido transferJobs.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:

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

  1. Ter a CLI gcloud instalada e inicializada, o que lhe permite gerar um token de acesso para o cabeçalho Authorization.

  2. 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 a TransferJob 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.

  3. 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:

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:

APIs REST

API JSON

  1. Ter a CLI gcloud instalada e inicializada, o que lhe permite gerar um token de acesso para o cabeçalho Authorization.

  2. 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: