View a markdown version of this page

RDF データのネイティブエクスポート - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

RDF データのネイティブエクスポート

Neptune エクスポート API を使用すると、Neptune データベースから Amazon S3 にデータをエクスポートできます。RDF データは N-Triples 形式または N-Quads 形式でエクスポートできます。

ネイティブエクスポートの仕組み

ネイティブエクスポートは Neptune クラスターのライターインスタンスで実行され、マルチパートアップロードを使用してエクスポートされたデータを Amazon S3 に書き込みます。エクスポートはライターインスタンスのコンピューティングリソースを使用するため、本番環境のワークロードに影響を与えないように、クローンされたクラスターに対してエクスポートを実行することを強くお勧めします。詳細については、「推奨事項」を参照してください。

エクスポートスループット

エクスポートスループットは、 までのインスタンスサイズに合わせてほぼ直線的にスケーリングされますr7i.16xlarge。保守的な計画の見積もりとして、vCPU あたり 1 秒あたり約 50,000 個のステートメントを想定します。

エクスポート期間を見積もるには、次の式を使用します。

export_seconds = total_statements / (vCPUs × 50,000)

実際のスループットは、述語基数、ステートメントの複雑さ、クラスターサイズなどのデータセットの特性によって異なります。

前提条件

エクスポート API を使用する前に、以下を行う必要があります。

推奨事項

本番環境のパフォーマンスへの影響を避けるため、読み取り/書き込みワークロードなしでクローンされたクラスターでエクスポートオペレーションを実行することを強くお勧めします。

最適なprice-to-performanceの比率を得るには、エクスポートオペレーションに 16xlarge インスタンスを使用することをお勧めします。このインスタンスタイプは以下を提供します。

  • パフォーマンスを低下させることなく大規模なデータセットを処理するのに十分なメモリ

  • 同時エクスポート処理に最適な CPU リソース

  • ワークロードのエクスポートに最適なコスト効率

IAM アクセス許可

エクスポート機能には、2 つの個別の IAM ロールが含まれます。

  • 発信者の IAM ロール – エクスポート API エンドポイントにリクエストを送信する IAM プリンシパル (ユーザーまたはロール)。このロールには Neptune データアクセス許可が必要です。

  • S3 アクセス IAM ロール – エクスポートされたデータを Amazon S3 に書き込むために Neptune が引き受けるロール。このロールの ARN をエクスポートリクエストの iamRoleArnパラメータに渡すと、Neptune クラスターに関連付ける必要があります。

発信者のアクセス許可 (Neptune データアクセスアクション)

