Crie transferências

Esta página mostra como criar e iniciar tarefas de transferência.

Para ver se a origem e o destino (também conhecido como um coletor) são suportados pelo serviço de transferência de armazenamento, consulte o artigo Origens e coletores suportados.

Agentes e conjuntos de agentes

Consoante a origem e o destino, pode ter de criar e configurar um conjunto de agentes e instalar agentes numa máquina com acesso à origem ou ao destino.

  • As transferências do Amazon S3, do Microsoft Azure, de listas de URLs ou do Cloud Storage não requerem agentes nem conjuntos de agentes.

  • As transferências cuja origem e/ou destino seja um sistema de ficheiros ou um armazenamento compatível com S3 requerem agentes e conjuntos de agentes. Consulte o artigo Faça a gestão de agent pools para ver instruções.

Antes de começar

Antes de configurar as transferências, certifique-se de que configurou o acesso:

Se estiver a usar comandos gcloud, instale a CLI gcloud.

Crie uma transferência

Não inclua informações confidenciais, como informações de identificação pessoal (IIP) ou dados de segurança, no nome da tarefa de transferência. Os nomes dos recursos podem ser propagados para os nomes de outros Google Cloud recursos e podem ser expostos a sistemas internos da Google fora do seu projeto.

Google Cloud consola

  1. Aceda à página Serviço de transferência de armazenamento na Google Cloud consola.

    Aceda ao Serviço de transferência de armazenamento

  2. Clique em Criar tarefa de transferência. É apresentada a página Criar tarefa de transferência.

  3. Escolha uma origem:

    Cloud Storage

    A sua conta de utilizador tem de ter a autorização storage.buckets.get para selecionar contentores de origem e de destino. Em alternativa, pode escrever o nome do contentor diretamente. Para mais informações, consulte o artigo Resolução de problemas de acesso.

    1. Em Tipo de origem, selecione Cloud Storage.

    2. Selecione o Tipo de destino.

    3. Se o destino for o Cloud Storage, selecione o Modo de agendamento. As transferências em lote são executadas de forma única ou agendada. As transferências orientadas por eventos monitorizam continuamente a origem e transferem dados quando são adicionados ou modificados.

      Para configurar uma transferência baseada em eventos, siga as instruções em Transferências baseadas em eventos.

    4. Clique em Passo seguinte.

    5. Selecione um contentor e (opcionalmente) uma pasta nesse contentor através de uma das seguintes opções:

      • Introduza um nome e um caminho de contentor do Cloud Storage existentes no campo Contentor ou pasta sem o prefixo gs://. Por exemplo, my-test-bucket/path/to/files. Para especificar um contentor do Cloud Storage de outro projeto, escreva o nome exatamente no campo Nome do contentor.

      • Selecione uma lista de contentores existentes nos seus projetos clicando em Procurar e, de seguida, selecionando um contentor.

        Quando clica em Procurar, pode selecionar contentores noutros projetos clicando no ID do projeto e, em seguida, selecionando o novo ID do projeto e o contentor.

      • Para criar um novo contentor, clique em Criar novo contentor.

    6. Se esta for uma transferência baseada em eventos, introduza o nome da subscrição do Pub/Sub, que tem o seguinte formato:

      projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID
      
    7. Opcionalmente, opte por filtrar objetos por prefixo ou por data da última modificação. Se especificou uma pasta como localização de origem, os filtros de prefixo são relativos a essa pasta. Por exemplo, se a origem for my-test-bucket/path/, um filtro de inclusão de file inclui todos os ficheiros que começam por my-test-bucket/path/file.
    8. Clique em Passo seguinte.

    Amazon S3

    Consulte o artigo Transfira do Amazon S3 para o Cloud Storage.

    Armazenamento compatível com S3

    Consulte o artigo Transfira do armazenamento compatível com S3 para o Cloud Storage.

    Armazenamento de blobs do Microsoft Azure

    1. Em Tipo de origem, selecione Azure Blob Storage ou Data Lake Storage Gen2.

    2. Clique em Passo seguinte.

    3. Especifique o seguinte:

      1. Nome da conta de armazenamento: o nome da conta de armazenamento do Microsoft Azure de origem.

        O nome da conta de armazenamento é apresentado no portal do Microsoft Azure Storage em Todos os serviços > Armazenamento > Contas de armazenamento.

      2. Nome do contentor: o nome do contentor do Microsoft Azure Storage.

        O nome do contentor é apresentado no portal do Microsoft Azure Storage em Storage explorer > Contentores de blobs.

      3. Assinatura de acesso partilhado (SAS): o token SAS do Microsoft Azure Storage criado a partir de uma política de acesso armazenada. Para mais informações, consulte o artigo Conceda acesso limitado a recursos do Azure Storage através de assinaturas de acesso partilhado (SAS).

        O tempo de expiração predefinido para tokens SAS é de 8 horas. Quando criar o seu token de SAS, certifique-se de que define um prazo de validade razoável que lhe permita concluir a transferência com êxito.
    4. Opcionalmente, opte por filtrar objetos por prefixo ou por data da última modificação. Se especificou uma pasta como localização de origem, os filtros de prefixo são relativos a essa pasta. Por exemplo, se a origem for my-test-bucket/path/, um filtro de inclusão de file inclui todos os ficheiros que começam por my-test-bucket/path/file.
    5. Clique em Passo seguinte.

    Sistema de ficheiros

    1. Em Tipo de origem, selecione Sistema de ficheiros POSIX.

    2. Selecione o Tipo de destino e clique em Passo seguinte.

    3. Selecione um conjunto de agentes existente ou selecione Criar conjunto de agentes e siga as instruções para criar um novo conjunto.

    4. Especifique o caminho totalmente qualificado do diretório do sistema de ficheiros.

    5. Clique em Passo seguinte.

    HDFS

    Consulte o artigo Transfira do HDFS para o Cloud Storage.

    Lista de URLs

    1. Em Tipo de origem, selecione Lista de URLs e clique em Passo seguinte.

    2. Em URL do ficheiro TSV, indique o URL de um ficheiro de valores separados por tabulações (TSV). Consulte o artigo Criar uma lista de URLs para ver detalhes sobre como criar o ficheiro TSV.

    3. Opcionalmente, opte por filtrar objetos por prefixo ou por data da última modificação. Se especificou uma pasta como localização de origem, os filtros de prefixo são relativos a essa pasta. Por exemplo, se a origem for my-test-bucket/path/, um filtro de inclusão de file inclui todos os ficheiros que começam por my-test-bucket/path/file.
    4. Clique em Passo seguinte.

  4. Escolha um destino:

    Cloud Storage​

    1. No campo Bucket ou pasta, introduza o bucket de destino e (opcionalmente) o nome da pasta, ou clique em Procurar para selecionar um bucket numa lista de buckets existentes no seu projeto atual. Para criar um novo contentor, clique em Criar novo contentor.

    2. Clique em Passo seguinte.

    3. Escolha as opções de programação:

      1. Na lista pendente Executar uma vez, selecione uma das seguintes opções:

        • Executar uma vez: executa uma única transferência, começando à hora que selecionar.

        • Executar todos os dias: executa uma transferência diariamente, a partir da hora que selecionar.

          Pode introduzir uma Data de conclusão opcional ou deixar a Data de conclusão em branco para executar a transferência continuamente.

        • Executar todas as semanas: executa uma transferência semanalmente, a partir da hora que selecionar.

        • Executar com frequência personalizada: executa uma transferência com a frequência que selecionar. Pode optar por repetir a transferência a um intervalo regular de horas, dias ou semanas.

          Pode introduzir uma Data de conclusão opcional ou deixar a Data de conclusão em branco para executar a transferência continuamente.

      2. Na lista pendente A partir de agora, selecione uma das seguintes opções:

        • A partir de agora: inicia a transferência depois de clicar em Criar.

        • A partir de: inicia a transferência na data e hora que selecionar. Clique em Calendário para apresentar um calendário para selecionar a data de início.

    4. Clique em Passo seguinte.

    5. Escolha as definições para a tarefa de transferência. Algumas opções só estão disponíveis para determinadas combinações de origem/destino.

      1. No campo Descrição, introduza uma descrição da transferência. Como prática recomendada, introduza uma descrição significativa e única para poder distinguir os trabalhos.

      2. Em Opções de metadados, opte por usar as opções predefinidas ou clique em Ver e selecionar opções para especificar valores para todos os metadados suportados. Consulte o artigo Preservação de metadados para ver detalhes.

      3. Em Quando substituir, selecione uma das seguintes opções:

        • Se for diferente: substitui os ficheiros de destino se o ficheiro de origem com o mesmo nome tiver valores de Etags ou de soma de verificação diferentes.

        • Sempre: substitui sempre os ficheiros de destino quando o ficheiro de origem tem o mesmo nome, mesmo que sejam idênticos.

      4. Em Quando eliminar, selecione uma das seguintes opções:

        • Nunca: nunca elimina ficheiros da origem nem do destino.

        • Eliminar ficheiro da origem após a transferência: elimine os ficheiros da origem após a transferência para o destino. Se um ficheiro de origem não for transferido, por exemplo, porque já existe no destino, o ficheiro de origem não é eliminado.

        • Eliminar ficheiros do destino se também não estiverem na origem: se os ficheiros no contentor do Cloud Storage de destino também não estiverem na origem, elimine os ficheiros do contentor do Cloud Storage.

          Esta opção garante que o contentor do Cloud Storage de destino corresponde exatamente à sua origem.

      5. Para transferências entre contentores do Cloud Storage, escolha se quer transferir pastas geridas.

      6. Ative ou desative o registo para o Serviço de transferência de armazenamento.

      7. Em Opções de notificação, selecione opcionalmente o tópico do Pub/Sub e os eventos para os quais quer receber notificações. Consulte as notificações do Pub/Sub para mais detalhes.

    6. Se estiver a delegar autorizações de agente de serviço numa conta de serviço gerida pelo utilizador, selecione essa opção e introduza o endereço de email da conta de serviço no formato SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.

    7. Clique em Criar.

    Sistema de ficheiros​

    1. Selecione um conjunto de agentes existente ou selecione Criar conjunto de agentes e siga as instruções para criar um novo conjunto.

    2. Especifique o caminho do diretório de destino totalmente qualificado.

    3. Clique em Passo seguinte.

    4. Escolha as opções de programação:

      1. Na lista pendente Executar uma vez, selecione uma das seguintes opções:

        • Executar uma vez: executa uma única transferência, começando à hora que selecionar.

        • Executar todos os dias: executa uma transferência diariamente, a partir da hora que selecionar.

          Pode introduzir uma Data de conclusão opcional ou deixar a Data de conclusão em branco para executar a transferência continuamente.

        • Executar todas as semanas: executa uma transferência semanalmente, a partir da hora que selecionar.

        • Executar com frequência personalizada: executa uma transferência com a frequência que selecionar. Pode optar por repetir a transferência a um intervalo regular de horas, dias ou semanas.

          Pode introduzir uma Data de conclusão opcional ou deixar a Data de conclusão em branco para executar a transferência continuamente.

      2. Na lista pendente A partir de agora, selecione uma das seguintes opções:

        • A partir de agora: inicia a transferência depois de clicar em Criar.

        • A partir de: inicia a transferência na data e hora que selecionar. Clique em Calendário para apresentar um calendário para selecionar a data de início.

    5. Clique em Passo seguinte.

    6. Especifique se quer usar um ficheiro de manifesto.

    7. Selecione se quer preservar os metadados, quando quer substituir e quando quer eliminar ficheiros na origem ou no destino.

    8. Selecione as opções de registo.

    9. Em Opções de notificação, selecione opcionalmente o tópico do Pub/Sub e os eventos para os quais quer receber notificações. Consulte as notificações do Pub/Sub para mais detalhes.

    10. Se estiver a delegar autorizações de agente de serviço numa conta de serviço gerida pelo utilizador, selecione essa opção e introduza o endereço de email da conta de serviço no formato SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.

    11. Para criar a tarefa de transferência, clique em Criar.

