

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

# Gremlin クエリ結果を Amazon S3 にエクスポートする
<a name="exporting-gremlin"></a>

 エンジンリリース 1.4.3.0 から、Amazon Neptune は Gremlin クエリ結果の Amazon S3 への直接エクスポートをサポートしています。この機能を使用すると、大規模なクエリ結果をクエリレスポンスとして返す代わりに Amazon S3 バケットにエクスポートすることで効率的に処理できます。

 クエリ結果を Amazon S3 にエクスポートするには、サービス名 `neptune.query.exportToS3` の `call()` ステップを Gremlin クエリの最後のステップとして使用します。[Bytecode を使用する Tinkerpop ドライバー](https://tinkerpop.apache.org/docs/current/reference/#terminal-steps)のターミナルステップは、`call()` ステップの後に追加できます。エクスポートパラメータは文字列値にする必要があります。

**注記**  
 `call()` ステップに `neptune.query.exportToS3` があるクエリは、最後のステップとして使用されない場合、失敗します。バイトコードを使用する Gremlin クライアントは、ターミナルステップを使用できます。詳細については、Amazon Neptune ドキュメントで [Gremlin のベストプラクティス](https://docs.aws.amazon.com//neptune/latest/userguide/best-practices-gremlin-java-bytecode.html)について確認してください。

```
g.V()
  ...
  .call('neptune.query.exportToS3', [
    'destination': '{{s3://your-bucket/path/result.json}}',
    'format': 'GraphSONv3',
    'kmskeyArn': '{{optional-kms-key-arn}}'
  ])
```

**パラメータ**
+  `destination`: 必須 - 結果が書き込まれる Amazon S3 URI。
+  `format`: 必須 - 出力形式。現在、'[GraphSONv3](https://tinkerpop.apache.org/docs/3.7.3/dev/io/#graphson-3d0)' のみをサポートしています。
+  `keyArn`: オプション - Amazon S3 [サーバー側の暗号化](https://docs.aws.amazon.com//AmazonS3/latest/userguide/serv-side-encryption.html)用のAWS KMSキーの ARN。

## 例
<a name="exporting-gremlin-examples"></a>

 **クエリの例** 

```
g.V().
    hasLabel('Comment').
    valueMap().
    call('neptune.query.exportToS3', [
    'destination': '{{s3://your-bucket/path/result.json}}',
    'format': 'GraphSONv3',
    'keyArn': '{{optional-kms-key-arn}}'
  ])
```

 **クエリレスポンスの例** 

```
{
    "destination":"{{s3://your-bucket/path/result.json}},
    "exportedResults": 100,
    "exportedBytes": 102400
}
```

## 前提条件
<a name="exporting-gremlin-prerequisites"></a>
+  Neptune DB インスタンスは、ゲートウェイタイプの VPC エンドポイントを介して Amazon S3 にアクセスできる必要があります。
+  クエリでカスタムAWS KMS暗号化を使用するには、Neptune が と通信できるようにするには、 のインターフェイスタイプの VPC エンドポイントAWS KMSが必要ですAWS KMS。
+  Neptune で IAM 認証を有効にする必要があります。また、ターゲットの Amazon S3 バケットに書き込むための適切な IAM アクセス権限が必要です。この権限がない場合、400 Bad Request エラー「クラスターで S3 Export の IAM 認証が有効になっている必要があります」が発生します。
+  ターゲットの Amazon S3 バケット 
  +  ターゲットの Amazon S3 バケットはパブリックにすることはできません。`Block public access` を有効にする必要があります。
  +  ターゲットの Amazon S3 送信先は空である必要があります。
  +  ターゲットの Amazon S3 バケットには、`Delete incomplete multipart uploads` を使用した `Delete expired object delete markers or incomplete multipart uploads` のライフサイクルルールの設定が必要です。詳細については、「[Amazon S3 lifecycle management update - support for multipart uploads and delete markers](https://aws.amazon.com/blogs/aws/s3-lifecycle-management-update-support-for-multipart-uploads-and-delete-markers/)」を参照してください。  
![ライフサイクルルールアクションを示す画像。](http://docs.aws.amazon.com/ja_jp/neptune/latest/userguide/images/lifecycleRuleActions.png)
  +  ターゲットの Amazon S3 バケットには、クエリ評価に要する値 (7 日間など) よりも大きい値に設定した `Delete incomplete multipart uploads` を使用して、`Delete expired object delete markers or incomplete multipart uploads` のライフサイクルルールを設定することが必要です。これは、不完全なアップロード (直接表示されないがコストが発生する) を、Neptune によって完了または中止できない場合 (インスタンス/エンジンの障害など) に削除するために必要です。詳細については、「[Amazon S3 lifecycle management update - support for multipart uploads and delete markers](https://aws.amazon.com/blogs/aws/s3-lifecycle-management-update-support-for-multipart-uploads-and-delete-markers/)」を参照してください。  
![ライフサイクルルールアクションと期限切れオブジェクト削除マーカーを示す画像。](http://docs.aws.amazon.com/ja_jp/neptune/latest/userguide/images/lifecycleRuleActionsDelete.png)

**重要な考慮事項**
+  エクスポートステップは、Gremlin クエリの最後のステップである必要があります。
+  指定された Amazon S3 ロケーションにオブジェクトが既に存在する場合、クエリは失敗します。
+  エクスポートクエリの最大クエリ実行時間は、11 時間 50 分に制限されています。この機能は、[転送アクセスセッション](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_forward_access_sessions.html)を使用します。トークンの有効期限の問題を回避するため、現在 11 時間 50 分に制限されています。
**注記**  
 エクスポートクエリは引き続きクエリタイムアウトに従います。大規模なエクスポートの場合は、適切なクエリタイムアウトを使用する必要があります。
+  Amazon S3 への新しいオブジェクトのアップロードは、すべて自動的に暗号化されます。
+  エラーやクラッシュの発生時の不完全なマルチパートアップロードによるストレージコストを回避するには、Amazon S3 バケットで `Delete incomplete multipart uploads` を使用してライフサイクルルールを設定することをお勧めします。

## レスポンスの形式
<a name="exporting-gremlin-response"></a>

 クエリ結果は直接返されるのではなく、ステータスやエクスポートの詳細など、エクスポートオペレーションに関するメタデータが返されます。Amazon S3 のクエリ結果は [GraphSONv3](https://tinkerpop.apache.org/docs/3.7.3/dev/io/#graphson-3d0) 形式になります。

```
{
  "data": {
    "@type": "g:List",
    "@value": [
      {
        "@type": "g:Map",
        "@value": [
          "browserUsed",
          {
            "@type": "g:List",
            "@value": [
              "Safari"
            ]
          },
          "length",
          {
            "@type": "g:List",
            "@value": [
              {
                "@type": "g:Int32",
                "@value": 7
              }
            ]
          },
          "locationIP",
          {
            "@type": "g:List",
            "@value": [
              "192.0.2.0/24"
            ]
          },
          "creationDate",
          {
            "@type": "g:List",
            "@value": [
              {
                "@type": "g:Date",
                "@value": 1348341961000
              }
            ]
          },
          "content",
          {
            "@type": "g:List",
            "@value": [
              "no way!"
            ]
          }
        ]
      },
      {
        "@type": "g:Map",
        "@value": [
          "browserUsed",
          {
            "@type": "g:List",
            "@value": [
              "Firefox"
            ]
          },
          "length",
          {
            "@type": "g:List",
            "@value": [
              {
                "@type": "g:Int32",
                "@value": 2
              }
            ]
          },
          "locationIP",
          {
            "@type": "g:List",
            "@value": [
              "203.0.113.0/24"
            ]
          },
          "creationDate",
          {
            "@type": "g:List",
            "@value": [
              {
                "@type": "g:Date",
                "@value": 1348352960000
              }
            ]
          },
          "content",
          {
            "@type": "g:List",
            "@value": [
              "ok"
            ]
          }
        ]
      },
      
      
      ...
      
      
    ]
  }
}
```

**セキュリティ**
+  Amazon S3 に転送されるすべてのデータは、転送中に SSL を使用して暗号化されます。
+  エクスポートされたデータのサーバー側の暗号化にAWS KMSキーを指定できます。Amazon S3 は、デフォルトで新しいオブジェクトを暗号化します。バケットが特定のAWS KMSキーを使用するように設定されている場合、そのキーが使用されます。
+  Neptune は、エクスポートを開始する前に、ターゲットバケットが公開されていないことを確認します。
+  クロスアカウントエクスポートおよびクロスリージョンエクスポートはサポートされていません。

**エラー処理**
+  ターゲットの Amazon S3 バケットはパブリックです。
+  指定されたオブジェクトは既に存在します。
+  Amazon S3 バケットへ書き込むための十分なアクセス権限がありません。
+  クエリの実行が最大時間制限を超えています。

**ベストプラクティス**
+  Amazon S3 バケットライフサイクルルールを使用して、不完全なマルチパートアップロードをクリーンアップします。
+  Neptune ログとメトリクスを使用してエクスポートオペレーションを監視します。[Gremlin ステータスエンドポイント](https://docs.aws.amazon.com//neptune/latest/userguide/gremlin-api-status.html)をチェックして、クエリが現在実行されているかどうかを確認できます。クライアントがレスポンスを受信していない限り、クエリは実行中と見なされます。