Google Cloud Managed Lustre は、Cloud Storage からデータをインポートし、データをエクスポートできます。データ転送は増分です。転送先にまだ存在しないファイル、または転送後に変更されたファイルのみがコピーされます。
階層型名前空間が有効になっている Cloud Storage バケットでは、標準バケットと比較して、Managed Lustre との間で高速な転送速度を実現できます。
制限事項
一度に有効にできる転送オペレーションは、インスタンスごとに 1 つだけです。以前の転送オペレーションがまだ実行中に 2 つ目の転送オペレーションを開始しようとすると、次のようなエラーが発生します。
ERROR: (gcloud.lustre.instances.export-data) ABORTED: unable to queue the operation
Cloud Storage の下り(外向き)帯域幅に関する考慮事項
Cloud Storage では、リージョンごとにプロジェクトあたり最大 200 Gbps のデフォルトの下り(外向き)帯域幅が提供されます。ワークロードでより高速なデータ転送速度が必要な場合は、下り(外向き)帯域幅の上限の引き上げをリクエストできます。詳細については、Cloud Storage の帯域幅の割り当てをご覧ください。
必要な権限
移行を開始する権限
転送の開始に使用されるユーザーまたはサービス アカウントには、次の権限が必要です。
lustre.instances.exportDataを使用して、Managed Lustre から Cloud Storage に転送します。lustre.instances.importData。
これらの権限はどちらも、roles/lustre.admin ロールで付与されます。カスタムロールを作成して、権限を個別に付与できます。
Managed Lustre サービス エージェントの権限
Managed Lustre サービス エージェントを取得する
Managed Lustre サービス エージェントは、プロジェクトで Managed Lustre インスタンスを初めて作成するときに作成されます。サービス エージェント ID の形式は service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com です。
Managed Lustre サービス エージェントがまだない場合
services identity createコマンドを実行します。gcloud beta services identity create \ --service=lustre.googleapis.com \ --project=PROJECT_NUMBER_OR_IDPROJECT_NUMBER_OR_ID は、マネージド Lustre インスタンスを作成するプロジェクトのプロジェクト番号または ID に置き換えます。出力は次のようになります。
Service identity created: service-1234567890@gcp-sa-lustre.iam.gserviceaccount.com次の手順で使用するサービス エージェント ID の値をコピーします。
Managed Lustre インスタンスをすでに作成している場合
サービス エージェント ID を作成するには、プロジェクト番号を取得します。PROJECT_NUMBER はプロジェクト ID と同じではありません。
- プロジェクト ID は、文字、数字、ハイフンの組み合わせで構成される一意の文字列です。プロジェクトを作成するときにプロジェクト ID を指定します。例:
example-project-123 - プロジェクト番号は、数字のみで構成される、プロジェクトに対して自動的に生成される一意の識別子です。例:
1234567890
特定のプロジェクト ID の PROJECT_NUMBER を取得するには、
gcloud projects describeコマンドを使用します。gcloud projects describe PROJECT_ID --format="value(projectNumber)"- プロジェクト ID は、文字、数字、ハイフンの組み合わせで構成される一意の文字列です。プロジェクトを作成するときにプロジェクト ID を指定します。例:
返されたプロジェクト番号をサービス エージェント ID にコピーします。
service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com次の手順で使用するサービス エージェント 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 バケットからデータをインポートできます。バケットは、同じプロジェクトに配置することも、別のプロジェクトに配置することもできます。バケットは Managed 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-uriは、gs://<bucket_name>/<optional_path_inside_bucket>/形式を使用して、Cloud Storage バケットの URI またはバケット内のパスを指定します。バケット内のパスを指定する場合は、スラッシュ(/)で終わる必要があります。--lustre-pathには、マネージド Lustre ファイル システムのルート ディレクトリのパスを指定します。/で始まる必要があります。デフォルトは/です。デフォルト以外の値を指定する場合は、ディレクトリがファイル システムにすでに存在している必要があります。
次のパラメータはオプションです。
--request-idを使用すると、このリクエストに一意の ID を割り当てることができます。同じリクエスト ID を使用してこのリクエストを再試行すると、リクエストがすでに完了している場合、サーバーはリクエストを無視します。すべてがゼロではない有効な 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には、値が Managed 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 バケットから Managed Lustre インスタンスにデータをインポートすると、Managed Lustre インスタンスのファイル属性は次のいずれかの方法で設定されます。
- Cloud Storage オブジェクトにデータのエクスポートで説明されているカスタム メタデータがある場合:
- ファイルの UID、GID、モード、
mtimeは、オブジェクトのカスタム メタデータに基づいて設定されます。 - ファイルの
atimeはmtimeと同じ値に設定されます。
- ファイルの UID、GID、モード、
- Cloud Storage オブジェクトにカスタム メタデータがない場合:
- ファイルの UID と GID が 0(
root)に設定されます。 - ファイルのモードは
rwxr-xr-x(755)に設定されます。 - ファイルの
atimeとmtimeは、Cloud Storage オブジェクトの作成時間に設定されます。
- ファイルの UID と GID が 0(
どちらの場合も、次のようになります。
- ファイルの
ctimeは、ファイルがインスタンスに書き込まれた時刻に設定されます。 - ディレクトリの
atime、ctime、mtimeは、インスタンスでディレクトリが作成された時刻に設定されます。
データのエクスポート
Managed Lustre インスタンスから、同じプロジェクトまたは別のプロジェクトの Cloud Storage バケットにデータをエクスポートできます。バケットは Managed 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-uriは、gs://<bucket_name>/<optional_path_inside_bucket>/形式を使用して、Cloud Storage バケットの URI またはバケット内のパスを指定します。バケット内のパスを指定する場合は、スラッシュ(/)で終わる必要があります。--lustre-pathは、Managed Lustre ファイル システムのルート ディレクトリ パスを指定します。/で始まる必要があります。デフォルトは/です。
次のパラメータはオプションです。
--request-idを使用すると、このリクエストに一意の ID を割り当てることができます。同じリクエスト ID を使用してこのリクエストを再試行すると、リクエストがすでに完了している場合、サーバーはリクエストを無視します。すべてがゼロではない有効な 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にはpathキーが含まれており、その値はマネージド Lustre ファイル システムのルート ディレクトリ パスを指定します。/で始まる必要があります。デフォルトは/です。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/"}}'
ファイル属性
Managed Lustre インスタンスから Cloud Storage バケットにデータをエクスポートすると、次のファイル属性が Cloud Storage のカスタム メタデータとして保持されます。
- ファイルの UID は
goog-reserved-posix-uidキーとともに保存されます。 - ファイルの GID は
goog-reserved-posix-gidキーで保存されます。 - ファイルの数値モードは
goog-reserved-posix-modeキーで保存されます。 - ファイルの
mtimeはgoog-reserved-file-mtimeキーで保存されます。
これらのカスタム メタデータ キー名は、POSIX ファイル システムでの転送に Storage Transfer Service で使用されるものと同じです。
次のファイル属性は保持されません。
- シンボリック リンクは保持されません。
- ハードリンクは個別の Cloud Storage オブジェクトとしてエクスポートされるため、複数のコピーが作成されます。
lfs setstripeまたはlfs setdirstripeを使用して明示的に設定された Lustre ストライピングは保持されません。- ファイルの
atimeとctimeは保持されません。 - ディレクトリの
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