Google Cloud Managed Lustre は、 Cloud Storage との間でデータをインポートおよびエクスポートできます。データ転送は増分です。つまり、宛先にまだ存在しないファイル、または転送後に変更されたファイルのみがコピーされます。
階層型名前空間が有効になっている Cloud Storage バケットは、標準バケットと比較して、Managed Lustre との間でより高速な転送速度を実現します。
パフォーマンス
Managed Lustre と Cloud Storage 間の転送速度は、次のようになります。
- 32 MB を超えるファイルの場合、最大 100 GBps。転送速度は、インスタンスの最大スループット(インスタンス容量に パフォーマンス ティアを掛けた値)によって 制限されます。
Cloud Storage の下り(外向き)帯域幅に関する考慮事項
Cloud Storage では、デフォルトの下り(外向き)帯域幅がリージョンごとにプロジェクトあたり最大 200 Gbps です。同じプロジェクトとリージョンに複数の Managed Lustre インスタンスがある場合は、下り(外向き)帯域幅の上限の引き上げをリクエストできます。詳細については、 Cloud Storage の帯域幅の割り当てをご覧ください。
必要な権限
転送を開始する権限
転送の開始に使用するユーザー アカウントまたはサービス アカウントには、次の権限が必要です。
- Managed Lustre から Cloud Storage に転送するには、
lustre.instances.exportData。 - 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 は、Managed 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 は、前のステップで取得した Managed 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は、Cloud Storage バケットの URI、 またはバケット内のパスを、gs://<bucket_name>/<optional_path_inside_bucket>/形式を使用して指定します。バケット内のパスを指定する場合は、スラッシュ(/)で終わる必要があります。--lustre-pathは、Managed 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 は Managed Lustre
インスタンスのゾーンです。例:
us-central1-a - INSTANCE_ID は Managed Lustre インスタンス名です。
gcsPathにはuriキーが含まれます。このキーの値は、 Cloud Storage バケットの URI またはバケット内のパスを、gs://<bucket_name>/<optional_path_inside_bucket>/形式を使用して指定します。バケット内のパスを指定する場合は、スラッシュ(/)で終わる必要があります。lustrePathにはpathキーが含まれます。このキーの値は、Managed Lustre ファイル システムのルート ディレクトリ パスを指定します。/で始まる必要があります。デフォルトは/です。デフォルト以外の値を指定する場合は、ディレクトリがファイル システムにすでに存在している必要があります。
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 は 0(
root)に設定されます。 - ファイルのモードは
rwxr-xr-x(755)に設定されます。 - ファイルの
atimeとmtimeは、Cloud Storage オブジェクトの作成時刻に設定されます。
どちらの場合も:
- ファイルの
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は Managed Lustre インスタンスのゾーンです。例:us-central1-a--gcs-path-uriは、Cloud Storage バケットの URI またはバケット内のパスを 使用して、 形式gs://<bucket_name>/<optional_path_inside_bucket>/を指定します。バケット内のパスを指定する場合は、スラッシュ(/)で終わる必要があります。--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 は Managed Lustre
インスタンスのゾーンです。例:
us-central1-a lustrePathにはpathキーが含まれます。このキーの値は、Managed Lustre ファイル システムのルート ディレクトリ パスを指定します。/で始まる必要があります。デフォルトは/です。gcsPathにはuriキーが含まれます。このキーの値は、 Cloud Storage バケットの URI またはバケット内のパスを、gs://<bucket_name>/<optional_path_inside_bucket>/形式を使用して指定します。バケット内のパスを指定する場合は、スラッシュ(/)で終わる必要があります。
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キーで保存されます。
これらのカスタム メタデータ キー名は、 Storage Transfer Service が POSIX ファイル システムとの転送に使用するキー名と同じです。
次のファイル属性は保持されません。
- シンボリック リンクは保持されません。
- ハードリンクは個別の 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
制限事項
次の制限が適用されます。
一度に有効にできる転送オペレーションは、インスタンスごとに 1 つのみです。最初の転送が完了する前に 2 回目の転送を開始すると、次のエラーが返されます。
ERROR: (gcloud.lustre.instances.export-data) ABORTED: unable to queue the operation