Cloud Storage 간에 데이터 전송

Google Cloud Managed Lustre는 Cloud Storage에서 데이터를 가져오고 Cloud Storage로 데이터를 내보낼 수 있습니다. 데이터 전송은 증분 방식입니다. 대상에 아직 없거나 전송된 이후 변경된 파일만 복사합니다.

계층적 네임스페이스가 사용 설정된 Cloud Storage 버킷은 표준 버킷에 비해 Managed Lustre와의 전송 속도가 더 빠릅니다.

제한사항

인스턴스당 하나의 전송 작업만 한 번에 활성화할 수 있습니다. 이전 전송이 아직 실행 중인 상태에서 두 번째 전송 작업을 시작하려고 하면 다음과 같은 오류가 발생합니다.

ERROR: (gcloud.lustre.instances.export-data) ABORTED: unable to queue the operation

Cloud Storage 이그레스 대역폭 고려사항

Cloud Storage는 리전별 프로젝트당 최대 200Gbps의 기본 이그레스 대역폭을 제공합니다. 워크로드에 더 빠른 데이터 전송 속도가 필요한 경우 이그레스 대역폭 한도 상향을 요청할 수 있습니다. 자세한 내용은 Cloud Storage 대역폭 할당량을 참고하세요.

필수 권한

이전을 시작할 수 있는 권한

전송을 시작하는 데 사용되는 사용자 또는 서비스 계정에는 다음 권한이 필요합니다.

  • lustre.instances.exportData를 사용하여 관리 Lustre에서 Cloud Storage로 전송합니다.
  • Cloud Storage에서 전송하려면 lustre.instances.importData를 사용하세요.

이러한 권한은 모두 roles/lustre.admin 역할에 부여됩니다. 커스텀 역할을 만들어 권한을 독립적으로 부여할 수 있습니다.

관리형 Lustre 서비스 에이전트 권한

Managed Lustre 서비스 에이전트 가져오기

Managed Lustre 서비스 에이전트는 프로젝트에서 Managed Lustre 인스턴스를 처음 만들 때 생성됩니다. 서비스 에이전트 ID는 service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com 형식입니다.

Managed Lustre 서비스 에이전트가 아직 없는 경우
  1. services identity create 명령어를 실행합니다.

    gcloud beta services identity create \
      --service=lustre.googleapis.com \
      --project=PROJECT_NUMBER_OR_ID
    

    PROJECT_NUMBER_OR_ID를 관리형 Lustre 인스턴스를 만들려는 프로젝트의 번호 또는 ID로 바꿉니다. 출력은 다음과 비슷합니다.

    Service identity created: service-1234567890@gcp-sa-lustre.iam.gserviceaccount.com
    
  2. 다음 단계에서 사용할 서비스 에이전트 ID의 값을 복사합니다.

이미 Managed Lustre 인스턴스를 만든 경우
  1. 서비스 에이전트 ID를 구성하려면 프로젝트 번호를 가져옵니다. PROJECT_NUMBER프로젝트 ID와 다릅니다.

    • 프로젝트 ID는 문자, 숫자, 하이픈의 조합으로 구성될 수 있는 고유한 문자열입니다. 프로젝트를 만들 때 프로젝트 ID를 지정합니다. 예를 들면 example-project-123입니다.
    • 프로젝트 번호는 숫자로만 구성된 프로젝트의 자동 생성 고유 식별자입니다. 예를 들면 1234567890입니다.

    특정 프로젝트 ID의 PROJECT_NUMBER를 가져오려면 gcloud projects describe 명령어를 사용합니다.

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  2. 반환된 프로젝트 번호를 서비스 에이전트 ID에 복사합니다.

    service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com
    
  3. 다음 단계에서 사용할 서비스 에이전트 ID를 복사합니다.

권한 부여

Managed Lustre 서비스 에이전트에는 다음 Cloud Storage 역할 중 하나가 필요합니다.

  • Cloud Storage 간에 데이터를 전송하려면 Cloud Storage 버킷에 대한 roles/storage.objectUser 권한이 있어야 합니다.
  • Cloud Storage에서만 전송하려면 Cloud Storage 버킷에 roles/storage.objectViewer이 있어야 합니다.

이러한 역할 중 하나를 부여하려면 다음 gcloud 명령어를 실행합니다.

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
  --member=serviceAccount:SERVICE_AGENT_IDENTITY \
  --role=roles/storage.objectViewer_OR_objectUser

SERVICE_AGENT_IDENTITY은 이전 단계의 관리형 Lustre 서비스 에이전트 ID입니다.

Managed Lustre로 데이터 가져오기

Cloud Storage 버킷에서 데이터를 가져올 수 있습니다. 버킷은 동일한 프로젝트에 있거나 다른 프로젝트에 있을 수 있습니다. 버킷은 관리형 Lustre 인스턴스와 다른 영역이나 리전에 있을 수 있지만 리전 간 전송은
리전 내 전송보다 느릴 수 있습니다.

gcloud

