Como mover e renomear intervalos

Ao criar um intervalo, você define permanentemente o nome, a localização geográfica e o projeto de que esse intervalo faz parte. No entanto, é possível mover ou renomear o intervalo com eficiência:

  • Se não houver dados no intervalo antigo, exclua-o e crie outro intervalo com um novo nome, em um novo local ou em um novo projeto.

  • Se houver dados em seu intervalo antigo, crie um novo com o nome, local e/ou projeto desejados, copie os dados do intervalo antigo para o novo e exclua o intervalo antigo e o conteúdo dele. Veja a descrição desse processo nas etapas abaixo.

    Se quiser que o novo intervalo tenha o mesmo nome do antigo, mova os dados duas vezes: um intervalo intermediário armazena temporariamente os dados para que você possa excluir o intervalo original e liberar o nome do intervalo final.

Para mover seus dados de um intervalo para outro, siga estas etapas:

Etapa 1) Criar um novo intervalo

Console

  1. Abra o navegador do Cloud Storage no Console do Google Cloud.
    Abrir o navegador do Cloud Storage
  2. Clique em Criar intervalo para abrir o formulário de criação do intervalo.
  3. Novo intervalo

  4. Insira as informações do intervalo e clique em Continuar para concluir cada etapa:
    • Especifique um Nome, sujeito aos requisitos de nomenclatura do intervalo.
    • Selecione uma classe de armazenamento padrão para o intervalo. A classe de armazenamento padrão será atribuída por padrão a todos os objetos carregados no intervalo. Em seguida, selecione um Local onde os dados do intervalo serão armazenados permanentemente.

      Observação: o painel Estimativa de custo mensal no painel direito estima os custos mensais do intervalo com base na classe e no local de armazenamento selecionados, assim como no tamanho e nas operações dos dados.

    • Selecione um modelo de controle de acesso para determinar como controlar o acesso aos objetos do intervalo.
    • Opcionalmente, é possível adicionar rótulos de intervalos, definir uma política de retenção e escolher um método de criptografia.
  5. Clique em Concluído.

gsutil

Use o comando gsutil mb:

gsutil mb gs://[BUCKET_NAME]/

Em que:

Para ter mais controle sobre a criação do intervalo, defina as seguintes sinalizações opcionais:

Exemplo:

      gsutil mb -p [PROJECT_NAME] -c [STORAGE_CLASS] -l [BUCKET_LOCATION] -b on gs://[BUCKET_NAME]/

Amostras de código

.

C++

Para mais informações, consulte a documentação de referência da API do Cloud Storage para C++.

namespace gcs = google::cloud::storage;
    using ::google::cloud::StatusOr;
    [](gcs::Client client, std::string bucket_name) {
      StatusOr<gcs::BucketMetadata> bucket_metadata =
          client.CreateBucket(bucket_name, gcs::BucketMetadata());

      if (!bucket_metadata) {
        throw std::runtime_error(bucket_metadata.status().message());
      }

      std::cout << "Bucket " << bucket_metadata->name() << " created."
                << "\nFull Metadata: " << *bucket_metadata << "\n";
    }

C#

Para mais informações, consulte a documentação de referência da API do Cloud Storage para C#.

private void CreateBucket(string bucketName)
    {
        var storage = StorageClient.Create();
        storage.CreateBucket(s_projectId, bucketName);
        Console.WriteLine($"Created {bucketName}.");
    }

Go

Para mais informações, consulte a documentação de referência da API do Cloud Storage para Go.

ctx := context.Background()
    bucket := client.Bucket(bucketName)

    ctx, cancel := context.WithTimeout(ctx, time.Second*10)
    defer cancel()
    if err := bucket.Create(ctx, projectID, &storage.BucketAttrs{
    	StorageClass: "COLDLINE",
    	Location:     "asia",
    }); err != nil {
    	return err
    }

Java

Para mais informações, consulte a documentação de referência da API do Cloud Storage para Java.

Bucket bucket =
        storage.create(
            BucketInfo.newBuilder(bucketName)
                // See here for possible values: http://g.co/cloud/storage/docs/storage-classes
                .setStorageClass(StorageClass.COLDLINE)
                // Possible values: http://g.co/cloud/storage/docs/bucket-locations#location-mr
                .setLocation("asia")
                .build());

Node.js

Para mais informações, consulte a documentação de referência da API Cloud Storage para Node.js.

/**
     * TODO(developer): Uncomment the following line before running the sample.
     */
    // const bucketName = 'Name of a bucket, e.g. my-bucket';

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

    // Creates a client
    const storage = new Storage();

    async function createBucket() {
      // Creates a new bucket in the Asia region with the coldline default storage
      // class. Leave the second argument blank for default settings.
      //
      // For default values see: https://cloud.google.com/storage/docs/locations and
      // https://cloud.google.com/storage/docs/storage-classes

      const [bucket] = await storage.createBucket(bucketName, {
        location: 'ASIA',
        storageClass: 'COLDLINE',
      });

      console.log(`Bucket ${bucket.name} created.`);
    }

    createBucket().catch(console.error);

PHP

Para mais informações, consulte a documentação de referência da API Cloud Storage para PHP.

