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

Parallelstore は、Cloud Storage との間でデータをインポートおよびエクスポートできます。データ転送を使用すると、Parallelstore インスタンスにデータをすばやく読み込み、Parallelstore インスタンスの耐久性の高いバッキング レイヤとして Cloud Storage を使用できます。

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

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

必要な権限

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

  • 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 には、uri キーが含まれます。このキーの値は、gs://<bucket_name>/<optional_path_inside_bucket> 形式を使用して、Cloud Storage バケットの 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 には、uri キーが含まれます。このキーの値は、gs://<bucket_name>/<optional_path_inside_bucket> 形式を使用して、Cloud Storage バケットの 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