Como mover e renomear buckets

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

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

  • Se houver dados no bucket antigo, crie um novo com o nome, local e/ou projeto que você quer, copie os dados do bucket antigo para o novo e exclua o antigo e o conteúdo dele. Veja a descrição desse processo nas etapas abaixo.

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

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

Etapa 1) Criar um novo bucket

Console

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

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

      Observação: o painel Estimativa de custo mensal no painel direito estima os custos mensais do bucket com base na classe e no local de armazenamento selecionados, bem 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 bucket.
    • Como alternativa, é possível adicionar rótulos de bucket, definir uma política de retenção e escolher um método de criptografia.
  5. Clique em Done.

gsutil

Use o comando gsutil mb:

gsutil mb gs://[BUCKET_NAME]/

Em que:

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

Exemplo:

  gsutil mb -p [PROJECT_ID] -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 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 Cloud Storage para C#.

public static Bucket StorageCreateBucket(string projectId, string bucketName)
{
    var storage = StorageClient.Create();
    var bucket = storage.CreateBucket(projectId, bucketName);
    Console.WriteLine($"Created {bucketName}.");
    return bucket;
}

Go

Para mais informações, consulte a documentação de referência da API 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 Cloud Storage para Java.

import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.BucketInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageClass;
import com.google.cloud.storage.StorageOptions;

public class CreateBucketWithStorageClassAndLocation {
  public static void createBucketWithStorageClassAndLocation(String projectId, String bucketName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID to give your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();

    // See the StorageClass documentation for other valid storage classes:
    // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/storage/StorageClass.html
    StorageClass storageClass = StorageClass.COLDLINE;

    // See this documentation for other valid locations:
    // http://g.co/cloud/storage/docs/bucket-locations#location-mr
    String location = "asia";

    Bucket bucket =
        storage.create(
            BucketInfo.newBuilder(bucketName)
                .setStorageClass(storageClass)
                .setLocation(location)
                .build());

    System.out.println(
        "Created bucket "
            + bucket.getName()
            + " in "
            + bucket.getLocation()
            + " with storage class "
            + bucket.getStorageClass());
  }
}

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 Cloud Storage para Ruby.

# 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
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 (em inglês) 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 bucket 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 (em inglês) 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 bucket será associado. Por exemplo, my-project.
    • [BUCKET_NAME] é o nome que você quer dar ao bucket, sujeito a requisitos de nomenclatura. Por exemplo, my-bucket.

Etapa 2) Copiar objetos do bucket 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 bucket do Cloud Storage para outro:

  1. Abra a página "Transferência" no Console do Google Cloud.

    Abrir a página Transferência

  2. Clique em Criar job de transferência.
  3. Siga as instruções detalhadas e clique em Continuar ao concluir cada etapa:

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

    • Selecione Destino: clique em Procurar para localizar e selecionar o bucket para o qual 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 bucket 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 "Transferência" no Console do Google Cloud.

Abrir a página Transferência

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 bucket de origem para o bucket de destino:

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

    Em que:

    • [SOURCE_BUCKET] é o nome do bucket original. Por exemplo, old-bucket.
    • [DESTINATION_BUCKET] é o nome do novo bucket criado na Etapa 1) Criar um novo bucket. 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 bucket de origem para um bucket 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 bucket;
    • [SOURCE_BUCKET] é o nome do bucket 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 bucket criado na Etapa 1) Criar um novo bucket. 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 bucket;
    • [TOKEN_VALUE] é o valor de rewriteToken retornado na Etapa 1.
    • [SOURCE_BUCKET] é o nome do bucket 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 bucket criado na Etapa 1) Criar um novo bucket. 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 bucket antigo

Console

Não é necessário fazer nada para excluir os objetos do bucket 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 bucket de origem, assim como o próprio bucket de origem:

gsutil rm -r gs://[SOURCE_BUCKET]

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

Ou, para excluir os objetos, mas manter o bucket 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 bucket;
    • [SOURCE_BUCKET] é o nome do bucket 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