CLI gcloud

Para criar uma nova tarefa de transferência, use o comando gcloud transfer jobs create. A criação de uma nova tarefa inicia a transferência especificada, a menos que seja especificado um horário ou um --do-not-run.

gcloud transfer jobs create \
  SOURCE DESTINATION

Onde:

  • SOURCE é a origem de dados desta transferência. O formato de cada origem é:

    • Cloud Storage: gs://BUCKET_NAME. Para transferir a partir de uma pasta específica, especifique gs://BUCKET_NAME/FOLDER_PATH/, incluindo a barra invertida final.
    • Amazon S3: s3://BUCKET_NAME/FOLDER_PATH
    • Armazenamento compatível com S3: s3://BUCKET_NAME. O nome do contentor é relativo ao ponto final. Por exemplo, se os seus dados estiverem em https://us-east-1.example.com/folder1/bucket_a, introduza s3://folder1/bucket_a.
    • Armazenamento do Microsoft Azure: https://myaccount.blob.core.windows.net/CONTAINER_NAME
    • Lista de URLs: https://PATH_TO_URL_LIST ou http://PATH_TO_URL_LIST
    • Sistema de ficheiros POSIX: posix:///PATH. Tem de ser um caminho absoluto a partir da raiz do computador anfitrião do agente.
    • HDFS: hdfs:///PATH
  • DESTINATION é um dos seguintes:

    • Cloud Storage: gs://BUCKET_NAME. Para transferir para um diretório específico, especifique gs://BUCKET_NAME/FOLDER_PATH/, incluindo a barra invertida final.
    • Sistema de ficheiros POSIX: posix:///PATH. Tem de ser um caminho absoluto a partir da raiz do computador anfitrião do agente.