gcloud lustre instances import-data INSTANCE_ID \
  --location=LOCATION \
  --gcs-path-uri=gs://BUCKET_NAME/ \
  --lustre-path=PS_PATH

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

  • INSTANCE_ID은 Managed Lustre 인스턴스 이름입니다.
  • --location은 Managed Lustre 인스턴스의 영역입니다. 예를 들면 us-central1-a입니다.
  • --gcs-path-urigs://<bucket_name>/<optional_path_inside_bucket>/ 형식을 사용하여 Cloud Storage 버킷의 URI 또는 버킷 내 경로를 지정합니다. 버킷 내부의 경로가 지정된 경우 슬래시 (/)로 끝나야 합니다.
  • --lustre-path는 관리형 Lustre 파일 시스템의 루트 디렉터리 경로를 지정합니다. /로 시작해야 합니다. 기본값은 /입니다. 기본값이 아닌 값을 지정하는 경우 디렉터리가 파일 시스템에 이미 있어야 합니다.

다음 매개변수는 선택사항입니다.

  • --request-id를 사용하면 이 요청에 고유 ID를 할당할 수 있습니다. 동일한 요청 ID를 사용하여 이 요청을 다시 시도하면 이미 완료된 경우 서버가 해당 요청을 무시합니다. 모두 0이 아닌 유효한 UUID여야 합니다.
  • --async는 작업이 완료되기를 기다리지 않고 즉시 응답을 반환합니다.

자세한 내용은 Cloud SDK 문서를 참고하세요.

REST

POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:importData
Authorization: Bearer [YOUR_ACCESS_TOKEN]

{
  "gcsPath" : {
    "uri" : "gs://BUCKET_NAME/"
  },
  "lustrePath" : {
    "path" : "/PATH"
  }
}

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

  • PROJECT_ID은 Google Cloud 프로젝트 이름입니다.
  • LOCATION은 관리형 Lustre 인스턴스의 영역입니다. 예를 들면 us-central1-a입니다.
  • INSTANCE_ID은 Managed Lustre 인스턴스 이름입니다.
  • gcsPath에는 값이 gs://<bucket_name>/<optional_path_inside_bucket>/ 형식을 사용하여 Cloud Storage 버킷의 URI 또는 버킷 내 경로를 지정하는 uri 키가 포함됩니다. 버킷 내부의 경로가 지정된 경우 슬래시 (/)로 끝나야 합니다.
  • lustrePath에는 값이 관리 Lustre 파일 시스템의 루트 디렉터리 경로를 지정하는 path 키가 포함되어 있습니다. /로 시작해야 합니다. 기본값은 /입니다. 기본값 이외의 값을 지정하는 경우 디렉터리가 파일 시스템에 이미 있어야 합니다.

Google 관리 서비스 에이전트 대신 자체 서비스 계정을 사용하려면 요청에서 JSON 객체의 serviceAccount 필드를 지원해야 합니다.

"serviceAccount" : "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID"

curl 명령어 예시는 다음과 같습니다.

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:importData \
  -d '{"gcsPath": {"uri":"gs://BUCKET_NAME/"}, "lustrePath": {"path":"/"}}'

파일 속성

Cloud Storage 버킷에서 관리형 Lustre 인스턴스로 데이터를 가져올 때 관리형 Lustre 인스턴스의 파일 속성은 다음 두 가지 방법 중 하나로 설정됩니다.

  • Cloud Storage 객체에 데이터 내보내기에 설명된 대로 맞춤 메타데이터가 있는 경우 다음이 적용됩니다.
    • 파일의 UID, GID, 모드, mtime는 객체의 맞춤 메타데이터를 기반으로 설정됩니다.
    • 파일의 atimemtime과 동일한 값으로 설정됩니다.
  • Cloud Storage 객체에 맞춤 메타데이터가 없는 경우 다음이 적용됩니다.
    • 파일의 UID와 GID가 0 (root)으로 설정됩니다.
    • 파일의 모드가 rwxr-xr-x (755)로 설정됩니다.
    • 파일의 atimemtime은 Cloud Storage 객체의 생성 시간으로 설정됩니다.

어떤 경우든 다음을 충족해야 합니다.

  • 파일의 ctime은 파일이 인스턴스에 기록된 시간으로 설정됩니다.
  • 디렉터리의 atime, ctime, mtime은 인스턴스에서 디렉터리가 생성된 시간으로 설정됩니다.

데이터 내보내기

관리형 Lustre 인스턴스에서 동일한 프로젝트 또는 다른 프로젝트의 Cloud Storage 버킷으로 데이터를 내보낼 수 있습니다. 버킷은 관리형 Lustre 인스턴스와 다른 영역 또는 리전에 있을 수 있지만 리전 간 전송은 리전 내 전송보다 느릴 수 있습니다.

gcloud

