Cloud Storage との間でデータを転送する

Parallelstore は、Cloud Storage からデータをインポートし、Cloud Storage にデータをエクスポートできます。データ転送を使用すると、データを Parallelstore インスタンスにすばやく読み込み、Cloud Storage を Parallelstore インスタンスの耐久性のあるバックアップ レイヤとして使用できます。

データのインポートとエクスポートは増分です。宛先にまだ存在しないファイル、または転送後に変更されたファイルのみがコピーされます。

想定される転送速度については、パフォーマンスをご覧ください。

必要な権限

転送の開始に使用されるユーザーまたはサービス アカウントには、次の権限が必要です。

  • parallelstore.instances.exportData。Parallelstore から Cloud Storage に転送するために使用します。
  • parallelstore.instances.importData を使用して Cloud Storage に転送します。

これらの権限はどちらも、roles/parallelstore.admin ロールで付与されます。カスタムロールを作成して、権限を個別に付与できます。

また、Parallelstore サービス アカウントには次の権限が必要です。

  • Cloud Storage バケットに対する roles/storage.admin

この権限を付与するには、次の gcloud コマンドを実行します。

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
  --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-parallelstore.iam.gserviceaccount.com \
  --role=roles/storage.admin

PROJECT_NUMBERプロジェクト ID とは異なります。

  • プロジェクト ID は、文字、数字、ハイフンの組み合わせで構成される一意の文字列です。プロジェクトを作成するときにプロジェクト ID を指定します。例: example-project-123
  • プロジェクト番号は、数字のみで構成される、プロジェクトに対して自動的に生成される一意の識別子です。例: 1234567890

特定のプロジェクト ID の PROJECT_NUMBER を取得するには、gcloud projects describe コマンドを使用します。

gcloud projects describe PROJECT_ID --format="value(projectNumber)"

Parallelstore にデータをインポートする

Cloud Storage バケットからデータをインポートできます。バケットは、同じプロジェクトに配置することも、別のプロジェクトに配置することもできます。バケットは Parallelstore インスタンスとは異なるゾーンまたはリージョンに存在できますが、リージョン間の転送はリージョン内の転送よりも遅くなる可能性があります。

gcloud

gcloud beta parallelstore instances import-data INSTANCE_ID \
  --location=LOCATION \
  --source-gcs-bucket-uri=gs://BUCKET_NAME \
  --destination-parallelstore-path=PS_PATH

ここで

  • INSTANCE_ID は、Parallelstore インスタンス名です。
  • --location は、サポートされているゾーンである必要があります。
  • --source-gcs-bucket-uri は、gs://<bucket_name>/<optional_path_inside_bucket> 形式を使用して、Cloud Storage バケットの URI またはバケット内のパスを指定します。
  • --destination-parallelstore-path には、Parallelstore ファイル システムのルート ディレクトリ パスを指定します。/ で始まる必要があります。デフォルトは / です。

次のパラメータはオプションです。

  • --request-id を使用すると、このリクエストに一意の ID を割り当てることができます。同じリクエスト ID を使用してこのリクエストを再試行すると、リクエストがすでに完了している場合、サーバーはリクエストを無視します。すべてがゼロではない有効な UUID である必要があります。(例: --request-id=c288b55f-f2f0-45fe-a8ce-8afe43876d6d)。
  • --async は、オペレーションの完了を待たずに、すぐにレスポンスを返します。

REST

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

{
  "source_gcs_bucket" : {
    "uri" : "gs://BUCKET_NAME/"
  },
  "destination_parallelstore" : {
    "path" : "/PATH"
  }
}

ここで

  • PROJECT_ID は Google Cloud プロジェクト ID です。
  • LOCATION は、インスタンスが存在するサポートされているゾーンである必要があります。
  • INSTANCE_ID は、Parallelstore インスタンス名です。
  • source-gcs-bucket には、値が gs://<bucket_name>/<optional_path_inside_bucket> 形式で Cloud Storage バケットの URI またはバケット内のパスを指定する uri キーが含まれます。
  • destination-parallelstore には、値が Parallelstore ファイル システムのルート ディレクトリ パスを指定する 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://parallelstore.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:importData \
  -d '{"source_gcs_bucket": {"uri":"gs://BUCKET_NAME/"}, "destination_parallelstore": {"path":"/"}}'

データのエクスポート

Parallelstore インスタンスから、同じプロジェクトまたは別のプロジェクトの Cloud Storage バケットにデータをエクスポートできます。バケットは Parallelstore インスタンスとは異なるゾーンまたはリージョンに配置できますが、リージョン間の転送はリージョン内の転送よりも遅くなる可能性があります。

gcloud

gcloud beta parallelstore instances export-data \
  INSTANCE_ID \
  --location=LOCATION \
  --destination-gcs-bucket-uri="gs://BUCKET_NAME" \
  --source-parallelstore-path="/"

ここで

  • INSTANCE_ID は、Parallelstore インスタンス名です。
  • --location は、サポートされているゾーンである必要があります。
  • --destination-gcs-bucket-uri は、gs://<bucket_name>/<optional_path_inside_bucket> 形式を使用して、Cloud Storage バケットの URI またはバケット内のパスを指定します。
  • --source-parallelstore-path には、Parallelstore ファイル システムのルート ディレクトリ パスを指定します。/ で始まる必要があります。デフォルトは / です。

次のパラメータはオプションです。

  • --request-id を使用すると、このリクエストに一意の ID を割り当てることができます。同じリクエスト ID を使用してこのリクエストを再試行すると、リクエストがすでに完了している場合、サーバーはリクエストを無視します。すべてがゼロではない有効な UUID である必要があります。(例: --request-id=c288b55f-f2f0-45fe-a8ce-8afe43876d6d)。
  • --async は、オペレーションの完了を待たずに、すぐにレスポンスを返します。

REST

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

{
  "source_parallelstore" : {
    "path" : "/"
  },
  "destination_gcs_bucket" : {
    "uri" : "gs://BUCKET_NAME/"
  }
}

ここで

  • PROJECT_ID は Google Cloud プロジェクト ID です。
  • INSTANCE_ID は、Parallelstore インスタンス名です。
  • LOCATION は、Parallelstore インスタンスが存在するサポートされているゾーンである必要があります。
  • --source-parallelstore には、値が Parallelstore ファイル システムのルート ディレクトリ パスを指定する path キーが含まれています。/ で始まる必要があります。デフォルトは / です。
  • --destination-gcs-bucket には、値が 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://parallelstore.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:exportData \
  -d '{"source_parallelstore": {"path":"/"}, "destination_gcs_bucket": {"uri":"gs://BUCKET_NAME/"}}'

オペレーションの取得

インポートまたはエクスポート オペレーションのステータスを確認するには、オペレーション ID が必要です。この ID は、インポートまたはエクスポートのリクエストを行うとサービスから返され、次の形式で使用されます。

  • operation-1234567890123-6127783ad26ea-88913969-02748053

gcloud

gcloud beta parallelstore operations describe OPERATION_ID \
  --location=LOCATION

REST

GET https://parallelstore.googleapis.com/v1beta/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://parallelstore.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID

オペレーションのキャンセル

インポート オペレーションまたはエクスポート オペレーションをキャンセルするには、オペレーション ID が必要です。この ID は、インポートまたはエクスポートのリクエストを行うとサービスから返され、次の形式で使用されます。

  • operation-1234567890123-6127783ad26ea-88913969-02748053

gcloud

gcloud beta parallelstore operations cancel OPERATION_ID \
  --location=LOCATION

REST

POST https://parallelstore.googleapis.com/v1beta/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://parallelstore.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID:cancel