Se a transferência exigir agentes de transferência, estão disponíveis as seguintes opções:

  • --source-agent-pool especifica o conjunto de agentes de origem a usar para esta transferência. Necessário para transferências originárias de um sistema de ficheiros.

  • --destination-agent-pool especifica o conjunto de agentes de destino a usar para esta transferência. Obrigatório para transferências para um sistema de ficheiros.

  • --intermediate-storage-path é o caminho para um contentor do Cloud Storage no formato gs://my-intermediary-bucket. Necessário para transferências entre dois sistemas de ficheiros. Consulte o artigo Crie um contentor do Cloud Storage como intermediário para ver detalhes sobre a criação do contentor intermediário.

As opções adicionais incluem:

  • --source-creds-file especifica o caminho relativo para um ficheiro local no seu computador que inclui credenciais da AWS ou do Azure para a origem da transferência. Para informações sobre a formatação de ficheiros de credenciais, consulte a referência TransferSpec.

  • --do-not-run impede que o serviço de transferência de armazenamento execute a tarefa após o envio do comando. Para executar a tarefa, atualize-a para adicionar uma programação ou use jobs run para iniciá-la manualmente.

  • --manifest-file especifica o caminho para um ficheiro CSV no Cloud Storage que contém uma lista de ficheiros a transferir da sua origem. Para ver a formatação do ficheiro de manifesto, consulte o artigo Transfira ficheiros ou objetos específicos através de um manifesto.

  • Informações sobre o trabalho: pode especificar --name, --description e --source-creds-file.

  • Schedule: especifique --schedule-starts, --schedule-repeats-every e --schedule-repeats-until ou --do-not-run.

  • Condições de objetos: use condições para determinar que objetos são transferidos. Estes incluem --include-prefixes e --exclude-prefixes, e as condições baseadas no tempo em --include-modified-[before | after]-[absolute | relative]. Se tiver especificado uma pasta com a origem, os filtros de prefixo são relativos a essa pasta. Consulte o artigo Filtre objetos de origem por prefixo para mais informações.

    As condições de objetos não são suportadas para transferências que envolvam sistemas de ficheiros.

  • Opções de transferência: especifique se quer substituir os ficheiros de destino (--overwrite-when=different ou always) e se quer eliminar determinados ficheiros durante ou após a transferência (--delete-from=destination-if-unique ou source-after-transfer); especifique que valores de metadados preservar (--preserve-metadata); e, opcionalmente, defina uma classe de armazenamento em objetos transferidos (--custom-storage-class).

  • Notificações: configure as notificações do Pub/Sub para transferências com --notification-pubsub-topic, --notification-event-types e --notification-payload-format.

  • Cloud Logging: ative o Cloud Logging para transferências sem agente ou transferências de origens compatíveis com S3, com --log-actions e --log-action-states. Consulte o artigo Cloud Logging para o Serviço de transferência de armazenamento para ver detalhes.

