버킷 이동 및 이름 변경

버킷을 만들 때 버킷의 이름, 지리적 위치, 버킷이 속한 프로젝트를 영구 정의합니다. 그러나 실질적으로 버킷을 이동하거나 이름을 변경하는 방법이 있습니다.

  • 이전 버킷에 데이터가 없는 경우 버킷을 삭제하고 새 위치 또는 새 프로젝트에 새 이름으로 다른 버킷을 만듭니다.

  • 이전 버킷에 데이터가 있는 경우 원하는 이름, 위치 및/또는 프로젝트로 새 버킷을 만들고, 이전 버킷에서 새 버킷으로 데이터를 복사하고, 이전 버킷과 내용을 삭제하면 됩니다. 아래 단계에서 이 과정을 설명합니다.

    새 버킷에 이전 버킷과 동일한 이름을 지정하려면 데이터를 두 번 이동해야 합니다. 즉, 최종 버킷에 해당 이름을 사용하기 위해 원래 버킷을 삭제할 수 있도록 중간 버킷에 데이터를 임시로 보관하면 됩니다.

버킷 간에 데이터를 이동하는 방법은 다음과 같습니다.

1단계) 새 버킷 만들기

Console

  1. Google Cloud Platform Console에서 Cloud Storage 브라우저를 엽니다.
    Cloud Storage 브라우저 열기
  2. 버킷 생성을 클릭하여 버킷 생성 양식을 엽니다.
  3. 새 버킷

  4. 각 단계를 완료하려면 버킷 정보를 입력하고 계속을 클릭하세요.
    • 버킷 이름 요구사항에 따라 이름을 지정합니다.
    • 버킷의 기본 스토리지 클래스를 선택합니다. 버킷에 업로드된 모든 객체에는 기본 스토리지 클래스가 기본적으로 할당됩니다. 그런 다음 버킷 데이터가 영구적으로 저장될 위치를 선택합니다.

      참고: 오른쪽 창에 있는 월별 예상 비용 패널은 선택한 스토리지 클래스와 위치, 예상 데이터 크기 및 작업을 기준으로 버킷의 월별 비용을 추정합니다.

    • 액세스 제어 모델을 선택하여 버킷의 객체에 대한 액세스 제어 방법을 결정합니다.
    • 선택사항으로 버킷 라벨을 추가하고, 보관 정책을 설정하고, 암호화 방법을 선택할 수 있습니다.
  5. 완료를 클릭합니다.

gsutil

gsutil mb 명령어를 사용합니다.

gsutil mb gs://[BUCKET_NAME]/

각 항목의 의미는 다음과 같습니다.

  • [BUCKET_NAME]은 버킷에 부여할 이름이며, 이름 지정 요구사항이 적용됩니다. 예를 들면 my-bucket입니다.

버킷 생성을 더욱 세밀하게 제어하려면 다음과 같은 선택적 플래그를 설정합니다.

  • -p: 버킷과 연결할 프로젝트를 지정합니다. 예를 들면 my-project입니다.
  • -c: 버킷의 기본 스토리지 클래스를 지정합니다. 예를 들면 nearline입니다.
  • -l: 버킷의 위치를 지정합니다. 예를 들면 us-east1입니다.
  • -b: 버킷에 버킷 정책 전용 기능을 사용 설정합니다.

예를 들면 다음과 같습니다.

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

코드 샘플

C++

자세한 내용은 Cloud Storage C++ API 참조 문서를 확인하세요.

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#

자세한 내용은 Cloud Storage C# API 참조 문서를 확인하세요.

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

Go

자세한 내용은 Cloud Storage Go API 참조 문서를 확인하세요.

bucket := client.Bucket(bucketName)
if err := bucket.Create(ctx, projectID, &storage.BucketAttrs{
	StorageClass: "COLDLINE",
	Location:     "asia",
}); err != nil {
	return err
}

자바

자세한 내용은 Cloud Storage 자바 API 참조 문서를 확인하세요.

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

자세한 내용은 Cloud Storage Node.js API 참조 문서를 확인하세요.

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

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

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

// 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
await storage.createBucket(bucketName, {
  location: 'ASIA',
  storageClass: 'COLDLINE',
});

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

PHP

자세한 내용은 Cloud Storage PHP API 참조 문서를 확인하세요.

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