use Google\Cloud\Storage\StorageClient;

    /**
     * Create a Cloud Storage Bucket.
     *
     * @param string $bucketName name of the bucket to create.
     * @param string $options options for the new bucket.
     *
     */
    function create_bucket($bucketName, $options = [])
    {
        $storage = new StorageClient();
        $bucket = $storage->createBucket($bucketName, $options);
        printf('Bucket created: %s' . PHP_EOL, $bucket->name());
    }

Python

Para mais informações, consulte a documentação de referência da API Cloud Storage para Python.

from google.cloud import storage

    def create_bucket(bucket_name):
        """Creates a new bucket."""
        # bucket_name = "your-new-bucket-name"

        storage_client = storage.Client()

        bucket = storage_client.create_bucket(bucket_name)

        print("Bucket {} created".format(bucket.name))

    

Ruby

Para mais informações, consulte a documentação de referência da API do Cloud Storage para Ruby.

# project_id    = "Your Google Cloud project ID"
    # bucket_name   = "Name of Google Cloud Storage bucket to create"
    # location      = "Location of where to create Cloud Storage bucket"
    # storage_class = "Storage class of Cloud Storage bucket"

    require "google/cloud/storage"

    storage = Google::Cloud::Storage.new project_id: project_id
    bucket  = storage.create_bucket bucket_name,
                                    location:      location,
                                    storage_class: storage_class

    puts "Created bucket #{bucket.name} in #{location}" +
         " with #{storage_class} class"

APIs REST

API JSON

  1. Receba um token de acesso de autorização do OAuth 2.0 Playground. Configure o Playground para usar suas credenciais do OAuth.
  2. Crie um arquivo .json com as informações a seguir:
  3. {
          "name": "[BUCKET_NAME]",
          "location": "[BUCKET_LOCATION]",
          "storageClass": "[STORAGE_CLASS]"
        }

    Em que:

  4. Use cURL para chamar a API JSON:
    curl -X POST --data-binary @[JSON_FILE_NAME].json \
             -H "Authorization: Bearer [OAUTH2_TOKEN]" \
             -H "Content-Type: application/json" \
             "https://storage.googleapis.com/storage/v1/b?project=[PROJECT_ID]"

    Em que:

    • [JSON_FILE_NAME] é o nome do arquivo JSON criado na Etapa 2.
    • [OAUTH2_TOKEN] é o token de acesso gerado na Etapa 1.
    • [PROJECT_ID] é o ID do projeto ao qual o intervalo será associado. Por exemplo, my-project.

API XML

  1. Receba um token de acesso de autorização do OAuth 2.0 Playground. Configure o Playground para usar suas credenciais do OAuth.
  2. Crie um arquivo .xml com as informações a seguir:
  3. <CreateBucketConfiguration>
           <LocationConstraint>[BUCKET_LOCATION]</LocationConstraint>
           <StorageClass>[STORAGE_CLASS]</StorageClass>
        </CreateBucketConfiguration>

    Em que:

  4. Use cURL para chamar a API XML:
    curl -X PUT --data-binary @[XML_FILE_NAME].xml \
             -H "Authorization: Bearer [OAUTH2_TOKEN]" \
             -H "x-goog-project-id: [PROJECT_ID]" \
             "https://storage.googleapis.com/[BUCKET_NAME]"

    Em que:

    • [XML_FILE_NAME] é o nome do arquivo XML criado na Etapa 2.
    • [OAUTH2_TOKEN] é o token de acesso gerado na Etapa 1.
    • [PROJECT_ID] é o ID do projeto ao qual o intervalo será associado. Por exemplo, my-project.
    • [BUCKET_NAME] é o nome que você quer dar ao intervalo, sujeito a requisitos de nomenclatura. Por exemplo, my-bucket.

Etapa 2) Copiar objetos do intervalo antigo para o novo

Console

Use o Serviço de transferência do Cloud Storage no Console do Google Cloud para copiar dados de um intervalo do Cloud Storage para outro:

  1. Abra a página "Transferir" no Console do Google Cloud.

    Abrir a página Transferir

  2. Clique em Criar job de transferência.
  3. Siga as instruções passo a passo, clicando em Continuar ao concluir cada etapa:

    • Selecione a origem: use o Intervalo do Google Cloud Storage como a origem selecionada e clique em Procurar para localizar e selecionar o intervalo do qual quer mover os objetos.

    • Selecione Destino: clique em Procurar para localizar e selecionar o intervalo em que você quer mover os objetos.

      Marque a caixa de seleção Excluir objetos de origem após a conclusão da transferência.

    • Configurar transferência: ignore essa seção.

  4. Depois de concluir as instruções, clique em Criar.

    Isso inicia o processo de cópia dos objetos do intervalo antigo para o novo. Esse processo pode levar algum tempo. No entanto, depois de clicar em Criar, será possível sair do Console do Google Cloud.

Para visualizar o progresso da transferência: abra a página "Transferir" no Console do Google Cloud.

Abrir a página Transferir