As transferências de origens compatíveis com S3 também usam as seguintes opções:

  • --source-endpoint (obrigatório) especifica o ponto final do seu sistema de armazenamento. Por exemplo, s3.example.com. Consulte o seu fornecedor para saber qual é a formatação correta. Não especifique o protocolo (http:// ou https://).
  • --source-signing-region especifica uma região para pedidos de assinatura. Omita esta flag se o seu fornecedor de armazenamento não exigir uma região de assinatura.
  • --source-auth-method especifica o método de autenticação a usar. Os valores válidos são AWS_SIGNATURE_V2 ou AWS_SIGNATURE_V4. Consulte a documentação SigV4 e SigV2 da Amazon para mais informações.
  • --source-request-model especifica o estilo de endereçamento a usar. Os valores válidos são PATH_STYLE ou VIRTUAL_HOSTED_STYLE. O estilo de caminho usa o formato https://s3.example.com/BUCKET_NAME/KEY_NAME. O estilo de alojamento virtual usa o formato `https://BUCKET_NAME.s3.example.com/KEY_NAME.
  • --source-network-protocol especifica o protocolo de rede que os agentes devem usar para esta tarefa. Os valores válidos são HTTP ou HTTPS.
  • --source-list-api especifica a versão da API de listagem do S3 para devolver objetos do contentor. Os valores válidos são LIST_OBJECTS ou LIST_OBJECTS_V2. Consulte a documentação ListObjectsV2 e ListObjects da Amazon para mais informações.

Para ver todas as opções, execute gcloud transfer jobs create --help ou consulte a gcloud documentação de referência.

Exemplos

Amazon S3 para o Cloud Storage

Consulte o artigo Transfira do Amazon S3 para o Cloud Storage.

Armazenamento compatível com S3 para o Cloud Storage

Consulte o artigo Transfira do armazenamento compatível com S3 para o Cloud Storage.

Sistema de ficheiros para o Cloud Storage

Consulte o artigo Transfira de um sistema de ficheiros para o Cloud Storage.

Do Cloud Storage para o sistema de ficheiros

Para transferir de um contentor do Cloud Storage para um sistema de ficheiros, especifique o seguinte.

gcloud transfer jobs create \
  gs://my-storage-bucket posix:///tmp/destination \
  --destination-agent-pool=my-destination-agent-pool

Sistema de ficheiros para sistema de ficheiros

Para transferir entre dois sistemas de ficheiros, tem de especificar um conjunto de agentes de origem, um conjunto de agentes de destino e um contentor do Cloud Storage intermédio através do qual os dados passam.

Consulte o artigo Crie um contentor do Cloud Storage como intermediário para ver detalhes sobre o contentor intermediário.

Em seguida, especifique estes 3 recursos quando ligar para transfer jobs create:

gcloud transfer jobs create \
  posix:///tmp/source/on/systemA posix:///tmp/destination/on/systemB \
  --source-agent-pool=source_agent_pool \
  --destination-agent-pool=destination_agent_pool \
  --intermediate-storage-path=gs://my-intermediary-bucket

REST

Os exemplos seguintes mostram como usar o Serviço de transferência de armazenamento através da API REST.

Quando configura ou edita tarefas de transferência através da API Storage Transfer Service, a hora tem de estar em UTC. Para mais informações sobre como especificar a programação de uma tarefa de transferência, consulte o artigo Programação.

Transfira entre contentores do Cloud Storage

Neste exemplo, vai aprender a mover ficheiros de um contentor do Cloud Storage para outro. Por exemplo, pode mover dados para um contentor noutra localização.

Pedido através de transferJobs create:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "YOUR DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "schedule": {
      "scheduleStartDate": {
          "day": 1,
          "month": 1,
          "year": 2015
      },
      "startTimeOfDay": {
          "hours": 1,
          "minutes": 1
      }
  },
  "transferSpec": {
      "gcsDataSource": {
          "bucketName": "GCS_SOURCE_NAME"
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      },
      "transferOptions": {
          "deleteObjectsFromSourceAfterTransfer": true
      }
  }
}
Resposta:
200 OK
{
  "transferJob": [
      {
          "creationTime": "2015-01-01T01:01:00.000000000Z",
          "description": "YOUR DESCRIPTION",
          "name": "transferJobs/JOB_ID",
          "status": "ENABLED",
          "lastModificationTime": "2015-01-01T01:01:00.000000000Z",
          "projectId": "PROJECT_ID",
          "schedule": {
              "scheduleStartDate": {
                  "day": 1,
                  "month": 1,
                  "year": 2015
              },
              "startTimeOfDay": {
                  "hours": 1,
                  "minutes": 1
              }
          },
          "transferSpec": {
              "gcsDataSource": {
                  "bucketName": "GCS_SOURCE_NAME",
              },
              "gcsDataSink": {
                  "bucketName": "GCS_NEARLINE_SINK_NAME"
              },
              "objectConditions": {
                  "minTimeElapsedSinceLastModification": "2592000.000s"
              },
              "transferOptions": {
                  "deleteObjectsFromSourceAfterTransfer": true
              }
          }
      }
  ]
}

Transfira do Amazon S3 para o armazenamento na nuvem

Consulte o artigo Transfira do Amazon S3 para o Cloud Storage.

Transfira entre o armazenamento de blobs do Microsoft Azure e o Cloud Storage

Neste exemplo, vai aprender a mover ficheiros do Microsoft Azure Storage para um contentor do Cloud Storage através de um token de assinatura de acesso partilhado (SAS) do Microsoft Azure Storage.

Para mais informações sobre a SAS do Microsoft Azure Storage, consulte o artigo Conceda acesso limitado a recursos do Azure Storage através de assinaturas de acesso partilhado (SAS).

Antes de começar, reveja os artigos Configure o acesso ao Microsoft Azure Storage e Preços para compreender as implicações da transferência de dados do Microsoft Azure Storage para o Cloud Storage.

Pedido através de transferJobs create:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "YOUR DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "schedule": {
      "scheduleStartDate": {
          "day": 14,
          "month": 2,
          "year": 2020
      },
      "scheduleEndDate": {
          "day": 14
          "month": 2,
          "year": 2020
      },
      "startTimeOfDay": {
          "hours": 1,
          "minutes": 1
      }
  },
  "transferSpec": {
      "azureBlobStorageDataSource": {
          "storageAccount": "AZURE_SOURCE_NAME",
          "azureCredentials": {
              "sasToken": "AZURE_SAS_TOKEN",
          },
          "container": "AZURE_CONTAINER",
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      }
  }
}
Resposta:
200 OK
{
  "transferJob": [
      {
          "creationTime": "2020-02-14T01:01:00.000000000Z",
          "description": "YOUR DESCRIPTION",
          "name": "transferJobs/JOB_ID",
          "status": "ENABLED",
          "lastModificationTime": "2020-02-14T01:01:00.000000000Z",
          "projectId": "PROJECT_ID",
          "schedule": {
              "scheduleStartDate": {
                  "day": 14
                  "month": 2,
                  "year": 2020
              },
              "scheduleEndDate": {
                  "day": 14,
                  "month": 2,
                  "year": 2020
              },
              "startTimeOfDay": {
                  "hours": 1,
                  "minutes": 1
              }
          },
          "transferSpec": {
              "azureBlobStorageDataSource": {
                  "storageAccount": "AZURE_SOURCE_NAME",
                  "azureCredentials": {
                      "sasToken": "AZURE_SAS_TOKEN",
                  },
                  "container": "AZURE_CONTAINER",
              },
              "objectConditions": {},
              "transferOptions": {}
          }
      }
  ]
}

Transfira a partir de um sistema de ficheiros

Consulte o artigo Transfira de um sistema de ficheiros para o Cloud Storage.

Especificar caminhos de origem e destino

Os caminhos de origem e destino permitem-lhe especificar diretórios de origem e destino quando transfere dados para o seu contentor do Cloud Storage. Por exemplo, considere que tem os ficheiros file1.txt e file2.txt e um contentor do Cloud Storage denominado B. Se definir um caminho de destino com o nome my-stuff, após a conclusão da transferência, os ficheiros encontram-se em gs://B/my-stuff/file1.txt e gs://B/my-stuff/file2.txt.