자세한 내용은 Cloud Storage Python API 참조 문서를 확인하세요.

def create_bucket(bucket_name):
    """Creates a new bucket."""
    storage_client = storage.Client()
    bucket = storage_client.create_bucket(bucket_name)
    print('Bucket {} created'.format(bucket.name))

Ruby

자세한 내용은 Cloud Storage Ruby API 참조 문서를 확인하세요.

# 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"

REST API

JSON API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. Playground에서 OAuth 사용자 인증 정보를 사용하도록 구성합니다.
  2. 다음 정보를 포함하는 .json 파일을 만듭니다.
  3. {
      "name": "[BUCKET_NAME]",
      "location": "[BUCKET_LOCATION]",
      "storageClass": "[STORAGE_CLASS]"
    }

    각 항목의 의미는 다음과 같습니다.

  4. cURL을 사용하여 JSON API를 호출합니다.
    curl -X POST --data-binary @[JSON_FILE_NAME].json \
         -H "Authorization: Bearer [OAUTH2_TOKEN]" \
         -H "Content-Type: application/json" \
         "https://www.googleapis.com/storage/v1/b?project=[PROJECT_ID]"

    각 항목의 의미는 다음과 같습니다.

    • [JSON_FILE_NAME]은 2단계에서 만든 JSON 파일의 이름입니다.
    • [OAUTH2_TOKEN]은 1단계에서 생성한 액세스 토큰입니다.
    • [PROJECT_ID]는 버킷이 연결될 프로젝트의 ID입니다. 예를 들면 my-project입니다.

XML API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. Playground에서 OAuth 사용자 인증 정보를 사용하도록 구성합니다.
  2. 다음 정보를 포함하는 .xml 파일을 만듭니다.
  3. <CreateBucketConfiguration>
       <LocationConstraint>[BUCKET_LOCATION]</LocationConstraint>
       <StorageClass>[STORAGE_CLASS]</StorageClass>
    </CreateBucketConfiguration>

    각 항목의 의미는 다음과 같습니다.

  4. cURL을 사용하여 XML API를 호출합니다.
    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]"

    각 항목의 의미는 다음과 같습니다.

    • [XML_FILE_NAME]은 2단계에서 만든 XML 파일의 이름입니다.
    • [OAUTH2_TOKEN]은 1단계에서 생성한 액세스 토큰입니다.
    • [PROJECT_ID]는 버킷이 연결될 프로젝트의 ID입니다. 예를 들면 my-project입니다.
    • [BUCKET_NAME]은 버킷에 부여할 이름이며, 이름 지정 요구사항이 적용됩니다. 예를 들면 my-bucket입니다.

2단계) 이전 버킷의 객체를 새 버킷으로 복사

Console

Google Cloud Platform Console 내에서 Cloud Storage Transfer Service를 사용하여 Cloud Storage 버킷의 데이터를 다른 버킷에 복사합니다.

  1. Google Cloud Platform Console에서 전송 페이지를 엽니다.

    전송 페이지 열기

  2. 전송 작업 만들기를 클릭합니다.
  3. 단계별 안내를 따르면서 각 단계를 마칠 때마다 계속을 클릭합니다.

    • 소스 선택: Google Cloud Storage 버킷을 선택한 소스로 사용하고 찾아보기를 클릭하여 이동할 객체가 있는 버킷을 찾아 선택합니다.

    • 대상 선택: 찾아보기를 클릭하여 객체를 이동하여 저장할 버킷을 찾아 선택합니다.

      전송 완료 후 소스 객체 삭제 체크박스도 선택합니다.

    • 전송 구성: 이 섹션은 무시해도 됩니다.

  4. 단계별 안내를 완료한 후 만들기를 클릭합니다.

    그러면 이전 버킷의 객체가 새 버킷으로 복사되는 프로세스가 시작됩니다. 이 프로세스는 다소 시간이 걸릴 수 있지만 만들기를 클릭한 후에는 Google Cloud Platform Console에서 나갈 수 있습니다.

전송 진행 상황을 확인하려면 Google Cloud Platform Console에서 전송 페이지를 엽니다.

전송 페이지 열기

