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.
  6. Consulte Solução de problemas para ver informações detalhadas sobre erros de operações com falha no navegador do Cloud Storage.

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 const& 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#.

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

# 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

Consulte Solução de problemas para ver informações detalhadas sobre erros de operações com falha no navegador do Cloud Storage.

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