Especificar um caminho de origem

Para especificar um caminho de origem quando cria uma tarefa de transferência, adicione um campo path ao campo gcsDataSource na especificação TransferSpec:

{
gcsDataSource: {
  bucketName: "SOURCE_BUCKET",
  path: "SOURCE_PATH/",
},
}

Neste exemplo:

  • SOURCE_BUCKET: o contentor do Cloud Storage de origem.
  • SOURCE_PATH: o caminho do Cloud Storage de origem.

Especificar um caminho de destino

Para especificar uma pasta de destino quando cria uma tarefa de transferência, adicione um campo path ao campo gcsDataSink na especificação TransferSpec:

{
gcsDataSink: {
  bucketName: "DESTINATION_BUCKET",
  path: "DESTINATION_PATH/",
},
}

Neste exemplo:

  • DESTINATION_BUCKET: o contentor do Cloud Storage de destino.
  • DESTINATION_PATH: O caminho do Cloud Storage de destino.

Exemplo de pedido completo

Segue-se um exemplo de um pedido completo:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "YOUR DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "schedule": {
      "scheduleStartDate": {
          "day": 1,
          "month": 1,
          "year": 2015
      },
      "startTimeOfDay": {
          "hours": 1,
          "minutes": 1
      }
  },
  "transferSpec": {
      "gcsDataSource": {
          "bucketName": "GCS_SOURCE_NAME",
          "path": "GCS_SOURCE_PATH",
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME",
          "path": "GCS_SINK_PATH",
      },
      "objectConditions": {
          "minTimeElapsedSinceLastModification": "2592000s"
      },
      "transferOptions": {
          "deleteObjectsFromSourceAfterTransfer": true
      }
  }

}

Bibliotecas cliente

Os exemplos seguintes mostram como usar o Serviço de transferência de armazenamento através de programação com Go, Java, Node.js e Python.

Quando configura ou edita tarefas de transferência através de programação, a hora tem de estar em UTC. Para mais informações sobre como especificar a programação de uma tarefa de transferência, consulte o artigo Programação.

Para mais informações sobre as bibliotecas de cliente do serviço de transferência de armazenamento, consulte o artigo Introdução às bibliotecas de cliente do serviço de transferência de armazenamento.

Transfira entre contentores do Cloud Storage

Neste exemplo, vai aprender a mover ficheiros de um contentor do Cloud Storage para outro. Por exemplo, pode mover dados para um contentor noutra localização.

Ir

import (
	"context"
	"fmt"
	"io"
	"time"

	"google.golang.org/genproto/googleapis/type/date"
	"google.golang.org/genproto/googleapis/type/timeofday"
	"google.golang.org/protobuf/types/known/durationpb"

	storagetransfer "cloud.google.com/go/storagetransfer/apiv1"
	"cloud.google.com/go/storagetransfer/apiv1/storagetransferpb"
)

func transferToNearline(w io.Writer, projectID string, gcsSourceBucket string, gcsNearlineSinkBucket string) (*storagetransferpb.TransferJob, error) {
	// Your Google Cloud Project ID
	// projectID := "my-project-id"

	// The name of the GCS bucket to transfer objects from
	// gcsSourceBucket := "my-source-bucket"

	// The name of the Nearline GCS bucket to transfer objects to
	// gcsNearlineSinkBucket := "my-sink-bucket"

	ctx := context.Background()
	client, err := storagetransfer.NewClient(ctx)
	if err != nil {
		return nil, fmt.Errorf("storagetransfer.NewClient: %w", err)
	}
	defer client.Close()

	// A description of this job
	jobDescription := "Transfers objects that haven't been modified in 30 days to a Nearline bucket"

	// The time to start the transfer
	startTime := time.Now().UTC()

	req := &storagetransferpb.CreateTransferJobRequest{
		TransferJob: &storagetransferpb.TransferJob{
			ProjectId:   projectID,
			Description: jobDescription,
			TransferSpec: &storagetransferpb.TransferSpec{
				DataSink: &storagetransferpb.TransferSpec_GcsDataSink{
					GcsDataSink: &storagetransferpb.GcsData{BucketName: gcsNearlineSinkBucket}},
				DataSource: &storagetransferpb.TransferSpec_GcsDataSource{
					GcsDataSource: &storagetransferpb.GcsData{BucketName: gcsSourceBucket},
				},
				ObjectConditions: &storagetransferpb.ObjectConditions{
					MinTimeElapsedSinceLastModification: &durationpb.Duration{Seconds: 2592000 /*30 days */},
				},
				TransferOptions: &storagetransferpb.TransferOptions{DeleteObjectsFromSourceAfterTransfer: true},
			},
			Schedule: &storagetransferpb.Schedule{
				ScheduleStartDate: &date.Date{
					Year:  int32(startTime.Year()),
					Month: int32(startTime.Month()),
					Day:   int32(startTime.Day()),
				},
				ScheduleEndDate: &date.Date{
					Year:  int32(startTime.Year()),
					Month: int32(startTime.Month()),
					Day:   int32(startTime.Day()),
				},
				StartTimeOfDay: &timeofday.TimeOfDay{
					Hours:   int32(startTime.Hour()),
					Minutes: int32(startTime.Minute()),
					Seconds: int32(startTime.Second()),
				},
			},
			Status: storagetransferpb.TransferJob_ENABLED,
		},
	}
	resp, err := client.CreateTransferJob(ctx, req)
	if err != nil {
		return nil, fmt.Errorf("failed to create transfer job: %w", err)
	}
	if _, err = client.RunTransferJob(ctx, &storagetransferpb.RunTransferJobRequest{
		ProjectId: projectID,
		JobName:   resp.Name,
	}); err != nil {
		return nil, fmt.Errorf("failed to run transfer job: %w", err)
	}
	fmt.Fprintf(w, "Created and ran transfer job from %v to %v with name %v", gcsSourceBucket, gcsNearlineSinkBucket, resp.Name)
	return resp, nil
}

Java

Procura exemplos mais antigos? Consulte o guia de migração do Serviço de transferência de armazenamento.

