객체 스토리지 클래스 변경

이 페이지에서는 객체 덮어쓰기를 통해 버킷 내 객체의 스토리지 클래스를 변경하는 방법을 설명합니다. 객체를 덮어쓰지 않고 객체 스토리지 클래스를 변경하는 방법을 알아보려면 객체 수명 주기 관리 기능을 참조하세요.

Console

Console을 통해서는 개별 객체 스토리지 클래스를 설정할 수 없습니다. 대신 gsutil을 사용하세요.

gsutil

rewrite 명령어에 -s 플래그를 사용합니다. 예를 들면 다음과 같습니다.

gsutil rewrite -s [STORAGE_CLASS] gs://[PATH_TO_OBJECT]

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

  • [STORAGE_CLASS]는 객체의 새로운 스토리지 클래스입니다. 예를 들면 nearline입니다.
  • [PATH_TO_OBJECT]는 클래스를 변경할 객체의 이름입니다. 예를 들면 pets/dog.png입니다.

코드 샘플

C++

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

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name,
   std::string storage_class) {
  StatusOr<gcs::ObjectMetadata> object_metadata =
      client.RewriteObjectBlocking(
          bucket_name, object_name, bucket_name, object_name,
          gcs::WithObjectMetadata(
              gcs::ObjectMetadata().set_storage_class(storage_class)));

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

  std::cout << "Changed storage class of object " << object_metadata->name()
            << " in bucket " << object_metadata->bucket() << " to "
            << object_metadata->storage_class() << "\n";
}

자바

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

import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageClass;
import com.google.cloud.storage.StorageOptions;

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

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

    // The ID of your GCS object
    // String objectName = "your-object-name";

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    BlobId blobId = BlobId.of(bucketName, objectName);

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

    // You can't change an object's storage class directly, the only way is to rewrite the object
    // with the
    // desired storage class
    Storage.CopyRequest request =
        Storage.CopyRequest.newBuilder()
            .setSource(blobId)
            .setTarget(BlobInfo.newBuilder(blobId).setStorageClass(storageClass).build())
            .build();
    Blob updatedBlob = storage.copy(request).getResult();

    System.out.println(
        "Object "
            + objectName
            + " in bucket "
            + bucketName
            + " had its storage class set to "
            + updatedBlob.getStorageClass().name());
  }
}

REST API

JSON API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. OAuth 사용자 인증 정보를 사용하도록 Playground를 구성합니다.
  2. 다음 정보를 포함하는 .json 파일을 만듭니다.

    {
      "storageClass": "[STORAGE_CLASS]"
    }

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

  3. cURL을 사용하여 POST 객체 요청으로 JSON API를 호출합니다.

    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/[BUCKET_NAME]/o/[OBJECT_NAME]/rewriteTo/b/[BUCKET_NAME]/o/[OBJECT_NAME]"

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

    • [JSON_FILE_NAME]은 2단계에서 만든 JSON 파일의 이름입니다.
    • [OAUTH2_TOKEN]은 1단계에서 생성한 액세스 토큰입니다.
    • [BUCKET_NAME]은 원본 객체가 포함된 버킷의 이름입니다. 예를 들면 my-bucket입니다.
    • [OBJECT_NAME]은 객체의 이름입니다. 예를 들면 pets/dog.png입니다.

XML API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. OAuth 사용자 인증 정보를 사용하도록 Playground를 구성합니다.
  2. cURL을 사용하여 PUT Object 요청으로 XML API를 호출합니다.

    curl -X PUT --data-binary @[OBJECT] \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Type: [OBJECT_CONTENT_TYPE]" \
      -H "x-goog-storage-class: [STORAGE_CLASS]" \
      "https://storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME]"

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

    • [OBJECT]는 스토리지 클래스를 변경할 객체의 로컬 경로입니다(XML API를 사용하여 스토리지 클래스를 변경할 때 이 객체를 다시 업로드해야 함). 예를 들면 Desktop/dog.png입니다.
    • [OAUTH2_TOKEN]은 1단계에서 생성한 액세스 토큰입니다.
    • [OBJECT_CONTENT_TYPE]은 객체의 콘텐츠 유형입니다. 예를 들면 image/png입니다.
    • [STORAGE_CLASS]는 객체의 새로운 스토리지 클래스입니다. 예를 들면 nearline입니다.
    • [BUCKET_NAME]은 덮어쓰려는 객체가 포함된 버킷의 이름입니다. 예를 들면 my-bucket입니다.
    • [OBJECT_NAME]은 덮어쓰려는 객체의 이름입니다. 예를 들면 pets/dog.png입니다.

다음 단계