gsutil

  1. Verifique se pelo menos o gsutil 4.12 está instalado.
  2. Use o comando gsutil cp, com a opção -r, para copiar recursivamente todos os objetos do intervalo de origem para o intervalo de destino:

    gsutil cp -r gs://[SOURCE_BUCKET]/* gs://[DESTINATION_BUCKET]

    Em que:

    • [SOURCE_BUCKET] é o nome do intervalo original. Por exemplo, old-bucket.
    • [DESTINATION_BUCKET] é o nome do novo intervalo criado na Etapa 1) Criar um novo intervalo. Por exemplo, my-bucket.

APIs REST

API JSON

Use o método rewriteda API JSON para copiar dados em blocos de tamanho limitado em várias solicitações. Ao fazer isso, é preciso estabelecer um loop e chamar o método rewrite até que todos os dados tenham sido movidos:

  1. Use cURL e o método da API JSON rewrite para copiar dados de um intervalo de origem para um intervalo de destino:

    curl -X POST \
        -H "Authorization: Bearer [OAUTH2_TOKEN]" \
        -H "Content-Length: 0" \
        "https://storage.googleapis.com/storage/v1/b/[SOURCE_BUCKET]/o/[OBJECT_NAME]/rewriteTo/b/[DESTINATION_BUCKET]/o/[OBJECT_NAME]"

    Em que:

    • [OAUTH2_TOKEN] é o token de acesso gerado na Etapa 1) Criar um novo intervalo;
    • [SOURCE_BUCKET] é o nome do intervalo original. Por exemplo, old-bucket.
    • [OBJECT_NAME] é o nome do objeto que você quer copiar. Por exemplo, pets/dog.png.
    • [DESTINATION_BUCKET] é o nome do novo intervalo criado na Etapa 1) Criar um novo intervalo. Por exemplo, my-bucket.

    Se o objeto tiver, por exemplo, 10 GB de tamanho, a resposta a essa solicitação será semelhante ao seguinte exemplo:

    {
        "kind": "storage#rewriteResponse",
        "totalBytesRewritten": 1048576,
        "objectSize": 10000000000,
        "done": false,
        "rewriteToken": [TOKEN_VALUE]
        }
  2. Use o rewriteToken em uma solicitação subsequente para continuar copiando dados:

    curl -X POST \
        -H "Authorization: Bearer [OAUTH2_TOKEN]" \
        -H "Content-Length: 0" \
        -d '{"rewriteToken": "[TOKEN_VALUE]"}' \
        "https://storage.googleapis.com/storage/v1/b/[SOURCE_BUCKET]/o/[OBJECT_NAME]/rewriteTo/b/[DESTINATION_BUCKET]/o/[OBJECT_NAME]"

    Em que:

    • [OAUTH2_TOKEN] é o token de acesso gerado na Etapa 1) Criar um novo intervalo;
    • [TOKEN_VALUE] é o valor de rewriteToken retornado na Etapa 1.
    • [SOURCE_BUCKET] é o nome do intervalo original. Por exemplo, old-bucket.
    • [OBJECT_NAME] é o nome do objeto que você quer copiar. Por exemplo, pets/bunny.png.
    • [DESTINATION_BUCKET] é o nome do novo intervalo criado na Etapa 1) Criar um novo intervalo. Por exemplo, my-bucket.

Quando todos os dados são copiados, a última resposta tem uma propriedade done igual a true, não há propriedade rewriteToken e os metadados do objeto copiado são incluídos na propriedade resource.

{
      "kind": "storage#rewriteResponse",
      "totalBytesRewritten": 10000000000,
      "objectSize": 10000000000,
      "done": true,
      "resource": objects Resource
    }

Etapa 3) Excluir os objetos do intervalo antigo

Console

Não é necessário fazer nada para excluir os objetos do intervalo antigo: como parte da cópia de objetos com o Serviço de transferência, os objetos antigos são excluídos automaticamente (pressupondo que a caixa de seleção "Excluir objetos da origem após a conclusão da transferência" está marcada).

gsutil

Use o comando gsutil rm, com a opção -r, para excluir recursivamente todos os objetos do intervalo de origem, assim como o próprio intervalo de origem:

gsutil rm -r gs://[SOURCE_BUCKET]

Em que [SOURCE_BUCKET] é o nome do intervalo original. Por exemplo, old-bucket.

Ou, para excluir os objetos, mas manter o intervalo de origem:

gsutil rm -a gs://[SOURCE_BUCKET]/**

APIs REST

API JSON

  • Use cURL e o método da API JSONdelete para remover a versão original dos dados com o seguinte comando:

    curl -X DELETE \
        -H "Authorization: Bearer [OAUTH2_TOKEN]" \
        "https://storage.googleapis.com/storage/v1/b/[SOURCE_BUCKET]/o/[OBJECT_NAME]"

    Em que:

    • [OAUTH2_TOKEN] é o token de acesso gerado na Etapa 1) Criar um novo intervalo;
    • [SOURCE_BUCKET] é o nome do intervalo original. Por exemplo, old-bucket.
    • [OBJECT_NAME] é o nome do objeto que você quer excluir. Por exemplo, pets/dog.png.

Se for bem-sucedido, o método retornará uma resposta vazia.

A seguir