import com.google.protobuf.Duration;
import com.google.storagetransfer.v1.proto.StorageTransferServiceClient;
import com.google.storagetransfer.v1.proto.TransferProto.CreateTransferJobRequest;
import com.google.storagetransfer.v1.proto.TransferTypes.GcsData;
import com.google.storagetransfer.v1.proto.TransferTypes.ObjectConditions;
import com.google.storagetransfer.v1.proto.TransferTypes.Schedule;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferJob;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferJob.Status;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferOptions;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferSpec;
import com.google.type.Date;
import com.google.type.TimeOfDay;
import java.io.IOException;
import java.util.Calendar;

public class TransferToNearline {
  /**
   * Creates a one-off transfer job that transfers objects in a standard GCS bucket that are more
   * than 30 days old to a Nearline GCS bucket.
   */
  public static void transferToNearline(
      String projectId,
      String jobDescription,
      String gcsSourceBucket,
      String gcsNearlineSinkBucket,
      long startDateTime)
      throws IOException {

    // Your Google Cloud Project ID
    // String projectId = "your-project-id";

    // A short description of this job
    // String jobDescription = "Sample transfer job of old objects to a Nearline GCS bucket.";

    // The name of the source GCS bucket to transfer data from
    // String gcsSourceBucket = "your-gcs-source-bucket";

    // The name of the Nearline GCS bucket to transfer old objects to
    // String gcsSinkBucket = "your-nearline-gcs-bucket";

    // What day and time in UTC to start the transfer, expressed as an epoch date timestamp.
    // If this is in the past relative to when the job is created, it will run the next day.
    // long startDateTime =
    //     new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2000-01-01 00:00:00").getTime();

    // Parse epoch timestamp into the model classes
    Calendar startCalendar = Calendar.getInstance();
    startCalendar.setTimeInMillis(startDateTime);
    // Note that this is a Date from the model class package, not a java.util.Date
    Date date =
        Date.newBuilder()
            .setYear(startCalendar.get(Calendar.YEAR))
            .setMonth(startCalendar.get(Calendar.MONTH) + 1)
            .setDay(startCalendar.get(Calendar.DAY_OF_MONTH))
            .build();
    TimeOfDay time =
        TimeOfDay.newBuilder()
            .setHours(startCalendar.get(Calendar.HOUR_OF_DAY))
            .setMinutes(startCalendar.get(Calendar.MINUTE))
            .setSeconds(startCalendar.get(Calendar.SECOND))
            .build();

    TransferJob transferJob =
        TransferJob.newBuilder()
            .setDescription(jobDescription)
            .setProjectId(projectId)
            .setTransferSpec(
                TransferSpec.newBuilder()
                    .setGcsDataSource(GcsData.newBuilder().setBucketName(gcsSourceBucket))
                    .setGcsDataSink(GcsData.newBuilder().setBucketName(gcsNearlineSinkBucket))
                    .setObjectConditions(
                        ObjectConditions.newBuilder()
                            .setMinTimeElapsedSinceLastModification(
                                Duration.newBuilder().setSeconds(2592000 /* 30 days */)))
                    .setTransferOptions(
                        TransferOptions.newBuilder().setDeleteObjectsFromSourceAfterTransfer(true)))
            .setSchedule(Schedule.newBuilder().setScheduleStartDate(date).setStartTimeOfDay(time))
            .setStatus(Status.ENABLED)
            .build();

    // Create a Transfer Service client
    StorageTransferServiceClient storageTransfer = StorageTransferServiceClient.create();

    // Create the transfer job
    TransferJob response =
        storageTransfer.createTransferJob(
            CreateTransferJobRequest.newBuilder().setTransferJob(transferJob).build());

    System.out.println("Created transfer job from standard bucket to Nearline bucket:");
    System.out.println(response.toString());
  }
}

Node.js


// Imports the Google Cloud client library
const {
  StorageTransferServiceClient,
} = require('@google-cloud/storage-transfer');

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// The ID of the Google Cloud Platform Project that owns the job
// projectId = 'my-project-id'

// A useful description for your transfer job
// description = 'My transfer job'

// Google Cloud Storage source bucket name
// gcsSourceBucket = 'my-gcs-source-bucket'

// Google Cloud Storage destination bucket name
// gcsSinkBucket = 'my-gcs-destination-bucket'

// Date to start daily migration
// startDate = new Date()

// Creates a client
const client = new StorageTransferServiceClient();

/**
 * Create a daily migration from a GCS bucket to another GCS bucket for
 * objects untouched for 30+ days.
 */
async function createDailyNearline30DayMigration() {
  // Runs the request and creates the job
  const [transferJob] = await client.createTransferJob({
    transferJob: {
      projectId,
      description,
      status: 'ENABLED',
      schedule: {
        scheduleStartDate: {
          day: startDate.getDate(),
          month: startDate.getMonth() + 1,
          year: startDate.getFullYear(),
        },
      },
      transferSpec: {
        gcsDataSource: {
          bucketName: gcsSourceBucket,
        },
        gcsDataSink: {
          bucketName: gcsSinkBucket,
        },
        objectConditions: {
          minTimeElapsedSinceLastModification: {
            seconds: 2592000, // 30 days
          },
        },
        transferOptions: {
          deleteObjectsFromSourceAfterTransfer: true,
        },
      },
    },
  });

  console.log(`Created transferJob: ${transferJob.name}`);
}

createDailyNearline30DayMigration();

Python

Procura exemplos mais antigos? Consulte o guia de migração do Serviço de transferência de armazenamento.

from datetime import datetime

from google.cloud import storage_transfer
from google.protobuf.duration_pb2 import Duration