エクスポート API を呼び出す IAM プリンシパルには、IAM ポリシーに次の Neptune データアクセスアクションが必要です。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowNeptuneExportActions", "Effect": "Allow", "Action": [ "neptune-db:StartExportJob", "neptune-db:GetExportJobStatus", "neptune-db:ListExportJobs", "neptune-db:CancelExportJob" ], "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-resource-id/*" } ] }

詳細については、「IAM データアクセスポリシーステートメントの使用」を参照してください。

S3 アクセスロールのアクセス許可

iamRoleArn リクエストパラメータに渡される IAM ロールは、Neptune クラスターに関連付けられ、ターゲット S3 バケットに書き込むアクセス許可を Neptune に付与する必要があります。IAM ロールを作成してクラスターに関連付ける手順については、「Create an IAM role to allow Neptune to access Amazon S3」を参照してください。

注記

エクスポート API には、読み取りアクセスのみを必要とするバルクローダーとは異なり、S3 への書き込みアクセス許可が必要です。そのページで説明されているAmazonS3ReadOnlyAccess管理ポリシーの代わりに、次のアクセス許可ポリシーを使用します。

次のアクセス許可ポリシーを S3 アクセスロールにアタッチします。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowS3WriteForNeptuneExport", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:PutObject", "s3:AbortMultipartUpload", "s3:GetBucketPublicAccessBlock" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }

オプションの KMS アクセス許可

エクスポートリクエストkmsKeyIdentifierで を指定する場合は、S3 アクセスロールに次のアクセス許可を追加します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowKMSForNeptuneExport", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-east-1:123456789012:key/key-id" } ] }

エンドポイントのエクスポート

データをエクスポートするには、https://your-neptune-endpoint:port/exportエンドポイントに HTTP リクエストを送信します。

エクスポートリクエスト構文

POST https://your-neptune-endpoint:port/export

リクエストヘッダー

  • Content-Type: application/json

リクエストボディ

{ "destination": "string", "format": "string", "iamRoleArn": "string", "region": "string", "compression": "string", "kmsKeyIdentifier": "string", "exportFilter": { "namedGraphUris": ["string"] } }

リクエストパラメータ

destination (文字列)

必須。エクスポートされたデータを保存する S3 URI。s3://bucket-name/optional-prefix/ の形式である必要があります。

形式 (文字列)

必須。エクスポートされたデータの形式。有効な値:

  • ntriples – N-Triples 形式でデータをエクスポートする

  • nquads – N-Quads 形式でデータをエクスポートする

iamRoleArn (文字列)

必須。Neptune が S3 バケットにアクセスするために引き受ける IAM ロールの Amazon リソースネーム (ARN)。

region (文字列)

必須。S3 バケット AWS リージョン の 。Neptune クラスターと同じリージョンである必要があります。

圧縮 (文字列)

オプション。エクスポートされたファイルの圧縮形式。有効な値:

  • gz - ファイルを .gz 形式で圧縮する

kmsKeyIdentifier (文字列)

オプション。エクスポートされたデータの暗号化に使用する AWS KMS キーの ARN。

exportFilter (オブジェクト)

オプション。RDF データのサブセットを選択的にエクスポートするためのフィルタ。エンジンバージョン 1.4.8.0 以降で使用できます。

namedGraphUris (文字列の配列)

エクスポートする名前付きグラフ URIs (最大 100)。指定されたグラフのデータのみがエクスポートされます。指定されたグラフが空の場合、エクスポートは空の結果で成功します。無効な URIs で失敗しますInvalidParameterException

レスポンスの構文

{ "status": "string", "payload": { "exportId": "string" } }
status (文字列)

リクエストの HTTP ステータス。

exportId (文字列)

エクスポートタスクの一意の識別子。

エクスポートステータスエンドポイント

エクスポートタスクのステータスを確認するには、エクスポート ID を使用して HTTP GET リクエストをエクスポートエンドポイントに送信します。

GET https://your-neptune-endpoint:port/export?exportId=export-id

リクエストパラメータ

exportId (文字列)

必須。エクスポートタスクの一意の識別子。

レスポンスの構文

{ "status": "string", "payload": { "exportId": "string", "destination": "string", "status": "string", "statusReason": "string", "format": "string", "iamRoleArn": "string", "kmsKeyIdentifier": "string", "exportFilter": { "namedGraphUris": ["string"] }, "exportTaskDetails": { "timeElapsedSeconds": number, "startTime": number, "numRecordsWritten": number, "progressPercentage": number } } }
exportId (文字列)

エクスポートタスクの一意の識別子。

destination (文字列)

データがエクスポートされる S3 URI。

status (文字列)

エクスポートタスクの現在のステータス。有効な値:

  • EXPORT_NOT_STARTED – エクスポートはキューに入れられていますが、開始されていません

  • EXPORT_IN_PROGRESS — エクスポートは現在実行中です

  • EXPORT_COMPLETED – エクスポートが正常に完了しました

  • EXPORT_CANCELLING – エクスポートはキャンセルされています

  • EXPORT_CANCELLED_BY_USER – エクスポートはユーザーによってキャンセルされました

  • EXPORT_S3_ERROR – S3 アクセスエラーのためエクスポートに失敗しました

  • EXPORT_FAILED – 他のエラーによりエクスポートに失敗しました

statusReason (文字列)

エクスポートステータスに関する追加情報。

形式 (文字列)

エクスポートするデータの形式。

iamRoleArn (文字列)

S3 アクセスに使用される IAM ロールの ARN。

kmsKeyIdentifier (文字列)

指定した場合、暗号化に使用される KMS キーの ARN。

exportFilter (オブジェクト)

リクエストで指定された場合に適用されたエクスポートフィルター。

  • namedGraphUris (文字列の配列) – エクスポートのフィルタリングに使用される名前付きグラフ URIs。

exportTaskDetails (オブジェクト)

エクスポートタスクの進行状況の詳細:

  • timeElapsedSeconds (数値) – エクスポート開始からの経過時間

  • startTime (数値) – エクスポート開始時のエポック時間

  • numRecordsWritten (数値) – S3 に書き込まれたレコードの数

  • progressPercentage (数値) – 完了したエクスポートの割合

エクスポートエンドポイントを一覧表示する

すべてのエクスポートタスクを一覧表示するには、HTTP GET リクエストをエクスポートエンドポイントに送信します。

GET https://your-neptune-endpoint:port/export

レスポンスの構文

{ "status": "string", "payload": [ "string" ] }
ペイロード (配列)

すべてのエクスポートタスクIDs の配列。

エクスポートエンドポイントをキャンセルする

エクスポートタスクをキャンセルするには、エクスポート ID を使用してエクスポートエンドポイントに HTTP DELETE リクエストを送信します。

DELETE https://your-neptune-endpoint:port/export?exportId=export-id

リクエストパラメータ

exportId (文字列)

必須。キャンセルするエクスポートタスクの一意の識別子。

レスポンスの構文

{ "status": "string", "payload": { "message": "string" } }

出力形式をエクスポートする

S3 ディレクトリ構造

エクスポートされたデータは、次のように S3 バケットに整理されます。

s3://your-bucket/export-id/ ├── data/ │ ├── part-00000.nt │ ├── part-00001.nt │ └── ... └── export_status.json
データ/ディレクトリ

指定された形式でエクスポートされたグラフデータファイルが含まれます。

export_status.json ファイル

エクスポートオペレーションに関するメタデータが含まれます。

エラーレスポンス

一般的なエラーコード

BadRequestException

リクエストに無効なパラメータが含まれているか、エクスポートがすでに進行中です。

AccessDeniedException

IAM ロールには、S3 または KMS アクセスに必要なアクセス許可がありません。

エラーレスポンスの例

{ "code": "BadRequestException", "requestId": "request-id", "message": "Export already in progress with ID 'existing-id'. Please wait or cancel it first.", "detailedMessage": "Detailed error description" }

エクスポートを開始する

curl -X POST https://your-cluster-endpoint:8182/export \ -H "Content-Type: application/json" \ -d '{ "destination": "s3://my-bucket/exports/", "format": "ntriples", "iamRoleArn": "arn:aws:iam::123456789012:role/neptune-export-role", "region": "us-west-2" }'

フィルタリングされたエクスポートを開始する (名前付きグラフ)

curl -X POST https://your-cluster-endpoint:8182/export \ -H "Content-Type: application/json" \ -d '{ "destination": "s3://my-bucket/exports/", "format": "nquads", "iamRoleArn": "arn:aws:iam::123456789012:role/neptune-export-role", "region": "us-west-2", "exportFilter": { "namedGraphUris": [ "http://example.com/graph1", "http://example.com/graph2" ] } }'

エクスポートステータスを確認する

curl -X GET "https://your-cluster-endpoint:8182/export?exportId=<id>"

エクスポートをキャンセルする

curl -X DELETE "https://your-cluster-endpoint:8182/export?exportId=<id>"

制限事項

ネイティブエクスポートには以下の制限があります。

  • インスタンスのサポート – ネイティブエクスポートは、Neptune Serverless インスタンスまたはリードレプリカではサポートされていません。エクスポートは常に、プロビジョニングされたクラスターのライターインスタンスで実行されます。

  • クラスターごとに 1 つのエクスポート – クラスターで一度にアクティブにできるエクスポートは 1 つだけです。別のエクスポートの進行中に新しいエクスポートリクエストを送信すると、リクエストは失敗します。

  • 自動再開なし – エクスポート中にエンジンが再起動した場合、エクスポートは失敗し、最初から再起動する必要があります。エクスポートの進行状況は、エンジンの再起動後も保持されません。

  • エンジンイベント後のステータスの可用性 – エンジンがクラッシュした場合、ステータス API を使用してエクスポートステータスを取得することはできません。

  • 書き込み中の整合性 – クラスターがエクスポート中に書き込みトラフィックを処理している場合、エクスポートされたデータはグラフの一部または整合性のないビューを反映している可能性があります。一貫したエクスポートを保証するには、クローンされたクラスターに対してエクスポートを実行します。