gcloud lustre instances export-data \
  INSTANCE_ID \
  --location=LOCATION \
  --gcs-path-uri="gs://BUCKET_NAME/" \
  --lustre-path="/"

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

  • INSTANCE_ID은 Managed Lustre 인스턴스 이름입니다.
  • --location은 관리형 Lustre 인스턴스의 영역입니다. 예를 들면 us-central1-a입니다.
  • --gcs-path-urigs://<bucket_name>/<optional_path_inside_bucket>/ 형식을 사용하여 Cloud Storage 버킷의 URI 또는 버킷 내 경로를 지정합니다. 버킷 내부의 경로가 지정된 경우 슬래시 (/)로 끝나야 합니다.
  • --lustre-path는 관리형 Lustre 파일 시스템의 루트 디렉터리 경로를 지정합니다. /로 시작해야 합니다. 기본값은 /입니다.

다음 매개변수는 선택사항입니다.

  • --request-id를 사용하면 이 요청에 고유 ID를 할당할 수 있습니다. 동일한 요청 ID를 사용하여 이 요청을 다시 시도하면 이미 완료된 경우 서버가 해당 요청을 무시합니다. 모두 0이 아닌 유효한 UUID여야 합니다.
  • --async는 작업이 완료되기를 기다리지 않고 즉시 응답을 반환합니다.

REST

POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:exportData
Authorization: Bearer [YOUR_ACCESS_TOKEN]

{
  "lustrePath" : {
    "path" : "/"
  },
  "gcsPath" : {
    "uri" : "gs://BUCKET_NAME/"
  }
}

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

  • PROJECT_ID은 Google Cloud 프로젝트 이름입니다.
  • INSTANCE_ID은 Managed Lustre 인스턴스 이름입니다.
  • LOCATION은 관리형 Lustre 인스턴스의 영역입니다. 예를 들면 us-central1-a입니다.
  • lustrePath에는 값이 관리 Lustre 파일 시스템의 루트 디렉터리 경로를 지정하는 path 키가 포함되어 있습니다. /로 시작해야 합니다. 기본값은 /입니다.
  • gcsPath에는 값이 gs://<bucket_name>/<optional_path_inside_bucket>/ 형식을 사용하여 Cloud Storage 버킷의 URI 또는 버킷 내 경로를 지정하는 uri 키가 포함됩니다. 버킷 내부의 경로가 지정된 경우 슬래시 (/)로 끝나야 합니다.

Google 관리 서비스 에이전트 대신 자체 서비스 계정을 사용하려면 요청에서 JSON 객체의 serviceAccount 필드를 지원해야 합니다.

"serviceAccount" : "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID"

curl 명령어 예시는 다음과 같습니다.

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json"
  https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:exportData \
  -d '{"lustrePath": {"path":"/"}, "gcsPath": {"uri":"gs://BUCKET_NAME/"}}'

파일 속성

관리형 Lustre 인스턴스에서 Cloud Storage 버킷으로 데이터를 내보낼 때 다음 파일 속성은 Cloud Storage에서 맞춤 메타데이터로 유지됩니다.

  • 파일의 UID는 goog-reserved-posix-uid 키와 함께 저장됩니다.
  • 파일의 GID는 goog-reserved-posix-gid 키와 함께 저장됩니다.
  • 파일의 숫자 모드는 goog-reserved-posix-mode 키와 함께 저장됩니다.
  • 파일의 mtimegoog-reserved-file-mtime 키로 저장됩니다.

이러한 맞춤 메타데이터 키 이름은 POSIX 파일 시스템을 사용한 전송에 Storage Transfer Service에서 사용하는 이름과 동일합니다.

다음 파일 속성은 보존되지 않습니다.

  • 심볼릭 링크는 보존되지 않습니다.
  • 하드 링크는 별도의 Cloud Storage 객체로 내보내지므로 여러 사본이 생성됩니다.
  • lfs setstripe 또는 lfs setdirstripe를 사용하여 명시적으로 설정된 광택 스트라이핑은 유지되지 않습니다.
  • 파일의 atimectime이 보존되지 않습니다.
  • 디렉터리의 mtime은 보존되지 않습니다.
  • 빈 디렉터리는 보존되지 않습니다.

작업 가져오기

가져오기 또는 내보내기 작업의 상태를 확인하려면 작업 ID가 필요합니다. 이 ID는 가져오기 또는 내보내기 요청을 할 때 서비스에서 반환되며 다음 형식을 사용합니다.

  • operation-1234567890123-6127783ad26ea-88913969-02748053

gcloud

gcloud lustre operations describe OPERATION_ID \
  --location=LOCATION

REST

GET https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
Authorization: Bearer [YOUR_ACCESS_TOKEN]

curl 명령어 예시는 다음과 같습니다.

curl -X GET \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID

작업 취소

가져오기 또는 내보내기 작업을 취소하려면 작업 ID가 필요합니다. 이 ID는 가져오기 또는 내보내기 요청을 할 때 서비스에서 반환되며 다음 형식을 사용합니다.

  • operation-1234567890123-6127783ad26ea-88913969-02748053

gcloud

gcloud lustre operations cancel OPERATION_ID \
  --location=LOCATION

REST

POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID:cancel
Authorization: Bearer [YOUR_ACCESS_TOKEN]

curl 명령어 예시는 다음과 같습니다.

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID:cancel