def create_daily_nearline_30_day_migration(
    project_id: str,
    description: str,
    source_bucket: str,
    sink_bucket: str,
    start_date: datetime,
):
    """Create a daily migration from a GCS bucket to a Nearline GCS bucket
    for objects untouched for 30 days."""

    client = storage_transfer.StorageTransferServiceClient()

    # The ID of the Google Cloud Platform Project that owns the job
    # project_id = 'my-project-id'

    # A useful description for your transfer job
    # description = 'My transfer job'

    # Google Cloud Storage source bucket name
    # source_bucket = 'my-gcs-source-bucket'

    # Google Cloud Storage destination bucket name
    # sink_bucket = 'my-gcs-destination-bucket'

    transfer_job_request = storage_transfer.CreateTransferJobRequest(
        {
            "transfer_job": {
                "project_id": project_id,
                "description": description,
                "status": storage_transfer.TransferJob.Status.ENABLED,
                "schedule": {
                    "schedule_start_date": {
                        "day": start_date.day,
                        "month": start_date.month,
                        "year": start_date.year,
                    }
                },
                "transfer_spec": {
                    "gcs_data_source": {
                        "bucket_name": source_bucket,
                    },
                    "gcs_data_sink": {
                        "bucket_name": sink_bucket,
                    },
                    "object_conditions": {
                        "min_time_elapsed_since_last_modification": Duration(
                            seconds=2592000  # 30 days
                        )
                    },
                    "transfer_options": {
                        "delete_objects_from_source_after_transfer": True
                    },
                },
            }
        }
    )

    result = client.create_transfer_job(transfer_job_request)
    print(f"Created transferJob: {result.name}")

Transfira do Amazon S3 para o armazenamento na nuvem

Consulte o artigo Transfira do Amazon S3 para o Cloud Storage.

Transfira entre o armazenamento de blobs do Microsoft Azure e o Cloud Storage

Neste exemplo, vai aprender a mover ficheiros do Microsoft Azure Storage para um contentor do Cloud Storage através de um token de assinatura de acesso partilhado (SAS) do Microsoft Azure Storage.

Para mais informações sobre a SAS do Microsoft Azure Storage, consulte o artigo Conceda acesso limitado a recursos do Azure Storage através de assinaturas de acesso partilhado (SAS).

Antes de começar, reveja os artigos Configure o acesso ao Microsoft Azure Storage e Preços para compreender as implicações da transferência de dados do Microsoft Azure Storage para o Cloud Storage.

Go

Para saber como instalar e usar a biblioteca cliente do Serviço de transferência de armazenamento, consulte o artigo Bibliotecas cliente do Serviço de transferência de armazenamento. Para mais informações, consulte a documentação de referência da API Go do Storage Transfer Service.

Para se autenticar no serviço de transferência de armazenamento, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

import (
	"context"
	"fmt"
	"io"
	"os"

	storagetransfer "cloud.google.com/go/storagetransfer/apiv1"
	"cloud.google.com/go/storagetransfer/apiv1/storagetransferpb"
)

func transferFromAzure(w io.Writer, projectID string, azureStorageAccountName string, azureSourceContainer string, gcsSinkBucket string) (*storagetransferpb.TransferJob, error) {
	// Your Google Cloud Project ID.
	// projectID := "my-project-id"

	// The name of your Azure Storage account.
	// azureStorageAccountName := "my-azure-storage-acc"

	// The name of the Azure container to transfer objects from.
	// azureSourceContainer := "my-source-container"

	// The name of the GCS bucket to transfer objects to.
	// gcsSinkBucket := "my-sink-bucket"

	ctx := context.Background()
	client, err := storagetransfer.NewClient(ctx)
	if err != nil {
		return nil, fmt.Errorf("storagetransfer.NewClient: %w", err)
	}
	defer client.Close()

	// The Azure SAS token, should be accessed via environment variable for security
	azureSasToken := os.Getenv("AZURE_SAS_TOKEN")

	req := &storagetransferpb.CreateTransferJobRequest{
		TransferJob: &storagetransferpb.TransferJob{
			ProjectId: projectID,
			TransferSpec: &storagetransferpb.TransferSpec{
				DataSource: &storagetransferpb.TransferSpec_AzureBlobStorageDataSource{
					AzureBlobStorageDataSource: &storagetransferpb.AzureBlobStorageData{
						StorageAccount: azureStorageAccountName,
						AzureCredentials: &storagetransferpb.AzureCredentials{
							SasToken: azureSasToken,
						},
						Container: azureSourceContainer,
					},
				},
				DataSink: &storagetransferpb.TransferSpec_GcsDataSink{
					GcsDataSink: &storagetransferpb.GcsData{BucketName: gcsSinkBucket}},
			},
			Status: storagetransferpb.TransferJob_ENABLED,
		},
	}
	resp, err := client.CreateTransferJob(ctx, req)
	if err != nil {
		return nil, fmt.Errorf("failed to create transfer job: %w", err)
	}
	if _, err = client.RunTransferJob(ctx, &storagetransferpb.RunTransferJobRequest{
		ProjectId: projectID,
		JobName:   resp.Name,
	}); err != nil {
		return nil, fmt.Errorf("failed to run transfer job: %w", err)
	}
	fmt.Fprintf(w, "Created and ran transfer job from %v to %v with name %v", azureSourceContainer, gcsSinkBucket, resp.Name)
	return resp, nil
}

Java

Para saber como instalar e usar a biblioteca cliente do Serviço de transferência de armazenamento, consulte o artigo Bibliotecas cliente do Serviço de transferência de armazenamento. Para mais informações, consulte a documentação de referência da API Java do Storage Transfer Service.

Para se autenticar no serviço de transferência de armazenamento, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

