移動及重新命名值區

建立值區後,您要永久定義其名稱、地理位置以及所屬的專案。不過還是可以有效移動或重命名您的值區:

  • 如果舊值區中沒有任何資料,請刪除值區,並使用新名稱,在新位置或新專案中建立另一個值區。

  • 如果您的舊值區內有資料,請用所需的名稱、位置和/或專案建立一個新值區,再將舊值區中的資料複製到新值區,然後刪除舊值區及其內容。以下步驟會說明此流程。

    請注意,如果您希望新值區與舊值區有相同的名稱,則必須將資料移動兩次:先在中介值區暫時保存資料,如此即可刪除原始值區,將值區的名稱釋出,以供最終的值區使用。

將資料從一個值區移動到另一個值區:

步驟 1) 建立新值區

主控台

  1. 在 Google Cloud Platform Console 中開啟 Cloud Storage 瀏覽器。
    開啟 Cloud Storage 瀏覽器
  2. 按一下 [Create bucket] (建立值區) 以開啟值區建立表單。
  3. 新的值區。

  4. 輸入值區資訊,然後按一下 [Continue] (繼續) 以完成每個步驟:
    • 指定[Name](名稱),名稱必須遵守值區命名規定
    • 選取值區的[Default storage class](預設儲存空間級別)。根據預設,系統會指派預設的儲存空間級別給所有上傳到值區的物件。接下來,選取要永久儲存值區資料的[Location](位置)

      注意:右側窗格中的[Monthly cost estimate](每月預估費用)面板會根據您所選的儲存空間級別和位置,以及預期的資料大小和作業,估算值區的每月費用。

    • 請選取一種[Access control model](存取權控管模型),決定值區物件的存取控管方式
    • (選用) 您可以新增值區標籤、設定保留政策,以及選擇加密方式
  5. 按一下[Done] (完成)

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]/

程式碼範例

的 JSON API 參考資料中瞭解建立新值區的其他選項。

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
}

Java

詳情請參閱 Cloud Storage Java 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]"
    }

    其中:

    • [BUCKET_NAME] 是您要授予值區的名稱,必須遵守命名要求。例如:my-bucket
    • [BUCKET_LOCATION] 是您希望儲存值區物件資料位置。例如:us-east1
    • [STORAGE_CLASS] 是值區的預設儲存空間級別。例如:nearline
  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) 將物件從舊值區複製到新值區

主控台

請使用 Google Cloud Platform Console 中的 Cloud Storage 移轉服務,將資料從 Cloud Storage 值區複製到另一個值區:

  1. 開啟 Google Cloud Platform Console 中的「移轉」頁面。

    開啟「移轉」頁面

  2. 按一下[Create transfer job](建立移轉工作)
  3. 按照逐步操作說明,在完成每個步驟時按一下[Continue](繼續)

    • 選取來源:使用 Google Cloud Storage 值區作為您選取的來源,然後按一下[Browse](瀏覽)尋找並選取要移出物件的值區。

    • 選取目標:按一下[Browse](瀏覽)尋找並選取要移入物件的值區

      此外,請選取「轉移作業完成後刪除來源物件」核取方塊。

    • 設定轉移:您可以忽略此部分。

  4. 逐步完成操作後,請按一下[Create](建立)

    如此將物件從舊值區複製到新值區的流程即會開始。這個流程可能需要一些時間;不過在按一下[Create](建立)後,您就可以離開 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

    例如,如果物件的大小為 10 GB,對此要求的回應則會類似以下範例:

    {
    "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) 刪除舊值區中的物件

主控台

您不需要執行任何動作就能刪除舊值區中的物件:使用「移轉服務」複製物件時,系統會自動刪除舊物件(假設您選取了「移轉完成後刪除來源物件」核取方塊)。

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

如果成功的話,這個方法會傳回空白的回應。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Storage
需要協助嗎?請前往我們的支援網頁