버킷 이동 및 이름 변경

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

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

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

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

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

Console

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

  1. 아직 대상 버킷이 없으면 버킷을 만듭니다.
  2. Google Cloud Console에서 전송 페이지를 엽니다.

    전송 페이지 열기

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

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

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

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

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

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

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

    전송 진행률을 보려면 Google Cloud Console에서 전송 페이지를 엽니다.

    전송 페이지 열기

    Cloud Storage 브라우저에서 실패한 작업에 대한 자세한 오류 정보를 가져오는 방법은 문제 해결을 참조하세요.

  6. 설정 중 전송 완료 후 소스 객체 삭제 체크박스를 선택한 경우에는 전송이 완료된 후 이전 버킷에서 객체를 삭제하기 위해 어떤 작업도 수행할 필요가 없습니다. 하지만 개별적으로 수행해야 하는 이전 버킷 삭제를 수행해야 할 수도 있습니다.

gsutil

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

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

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

    • SOURCE_BUCKET은 원래 버킷의 이름입니다. 예를 들면 old-bucket입니다.
    • DESTINATION_BUCKET은 데이터를 이동하려는 버킷의 이름입니다. 예를 들면 my-bucket입니다.
  4. -r 옵션이 지정된 gsutil rm 명령어를 사용하여 소스 버킷의 모든 객체와 소스 버킷 자체를 재귀적으로 삭제합니다.

    gsutil rm -r gs://SOURCE_BUCKET

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

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

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

REST API

JSON API

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

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. OAuth 사용자 인증 정보를 사용하도록 Playground를 구성합니다.
  2. 아직 대상 버킷이 없으면 버킷을 만듭니다.

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

    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"

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

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

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

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

    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"

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

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

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

    {
      "kind": "storage#rewriteResponse",
      "totalBytesRewritten": 10000000000,
      "objectSize": 10000000000,
      "done": true,
      "resource": objects Resource
    }
  5. 다음 명령어에 cURLJSON API delete 메서드를 사용하여 데이터의 원래 버전을 삭제합니다.

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

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

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

다음 단계