import com.google.storagetransfer.v1.proto.StorageTransferServiceClient;
import com.google.storagetransfer.v1.proto.TransferProto;
import com.google.storagetransfer.v1.proto.TransferProto.RunTransferJobRequest;
import com.google.storagetransfer.v1.proto.TransferTypes.AzureBlobStorageData;
import com.google.storagetransfer.v1.proto.TransferTypes.AzureCredentials;
import com.google.storagetransfer.v1.proto.TransferTypes.GcsData;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferJob;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferJob.Status;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferSpec;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class TransferFromAzure {
  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    // Your Google Cloud Project ID
    String projectId = "my-project-id";

    // Your Azure Storage Account name
    String azureStorageAccount = "my-azure-account";

    // The Azure source container to transfer data from
    String azureSourceContainer = "my-source-container";

    // The GCS bucket to transfer data to
    String gcsSinkBucket = "my-sink-bucket";

    transferFromAzureBlobStorage(
        projectId, azureStorageAccount, azureSourceContainer, gcsSinkBucket);
  }

  /**
   * Creates and runs a transfer job to transfer all data from an Azure container to a GCS bucket.
   */
  public static void transferFromAzureBlobStorage(
      String projectId,
      String azureStorageAccount,
      String azureSourceContainer,
      String gcsSinkBucket)
      throws IOException, ExecutionException, InterruptedException {

    // Your Azure SAS token, should be accessed via environment variable
    String azureSasToken = System.getenv("AZURE_SAS_TOKEN");

    TransferSpec transferSpec =
        TransferSpec.newBuilder()
            .setAzureBlobStorageDataSource(
                AzureBlobStorageData.newBuilder()
                    .setAzureCredentials(
                        AzureCredentials.newBuilder().setSasToken(azureSasToken).build())
                    .setContainer(azureSourceContainer)
                    .setStorageAccount(azureStorageAccount))
            .setGcsDataSink(GcsData.newBuilder().setBucketName(gcsSinkBucket).build())
            .build();

    TransferJob transferJob =
        TransferJob.newBuilder()
            .setProjectId(projectId)
            .setStatus(Status.ENABLED)
            .setTransferSpec(transferSpec)
            .build();

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources,
    // or use "try-with-close" statement to do this automatically.
    try (StorageTransferServiceClient storageTransfer = StorageTransferServiceClient.create()) {
      // Create the transfer job
      TransferJob response =
          storageTransfer.createTransferJob(
              TransferProto.CreateTransferJobRequest.newBuilder()
                  .setTransferJob(transferJob)
                  .build());

      // Run the created job
      storageTransfer
          .runTransferJobAsync(
              RunTransferJobRequest.newBuilder()
                  .setProjectId(projectId)
                  .setJobName(response.getName())
                  .build())
          .get();

      System.out.println(
          "Created and ran a transfer job from "
              + azureSourceContainer
              + " to "
              + gcsSinkBucket
              + " with "
              + "name "
              + response.getName());
    }
  }
}

Node.js

Para saber como instalar e usar a biblioteca cliente do Serviço de transferência de armazenamento, consulte o artigo Bibliotecas cliente do Serviço de transferência de armazenamento. Para mais informações, consulte a documentação de referência da API Node.js do Storage Transfer Service.

Para se autenticar no serviço de transferência de armazenamento, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.


// Imports the Google Cloud client library
const {
  StorageTransferServiceClient,
} = require('@google-cloud/storage-transfer');

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// The ID of the Google Cloud Platform Project that owns the job
// projectId = 'my-project-id'

// A useful description for your transfer job
// description = 'My transfer job'

// Azure Storage Account name
// azureStorageAccount = 'accountname'

// Azure Storage Account name
// azureSourceContainer = 'my-azure-source-bucket'

// Azure Shared Access Signature token
// azureSASToken = '?sv=...'

// Google Cloud Storage destination bucket name
// gcsSinkBucket = 'my-gcs-destination-bucket'

// Creates a client
const client = new StorageTransferServiceClient();

/**
 * Creates a one-time transfer job from Azure Blob Storage to Google Cloud Storage.
 */
async function transferFromBlobStorage() {
  // Setting the start date and the end date as the same time creates a
  // one-time transfer
  const now = new Date();
  const oneTimeSchedule = {
    day: now.getDate(),
    month: now.getMonth() + 1,
    year: now.getFullYear(),
  };

  // Runs the request and creates the job
  const [transferJob] = await client.createTransferJob({
    transferJob: {
      projectId,
      description,
      status: 'ENABLED',
      schedule: {
        scheduleStartDate: oneTimeSchedule,
        scheduleEndDate: oneTimeSchedule,
      },
      transferSpec: {
        azureBlobStorageDataSource: {
          azureCredentials: {
            sasToken: azureSASToken,
          },
          container: azureSourceContainer,
          storageAccount: azureStorageAccount,
        },
        gcsDataSink: {
          bucketName: gcsSinkBucket,
        },
      },
    },
  });

  console.log(
    `Created and ran a transfer job from '${azureSourceContainer}' to '${gcsSinkBucket}' with name ${transferJob.name}`
  );
}

transferFromBlobStorage();

Python

Para saber como instalar e usar a biblioteca cliente do Serviço de transferência de armazenamento, consulte o artigo Bibliotecas cliente do Serviço de transferência de armazenamento. Para mais informações, consulte a documentação de referência da API Python do Storage Transfer Service.

Para se autenticar no serviço de transferência de armazenamento, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

from datetime import datetime

from google.cloud import storage_transfer


def create_one_time_azure_transfer(
    project_id: str,
    description: str,
    azure_storage_account: str,
    azure_sas_token: str,
    source_container: str,
    sink_bucket: str,
):
    """Creates a one-time transfer job from Azure Blob Storage to Google Cloud
    Storage."""

    # Initialize client that will be used to create storage transfer requests.
    # This client only needs to be created once, and can be reused for
    # multiple requests.
    client = storage_transfer.StorageTransferServiceClient()

    # The ID of the Google Cloud Platform Project that owns the job
    # project_id = 'my-project-id'

    # A useful description for your transfer job
    # description = 'My transfer job'

    # Azure Storage Account name
    # azure_storage_account = 'accountname'

    # Azure Shared Access Signature token
    # azure_sas_token = '?sv=...'

    # Azure Blob source container name
    # source_container = 'my-azure-source-bucket'

    # Google Cloud Storage destination bucket name
    # sink_bucket = 'my-gcs-destination-bucket'

    now = datetime.utcnow()
    # Setting the start date and the end date as
    # the same time creates a one-time transfer
    one_time_schedule = {"day": now.day, "month": now.month, "year": now.year}

    transfer_job_request = storage_transfer.CreateTransferJobRequest(
        {
            "transfer_job": {
                "project_id": project_id,
                "description": description,
                "status": storage_transfer.TransferJob.Status.ENABLED,
                "schedule": {
                    "schedule_start_date": one_time_schedule,
                    "schedule_end_date": one_time_schedule,
                },
                "transfer_spec": {
                    "azure_blob_storage_data_source": {
                        "storage_account": azure_storage_account,
                        "azure_credentials": {"sas_token": azure_sas_token},
                        "container": source_container,
                    },
                    "gcs_data_sink": {
                        "bucket_name": sink_bucket,
                    },
                },
            }
        }
    )

    result = client.create_transfer_job(transfer_job_request)
    print(f"Created transferJob: {result.name}")

Transfira a partir de um sistema de ficheiros

Consulte o artigo Transfira de um sistema de ficheiros para o Cloud Storage.