gsutil

  1. 적어도 gsutil 4.12가 설치되어 있어야 합니다.
  2. -r 옵션이 지정된 gsutil cp 명령어를 사용하여 소스 버킷의 모든 객체를 대상 버킷에 재귀적으로 복사합니다.

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

    각 항목의 의미는 다음과 같습니다.

    • [SOURCE_BUCKET]은 원래 버킷의 이름입니다. 예를 들면 old-bucket입니다.
    • [DESTINATION_BUCKET]1단계) 새 버킷 만들기에서 만든 새 버킷의 이름입니다. 예를 들면 my-bucket입니다.

REST API

JSON API

JSON API의 rewrite 메서드를 사용하여 데이터를 제한된 크기 단위로 나눠 여러 요청에 걸쳐 복사합니다. 이렇게 할 경우 모든 데이터가 이동할 때까지 반복하여 rewrite 메서드를 호출해야 합니다.

  1. cURLJSON API rewrite 메서드를 사용하여 소스 버킷의 데이터를 대상 버킷에 복사합니다.

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

    각 항목의 의미는 다음과 같습니다.

    • [OAUTH2_TOKEN]1단계) 새 버킷 만들기의 1단계에서 생성한 액세스 토큰입니다.
    • [SOURCE_BUCKET]은 원래 버킷의 이름입니다. 예를 들면 old-bucket입니다.
    • [OBJECT_NAME]은 복사하려는 객체의 이름입니다. 예를 들면 pets/dog.png입니다.
    • [DESTINATION_BUCKET]1단계) 새 버킷 만들기에서 만든 새 버킷의 이름입니다. 예를 들면 my-bucket입니다.

    예를 들어 객체 크기가 10GB라면 이 요청에 대한 응답은 다음 예시와 비슷합니다.

    {
    "kind": "storage#rewriteResponse",
    "totalBytesRewritten": 1048576,
    "objectSize": 10000000000,
    "done": false,
    "rewriteToken": [TOKEN_VALUE]
    }
  2. 이후 요청에서 rewriteToken을 사용하여 데이터를 계속 복사합니다.

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

    각 항목의 의미는 다음과 같습니다.

    • [OAUTH2_TOKEN]1단계) 새 버킷 만들기의 1단계에서 생성한 액세스 토큰입니다.
    • [TOKEN_VALUE]는 1단계에서 반환된 rewriteToken 값입니다.
    • [SOURCE_BUCKET]은 원래 버킷의 이름입니다. 예를 들면 old-bucket입니다.
    • [OBJECT_NAME]은 복사하려는 객체의 이름입니다. 예를 들면 pets/bunny.png입니다.
    • [DESTINATION_BUCKET]1단계) 새 버킷 만들기에서 만든 새 버킷의 이름입니다. 예를 들면 my-bucket입니다.

모든 데이터가 복사되면 마지막 응답에 truedone 속성이 있고 rewriteToken 속성은 없으며 resource 속성에 복사 대상 객체의 메타데이터가 포함되어 있습니다.

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

3단계) 이전 버킷에서 객체 삭제

Console

이전 버킷에서 객체를 삭제하기 위해 특별한 작업을 수행할 필요가 없습니다. 전송 서비스를 사용하여 객체를 복사할 때 이전 객체가 자동으로 삭제됩니다('전송 완료 후 소스 객체 삭제' 체크박스가 선택된 경우).

gsutil

-r 옵션이 지정된 gsutil rm 명령어를 사용하여 소스 버킷의 모든 객체와 소스 버킷 자체를 재귀적으로 삭제합니다.

gsutil rm -r gs://[SOURCE_BUCKET]

여기서 [SOURCE_BUCKET]은 원래 버킷의 이름입니다. 예를 들면 old-bucket입니다.

또는 객체를 삭제하되 소스 버킷은 유지하려면 다음 안내를 따르세요.

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

REST API

JSON API

  • 다음 명령어에 cURLJSON API delete 메서드를 사용하여 데이터의 원래 버전을 삭제합니다.

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

    각 항목의 의미는 다음과 같습니다.

    • [OAUTH2_TOKEN]1단계) 새 버킷 만들기의 1단계에서 생성한 액세스 토큰입니다.
    • [SOURCE_BUCKET]은 원래 버킷의 이름입니다. 예를 들면 old-bucket입니다.
    • [OBJECT_NAME]은 삭제하려는 객체의 이름입니다. 예를 들면 pets/dog.png입니다.

성공하면 메서드가 빈 응답을 반환합니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.