

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Neptune DB 클러스터에서 데이터 내보내기
<a name="neptune-data-export"></a>

Neptune DB 클러스터에서 데이터를 내보내는 몇 가지 좋은 방법이 있습니다.
+ 데이터 양이 적은 경우 하나 이상의 쿼리 결과를 사용하면 됩니다.
+ RDF 데이터의 경우 [그래프 저장소 프로토콜(GSP)](sparql-graph-store-protocol.md)을 사용하면 쉽게 내보낼 수 있습니다. 예제:

  ```
  curl --request GET \
    'https://your-neptune-endpoint:port/sparql/gsp/?graph=http://www.example.com/named/graph'
  ```
+ [https://github.com/aws/neptune-export](https://github.com/aws/neptune-export)라는 Neptune 데이터를 내보내기 위한 강력하고 유연한 오픈 소스 도구도 있습니다. 다음 섹션에서는 이 도구의 기능과 사용 방법에 대해 설명합니다.

**Topics**
+ [`neptune-export` 사용하기](neptune-export.md)
+ [Neptune-Export 서비스를 사용하여 Neptune 데이터 내보내기](export-service.md)
+ [`neptune-export` 명령줄 도구를 사용하여 Neptune에서 데이터 내보내기](export-utility.md)
+ [Neptune-Export 및 `neptune-export`에서 내보낸 파일](exported-files.md)
+ [Neptune 내보내기 프로세스를 제어하는 데 사용되는 파라미터](export-parameters.md)
+ [Neptune 내보내기 프로세스 문제 해결](export-troubleshooting.md)
+ [Amazon S3로 Gremlin 쿼리 결과 내보내기](exporting-gremlin.md)

# `neptune-export` 사용하기
<a name="neptune-export"></a>

다음과 같은 2가지 방법으로 오픈 소스 [https://github.com/aws/neptune-export](https://github.com/aws/neptune-export) 도구를 사용할 수 있습니다.
+ **[Neptune-Export 서비스](export-service.md)로 사용**.   Neptune-Export 서비스를 사용하여 Neptune에서 데이터를 내보내는 경우 REST API를 통해 내보내기 작업을 트리거하고 모니터링합니다.
+ **[`neptune-export` Java 명령줄 유틸리티](export-utility.md)로 사용**.   이 명령줄 도구를 사용하여 Neptune 데이터를 내보내려면 Neptune DB 클러스터에 액세스할 수 있는 환경에서 실행해야 합니다.

Neptune-Export 서비스와 `neptune-export` 명령줄 도구는 Amazon S3 서버 측 암호화(`SSE-S3`)를 사용하여 암호화된 데이터를 Amazon Simple Storage Service(S3)에 게시합니다.

**참고**  
모든 Amazon S3 버킷에서 [액세스 로깅을 활성화하여](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html) 해당 버킷에 대한 모든 액세스를 감사하는 것이 가장 좋습니다.

내보내는 동안 데이터가 변경되는 Neptune DB 클러스터에서 데이터를 내보내려고 하면 내보낸 데이터의 일관성이 보장되지 않습니다. 즉, 내보내기 작업이 진행되는 동안 클러스터가 쓰기 트래픽을 처리하는 경우 내보낸 데이터에 불일치가 있을 수 있습니다. 이는 클러스터의 기본 인스턴스에서 내보내는 경우든, 하나 이상의 읽기 전용 복제본에서 내보내는 경우든 마찬가지입니다.

내보낸 데이터의 일관성을 보장하려면 [DB 클러스터의 복제본](manage-console-cloning.md)에서 내보내는 것이 가장 좋습니다. 이 두 방법 모두 데이터의 정적 버전을 내보내기 도구에 제공하고 내보내기 작업으로 인해 원본 DB 클러스터의 쿼리 속도가 느려지지 않도록 합니다.

내보내기 작업을 트리거할 때 소스 DB 클러스터를 복제하겠다고 지정하면 작업이 쉬워집니다. 이렇게 하면 내보내기 프로세스에서 자동으로 복제본을 생성하여 내보내기에 사용한 후 내보내기가 완료되면 삭제합니다.

# Neptune-Export 서비스를 사용하여 Neptune 데이터 내보내기
<a name="export-service"></a>

다음 단계에 따라 Neptune-Export 서비스를 사용하여 Neptune DB 클러스터에서 Amazon S3로 데이터를 내보낼 수 있습니다.

## Neptune-Export 서비스 설치
<a name="export-service-install"></a>

AWS CloudFormation 템플릿을 사용하여 스택을 생성합니다.

**Neptune-Export 서비스를 설치하려면**

1. 다음 표의 **스택 실행** 버튼 중 하나를 선택하여 CloudFormation 콘솔에서 CloudFormation 스택을 실행합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/neptune/latest/userguide/export-service.html)

1.  **템플릿 선택** 페이지에서 **다음**을 선택합니다.

1. **세부 정보 지정** 페이지의 템플릿에서 다음 파라미터를 설정합니다.
   + **`VPC`**   –   Neptune-Export 서비스를 설정하는 가장 쉬운 방법은 Neptune 데이터베이스와 동일한 Amazon VPC에 설치하는 것입니다. 별도의 VPC에 설치하려는 경우 [VPC 피어링](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)을 사용하여 Neptune DB 클러스터의 VPC와 Neptune-Export 서비스 VPC 간에 연결을 설정할 수 있습니다.
   + **`Subnet1`**   –   Neptune-Export 서비스는 서브넷에서 인터넷으로의 아웃바운드 IPv4 HTTPS 트래픽을 허용하는 VPC의 서브넷에 설치해야 합니다. 이는 Neptune-Export 서비스가 [AWS 배치 API](https://aws.amazon.com/premiumsupport/knowledge-center/batch-job-stuck-runnable-status/)를 호출하여 내보내기 작업을 생성하고 실행할 수 있도록 하기 위함입니다.

     Neptune 설명서 [Neptune 클러스터 생성](get-started-create-cluster.md) 페이지의 CloudFormation 템플릿을 사용하여 Neptune 클러스터를 생성한 경우, 해당 스택의 `PrivateSubnet1` 및 `PrivateSubnet2` 출력을 사용하여 이 파라미터와 다음 파라미터를 채울 수 있습니다.
   + **`Subnet2`**   –   서브넷에서 인터넷으로의 아웃바운드 IPv4 HTTPS 트래픽을 허용하는 VPC의 두 번째 서브넷입니다.
   + **`EnableIAM`**   –  AWS Identity and Access Management(IAM)를 사용하여 Neptune-Endpoint API를 보호하도록 이를 `true`로 설정합니다. 이것이 권장 사항입니다.

     IAM 인증을 활성화하는 경우 엔드포인트에 대한 모든 HTTPS 요청에 `Sigv4` 서명해야 합니다. [awscurl](https://github.com/okigan/awscurl)과 같은 도구를 사용하여 사용자 대신 요청에 서명할 수 있습니다.
   + **`VPCOnly`**   –  이를 `true`로 설정하면 내보내기 엔드포인트가 VPC 전용으로 설정되므로, Neptune-Export 서비스가 설치된 VPC 내에서만 액세스할 수 있습니다. 이로 인해 Neptune-Export API는 해당 VPC 내에서만 사용할 수 있습니다.

     `VPCOnly`을 `true`로 설정하는 것이 좋습니다.
   + **`NumOfFilesULimit `**   –   `ulimits` 컨테이너 속성의 `nofile`에 대해 10,000에서 1,000,000 사이의 값을 지정합니다. 기본값은 10,000이며, 그래프에 많은 수의 고유 레이블이 포함되어 있지 않는 한 기본값을 유지하는 것이 좋습니다.
   + **`PrivateDnsEnabled `**(부울)   –   프라이빗 호스팅 영역을 지정된 VPC와 연결할지 여부를 나타냅니다. 기본값은 `true`입니다.

     이 플래그가 활성화된 상태로 VPC 엔드포인트를 생성하면 모든 API 게이트웨이 트래픽이 VPC 엔드포인트를 통해 라우팅되고 퍼블릭 API 게이트웨이 엔드포인트 호출이 비활성화됩니다. `PrivateDnsEnabled`를 `false`로 설정하면 퍼블릭 API 게이트웨이 엔드포인트가 활성화되지만, Neptune 내보내기 서비스는 프라이빗 DNS 엔드포인트를 통해 연결할 수 없습니다. 그런 다음 [여기에](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-api-test-invoke-url.html#apigateway-private-api-public-dns) 설명된 대로 VPC 엔드포인트의 퍼블릭 DNS 엔드포인트를 사용하여 내보내기 서비스를 호출할 수 있습니다.
   +  **`NeptuneExportVersion`** - 사용할 Neptune 내보내기 유틸리티의 버전을 지정합니다. `v1.1.11` 이상의 모든 버전이 지원됩니다. `v2.latest` 버전을 사용하여 마이너 업데이트를 자동으로 수신할 수 있습니다. 사용 가능한 버전의 전체 목록과 패치 정보는 오픈 소스 [GitHub 릴리스](https://github.com/aws/neptune-export/releases)에서 확인할 수 있습니다.

1. **다음**을 선택합니다.

1. **옵션** 페이지에서 **다음**을 선택합니다.

1. **검토** 페이지에서 첫 번째 확인란을 선택하여 CloudFormation이 IAM 리소스를 생성하는 것을 승인합니다. 두 번째 확인란을 선택하여 새 스택에 대해 `CAPABILITY_AUTO_EXPAND`를 승인합니다.
**참고**  
`CAPABILITY_AUTO_EXPAND`는 사전 검토 없이 스택을 생성할 경우 매크로가 확장됨을 명시적으로 승인합니다. 사용자는 실제로 스택을 생성하기 전에 매크로를 통한 변경 사항을 검토할 수 있도록 처리된 템플릿에서 변경 세트를 생성하는 경우가 많습니다. 자세한 내용은 CloudFormation [CreateStack](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html) API를 참조하십시오.

   그런 다음 **생성**을 선택합니다.

## Neptune-Export에서 Neptune에 액세스할 수 있도록 설정
<a name="export-service-access-to-neptune"></a>

Neptune-Export 설치가 완료된 후 Neptune-Export에서 액세스할 수 있도록 [Neptune VPC 보안 그룹](get-started-vpc.md#security-vpc-security-group)을 업데이트합니다. Neptune-Export CloudFormation 스택이 생성되면 **출력** 탭에 `NeptuneExportSecurityGroup` ID가 포함됩니다. Neptune-Export 보안 그룹에서 액세스를 허용하도록 Neptune VPC 보안 그룹을 업데이트합니다.

## VPC 기반 EC2 인스턴스에서 Neptune-Export 엔드포인트에 액세스할 수 있도록 설정
<a name="export-service-access-to-service"></a>

Neptune-Export 엔드포인트를 VPC 전용으로 설정하는 경우 Neptune-Export 서비스가 설치된 VPC 내에서만 엔드포인트에 액세스할 수 있습니다. Neptune-Export API 호출을 수행할 수 있는 VPC의 Amazon EC2 인스턴스에서 연결할 수 있도록 하려면 CloudFormation 스택에서 생성한 `NeptuneExportSecurityGroup`을 해당 Amazon EC2 인스턴스에 연결하면 됩니다.

# Neptune-Export API를 사용하여 Neptune-Export 작업 실행
<a name="export-service-run-export"></a>

CloudFormation 스택의 **출력** 탭에는 `NeptuneExportApiUri`도 포함되어 있습니다. Neptune-Export 엔드포인트에 요청을 보낼 때마다 이 URI를 사용합니다.

**내보내기 작업 실행**
+ 내보내기를 실행하는 사용자 또는 역할에 `execute-api:Invoke` 권한이 부여되었는지 확인하세요.
+ Neptune-Export를 설치할 때 CloudFormation 스택에서 `EnableIAM` 파라미터를 `true`로 설정한 경우 Neptune-Export API에 대한 모든 요청에 `Sigv4` 서명해야 합니다. [awscurl](https://github.com/okigan/awscurl)을 사용하여 API에 요청하는 것이 좋습니다. 여기의 모든 예제에서는 IAM 인증이 활성화된 것으로 가정합니다.
+ Neptune-Export를 설치할 때 CloudFormation 스택에 `VPCOnly` 파라미터를 `true`로 설정한 경우 VPC 내에서, 보통 해당 VPC에 있는 Amazon EC2 인스턴스에서 Neptune-Export API를 호출해야 합니다.

데이터 내보내기를 시작하려면 `command` 및 `outputS3Path` 요청 파라미터와 `endpoint` 내보내기 파라미터를 사용하여 `NeptuneExportApiUri` 엔드포인트에 요청을 보내면 됩니다.

Neptune에서 속성 그래프 데이터를 내보내 Amazon S3에 게시하는 요청의 예는 다음과 같습니다.

```
curl \
  (your NeptuneExportApiUri) \
  -X POST \
  -H 'Content-Type: application/json' \
  -d '{
        "command": "export-pg",
        "outputS3Path": "s3://(your Amazon S3 bucket)/neptune-export",
        "params": { "endpoint": "(your Neptune endpoint DNS name)" }
      }'
```

마찬가지로, 다음은 Neptune에서 Amazon S3로 RDF 데이터를 내보내는 요청의 예입니다.

```
curl \
  (your NeptuneExportApiUri) \
  -X POST \
  -H 'Content-Type: application/json' \
  -d '{
        "command": "export-rdf",
        "outputS3Path": "s3://(your Amazon S3 bucket)/neptune-export",
        "params": { "endpoint": "(your Neptune endpoint DNS name)" }
      }'
```

`command` 요청 파라미터를 생략하면 기본적으로 Neptune-Export는 Neptune에서 속성 그래프 데이터를 내보내려고 시도합니다.

이전 명령이 성공적으로 실행된 경우 출력은 다음과 같습니다.

```
{
  "jobName": "neptune-export-abc12345-1589808577790",
  "jobId": "c86258f7-a9c9-4f8c-8f4c-bbfe76d51c8f"
}
```

## 방금 시작한 내보내기 작업 모니터링
<a name="export-service-monitor"></a>

실행 중인 작업을 모니터링하려면 다음과 같이 jobID를 `NeptuneExportApiUri`에 추가하면 됩니다.

```
curl \
  (your NeptuneExportApiUri)/(the job ID)
```

서비스가 아직 내보내기 작업을 시작하지 않은 경우 응답은 다음과 같습니다.

```
{
  "jobId": "c86258f7-a9c9-4f8c-8f4c-bbfe76d51c8f",
  "status": "pending"
}
```

내보내기 작업이 시작된 후 명령을 반복하면 응답은 다음과 같습니다.

```
{
  "jobId": "c86258f7-a9c9-4f8c-8f4c-bbfe76d51c8f",
  "status": "running",
  "logs": "https://us-east-1.console.aws.amazon.com/cloudwatch/home?..."
}
```

상태 호출에서 제공한 URI를 사용하여 CloudWatch Logs에서 로그를 열면 내보내기 진행 상황을 자세히 모니터링할 수 있습니다.

![\[CloudWatch Logs 로그 화면의 스크린샷입니다.\]](http://docs.aws.amazon.com/ko_kr/neptune/latest/userguide/images/export-job-monitor.png)


## 실행 중인 내보내기 작업 취소
<a name="export-service-cancel-job"></a>

**AWS Management Console을 사용하여 실행 중인 내보내기 작업을 취소하려면**

1. [https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/)에서 AWS Batch 콘솔을 엽니다.

1. **작업**을 선택합니다.

1. 취소하려는 실행 중인 작업을 `jobID`를 기준으로 찾습니다.

1. **작업 취소**를 선택합니다.

**Neptune 내보내기 API를 사용하여 실행 중인 내보내기 작업을 취소하려면**:

다음과 같이 `jobID`가 추가된 상태에서 `HTTP DELETE` 요청을 `NeptuneExportApiUri`로 보냅니다.

```
curl -X DELETE \
  (your NeptuneExportApiUri)/(the job ID)
```

# `neptune-export` 명령줄 도구를 사용하여 Neptune에서 데이터 내보내기
<a name="export-utility"></a>

다음 단계에 따라 `neptune-export` 명령줄 유틸리티를 사용하여 Neptune DB 클러스터에서 Amazon S3로 데이터를 내보낼 수 있습니다.

## `neptune-export` 명령줄 유틸리티를 사용하기 위한 사전 조건
<a name="export-utility-setup"></a>

**시작하기 전에**
+ **JDK 버전 8 설치**   –   [Java SE 개발 키트(JDK)](https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html) 버전 8이 설치되어 있어야 합니다.
+ **neptune-export 유틸리티 다운로드**   –   [neptune-export.jar](https://s3.amazonaws.com/aws-neptune-customer-samples/neptune-export/bin/neptune-export.jar) 파일을 다운로드하고 설치합니다.
+ **`neptune-export`가 Neptune VPC에 액세스할 수 있는지 확인**   –   Neptune DB 클러스터가 있는 VPC에 액세스할 수 있는 위치에서 neptune-export를 실행합니다.

  예를 들어, Neptune VPC 내의 Amazon EC2 인스턴스에서 실행하거나 Neptune VPC와 피어링되는 별도의 VPC 또는 별도의 Bastion Host에서 실행할 수 있습니다.
+ **VPC 보안 그룹이 `neptune-export`에 액세스할 권한을 부여하는지 확인**   –   Neptune VPC에 연결된 VPC 보안 그룹이 `neptune-export` 환경과 연결된 IP 주소 또는 보안 그룹에서 DB 클러스터에 액세스할 수 있도록 허용하는지 확인합니다.
+ **필요한 IAM 권한 설정**   - 데이터베이스에 AWS Identity and Access Management (IAM) 데이터베이스 인증이 활성화된   경우가 `neptune-export` 실행되는 역할이 Neptune에 대한 연결을 허용하는 IAM 정책과 연결되어 있는지 확인합니다. Neptune 정책에 대한 내용은 [IAM 정책 사용](security-iam-access-manage.md)을 참조하세요.

  쿼리 요청에서 `clusterId` 내보내기 파라미터를 사용하려는 경우 `neptune-export`가 실행되는 역할에는 다음과 같은 IAM 권한이 필요합니다.
  + `rds:DescribeDBClusters`
  + `rds:DescribeDBInstances`
  + `rds:ListTagsForResource`

  복제된 클러스터에서 내보내려면 `neptune-export`가 실행되는 역할에는 다음과 같은 IAM 권한이 필요합니다.
  + `rds:AddTagsToResource`
  + `rds:DescribeDBClusters`
  + `rds:DescribeDBInstances`
  + `rds:ListTagsForResource`
  + `rds:DescribeDBClusterParameters`
  + `rds:DescribeDBParameters`
  + `rds:ModifyDBParameterGroup`
  + `rds:ModifyDBClusterParameterGroup`
  + `rds:RestoreDBClusterToPointInTime`
  + `rds:DeleteDBInstance`
  + `rds:DeleteDBClusterParameterGroup`
  + `rds:DeleteDBParameterGroup`
  + `rds:DeleteDBCluster`
  + `rds:CreateDBInstance`
  + `rds:CreateDBClusterParameterGroup`
  + `rds:CreateDBParameterGroup`

  내보낸 데이터를 Amazon S3에 게시하려면 `neptune-export`가 실행되는 역할에 Amazon S3 위치에 대해 다음과 같은 IAM 권한이 필요합니다.
  + `s3:PutObject`
  + `s3:PutObjectTagging`
  + `s3:GetObject`
+ **`SERVICE_REGION` 환경 변수 설정**   –   DB 클러스터가 위치한 리전을 식별하도록 `SERVICE_REGION` 환경 변수를 설정합니다(리전 식별자 목록은 [Neptune에 연결](iam-auth-connecting-gremlin-java.md) 참조).

## `neptune-export` 유틸리티를 실행하여 내보내기 작업 시작
<a name="export-utility-running"></a>

다음 명령을 사용하여 명령줄에서 neptune-export를 실행하고 내보내기 작업을 시작합니다.

```
java -jar neptune-export.jar nesvc \
  --root-path (path to a local directory) \
  --json (the JSON file that defines the export)
```

이 명령에는 2개의 파라미터가 있습니다.

**내보내기 시작 시 neptune-export용 파라미터**
+ **`--root-path`**   –   Amazon S3에 게시되기 전에 내보내기 파일이 기록되는 로컬 디렉터리의 경로입니다.
+ **`--json`**   –   내보내기를 정의하는 JSON 객체입니다.

## `neptune-export` 명령줄 유틸리티를 사용하는 예제 명령
<a name="export-utility-examples"></a>

소스 DB 클러스터에서 직접 속성 그래프 데이터를 내보내려면 다음을 수행합니다.

```
java -jar neptune-export.jar nesvc \
  --root-path /home/ec2-user/neptune-export \
  --json '{
            "command": "export-pg",
            "outputS3Path" : "s3://(your Amazon S3 bucket)/neptune-export",
            "params": {
              "endpoint" : "(your neptune DB cluster endpoint)"
            }
          }'
```

소스 DB 클러스터에서 직접 RDF 데이터를 내보내려면 다음을 수행합니다.

```
java -jar neptune-export.jar nesvc \
  --root-path /home/ec2-user/neptune-export \
  --json '{
            "command": "export-rdf",
            "outputS3Path" : "s3://(your Amazon S3 bucket)/neptune-export",
            "params": {
              "endpoint" : "(your neptune DB cluster endpoint)"
            }
          }'
```

`command` 요청 파라미터를 생략하면 `neptune-export` 유틸리티는 기본적으로 Neptune에서 속성 그래프 데이터를 내보냅니다.

DB 클러스터의 복제본에서 내보내려면 다음을 수행합니다.

```
java -jar neptune-export.jar nesvc \
  --root-path /home/ec2-user/neptune-export \
  --json '{
            "command": "export-pg",
            "outputS3Path" : "s3://(your Amazon S3 bucket)/neptune-export",
            "params": {
              "endpoint" : "(your neptune DB cluster endpoint)",
              "cloneCluster" : true
            }
          }'
```

IAM 인증을 사용하여 DB 클러스터에서 내보내려면 다음을 수행합니다.

```
java -jar neptune-export.jar nesvc \
  --root-path /home/ec2-user/neptune-export \
  --json '{
            "command": "export-pg",
            "outputS3Path" : "s3://(your Amazon S3 bucket)/neptune-export",
            "params": {
              "endpoint" : "(your neptune DB cluster endpoint)"
              "useIamAuth" : true
            }
          }'
```

# Neptune-Export 및 `neptune-export`에서 내보낸 파일
<a name="exported-files"></a>

내보내기가 완료되면 내보낸 파일이 지정한 Amazon S3 위치에 게시됩니다. Amazon S3로 게시된 모든 파일은 Amazon S3 서버 측 암호화(`SSE-S3`)를 사용하여 암호화됩니다. Amazon S3에 게시되는 폴더와 파일은 속성 그래프 데이터를 내보낼지 RDF 데이터를 내보낼지에 따라 달라집니다. 파일이 게시된 Amazon S3 위치를 열면 다음 콘텐츠가 표시됩니다.

**Amazon S3에서 내보낸 파일의 위치**
+ **`nodes/`**   –   이 폴더에는 쉼표로 구분된 값(CSV) 또는 JSON 형식의 노드 데이터 파일이 들어 있습니다.

   Neptune에서는 노드에 하나 이상의 레이블이 있을 수 있습니다. 개별 레이블이 서로 다른 노드(또는 여러 레이블의 다양한 조합)는 다른 파일에 기록됩니다. 즉, 개별 파일에는 레이블 조합이 다른 노드의 데이터가 포함되지 않습니다. 노드에 레이블이 여러 개 있는 경우 레이블은 파일에 할당되기 전에 영문자순으로 정렬됩니다.
+ **`edges/`**   –   이 폴더에는 쉼표로 구분된 값(CSV) 또는 JSON 형식의 엣지 데이터 파일이 들어 있습니다.

  노드 파일과 마찬가지로, 엣지 데이터도 레이블 조합에 따라 다른 파일에 기록됩니다. 모델 훈련을 위해 엣지 데이터는 엣지 레이블과 엣지 시작 및 끝 노드 레이블의 조합을 기반으로 서로 다른 파일에 할당됩니다.
+ **`statements/`**   –   이 폴더에는 Turtle, N-Quads, N-Triples 또는 JSON 형식의 **RDF** 데이터 파일이 들어 있습니다.
+ **`config.json`**   –   이 파일에는 내보내기 프로세스에서 추정한 그래프 *스키마*가 들어 있습니다.
+ **`lastEventId.json`**   –   이 파일은 데이터베이스의 Neptune 스트림에 있는 마지막 이벤트의 `commitNum` 및 `opNum`을 포함합니다. `includeLastEventId` 내보내기 파라미터를 `true`로 설정하고 데이터를 내보내는 데이터베이스에 [Neptune 스트림](streams-using.md)이 활성화된 경우에만 내보내기 프로세스에 이 파일이 포함됩니다.

# Neptune 내보내기 프로세스를 제어하는 데 사용되는 파라미터
<a name="export-parameters"></a>

Neptune-Export 서비스를 사용하든 `neptune-export` 명령줄 유틸리티를 사용하든 관계없이, 내보내기를 제어하는 데 사용하는 파라미터는 거의 동일합니다. 여기에는 명령줄에서 `neptune-export` 또는 Neptune-Export 엔드포인트에 전달된 JSON 객체가 포함되어 있습니다.

내보내기 프로세스에 전달된 객체에는 최대 5개의 최상위 필드가 있습니다.

```
-d '{
      "command" : "(either export-pg or export-rdf)",
      "outputS3Path" : "s3:/(your Amazon S3 bucket)/(path to the folder for exported data)",
      "jobSize" : "(for Neptune-Export service only)",
      "params" : { (a JSON object that contains export-process parameters) },
      "additionalParams": { (a JSON object that contains parameters for training configuration) }
    }'
```

**Contents**
+ [`command` 파라미터](#export-parameters-command)
+ [`outputS3Path` 파라미터](#export-parameters-outputS3Path)
+ [`jobSize` 파라미터](#export-parameters-jobSize)
+ [`params` 객체](#export-parameters-params)
+ [`additionalParams` 객체](#export-parameters-additionalParams)
+ [`params` 최상위 JSON 객체에서 파라미터 필드 내보내기](export-params-fields.md)
  + [내보내기 파라미터 `params` 객체의 가능한 필드 목록](export-params-fields.md#export-params-fields-list)
    + [모든 유형의 내보내기에 공통으로 사용되는 필드 목록](export-params-fields.md#export-params-common-fields-list)
    + [속성 그래프 내보내기용 필드 목록](export-params-fields.md#export-params-property-graph-fields-list)
    + [RDF 내보내기용 필드 목록](export-params-fields.md#export-params-RDF-fields-list)
  + [모든 유형의 내보내기에 공통으로 사용되는 필드](export-params-fields.md#export-params-common-fields)
    + [`params`의 `cloneCluster` 필드](export-params-fields.md#export-params-cloneCluster)
    + [`params`의 `cloneClusterInstanceType` 필드](export-params-fields.md#export-params-cloneClusterInstanceType)
    + [`params`의 `cloneClusterReplicaCount` 필드](export-params-fields.md#export-params-cloneClusterReplicaCount)
    + [`params`의 `cloneClusterEnableAuditLogs` 필드](export-params-fields.md#export-params-cloneClusterEnableAuditLogs)
    + [`params`의 `clusterId` 필드](export-params-fields.md#export-params-clusterId)
    + [`params`의 `endpoint` 필드](export-params-fields.md#export-params-endpoint)
    + [`params`의 `endpoints` 필드](export-params-fields.md#export-params-endpoints)
    + [`params`의 `profile` 필드](export-params-fields.md#export-params-profile)
    + [`params`의 `useIamAuth` 필드](export-params-fields.md#export-params-useIamAuth)
    + [`params`의 `includeLastEventId` 필드](export-params-fields.md#export-params-includeLastEventId)
  + [속성 그래프 내보내기용 필드](export-params-fields.md#export-params-property-graph-fields)
    + [`params`의 `concurrency` 필드](export-params-fields.md#export-params-concurrency)
    + [`params`의 `edgeLabels` 필드](export-params-fields.md#export-params-edgeLabels)
    + [`params`의 `filter` 필드](export-params-fields.md#export-params-filter)
    + [`params`의 `filterConfigFile` 필드](export-params-fields.md#export-params-filterConfigFile)
    + [`params`의 속성 그래프 데이터에 사용되는 `format` 필드](export-params-fields.md#export-params-format-pg)
    + [`params`의 `gremlinFilter` 필드](export-params-fields.md#export-params-gremlinFilter)
    + [`params`의 `gremlinNodeFilter` 필드](export-params-fields.md#export-params-gremlinNodeFilter)
    + [`params`의 `gremlinEdgeFilter` 필드](export-params-fields.md#export-params-gremlinEdgeFilter)
    + [`params`의 `nodeLabels` 필드](export-params-fields.md#export-params-nodeLabels)
    + [`params`의 `scope` 필드](export-params-fields.md#export-params-scope)
  + [RDF 내보내기용 필드](export-params-fields.md#export-params-rdf-fields)
    + [`params`의 RDF 데이터에 사용되는 `format` 필드](export-params-fields.md#export-params-format-rdf)
    + [`params`의 `rdfExportScope` 필드](export-params-fields.md#export-params-rdfExportScope)
    + [`params`의 `sparql` 필드](export-params-fields.md#export-params-sparql)
    + [`params`의 `namedGraph` 필드](export-params-fields.md#namedgraph-params-sparql)
+ [내보내는 항목 필터링 예제](export-filtering-examples.md)
  + [속성 그래프 데이터 내보내기 필터링](export-filtering-examples.md#export-property-graph-filtering-examples)
    + [`scope`를 사용하여 엣지만 내보내는 예제](export-filtering-examples.md#export-property-graph-filtering-scope-example)
    + [`nodeLabels` 및 `edgeLabels`를 사용하여 특정 레이블이 있는 노드와 엣지만 내보내는 예제](export-filtering-examples.md#export-property-graph-filtering-labels-example)
    + [`filter`를 사용하여 지정된 노드, 엣지 및 속성만 내보내는 예제](export-filtering-examples.md#export-property-graph-filtering-filter-example)
    + [`gremlinFilter`를 사용하는 예제](export-filtering-examples.md#export-property-graph-filtering-gremlinFilter-example)
    + [`gremlinNodeFilter`를 사용하는 예제](export-filtering-examples.md#export-property-graph-filtering-gremlinNodeFilter-example)
    + [`gremlinEdgeFilter`를 사용하는 예제](export-filtering-examples.md#export-property-graph-filtering-gremlinEdgeFilter-example)
    + [`filter`, `gremlinNodeFilter`, `nodeLabels`, `edgeLabels`, `scope` 결합](export-filtering-examples.md#export-property-graph-filtering-combo-example)
  + [RDF 데이터 내보내기 필터링](export-filtering-examples.md#export-RDF-filtering-examples)
    + [`rdfExportScope` 및 `sparql`을 사용하여 특정 엣지 내보내기](export-filtering-examples.md#export-RDF-filtering-rdfExportScope-sparql-example)
    + [`namedGraph`를 사용하여 명명된 단일 그래프 내보내기](export-filtering-examples.md#export-RDF-filtering-rdfExportScope-sparql-namedGraph-example)

## `command` 파라미터
<a name="export-parameters-command"></a>

`command` 최상위 파라미터는 속성 그래프 데이터를 내보낼지 아니면 RDF 데이터를 내보낼지 결정합니다. `command` 파라미터를 생략하면 내보내기 프로세스에서 기본적으로 속성 그래프 데이터를 내보냅니다.
+ **`export-pg`**   –   속성 그래프 데이터를 내보냅니다.
+ **`export-rdf`**   –   RDF 데이터를 내보냅니다.

## `outputS3Path` 파라미터
<a name="export-parameters-outputS3Path"></a>

`outputS3Path` 최상위 파라미터는 필수이며, 내보낸 파일을 게시할 수 있는 Amazon S3 위치의 URI를 포함해야 합니다.

```
  "outputS3Path" : "s3://(your Amazon S3 bucket)/(path to output folder)"
```

값은 `s3://`로 시작하고, 그 뒤에 유효한 버킷 이름과 필요에 따라 버킷 내 폴더 경로가 와야 합니다.

## `jobSize` 파라미터
<a name="export-parameters-jobSize"></a>

`jobSize` 최상위 파라미터는 Neptune-Export 서비스에서만 사용되며, `neptune-export` 명령줄 유틸리티에서는 사용되지 않고 선택 사항입니다. 이 파라미터를 사용하면 시작하는 내보내기 작업의 크기를 특성화할 수 있으므로, 작업에 사용되는 컴퓨팅 리소스의 양과 최대 동시성 수준을 결정하는 데 도움이 됩니다.

```
  "jobSize" : "(one of four size descriptors)"
```

4가지 유효한 크기 설명자는 다음과 같습니다.
+ `small`   –   최대 동시성: 8. 최대 10GB의 스토리지 볼륨에 적합합니다.
+ `medium`   –   최대 동시성: 32. 최대 100GB의 스토리지 볼륨에 적합합니다.
+ `large`   –   최대 동시성: 64. 100GB 초과, 1TB 미만의 스토리지 볼륨에 적합합니다.
+ `xlarge`   –   최대 동시성: 96. 1TB 이상의 스토리지 볼륨에 적합합니다.

기본적으로 Neptune-Export 서비스에서 시작된 내보내기는 `small` 작업으로 실행됩니다.

내보내기 성능은 `jobSize` 설정뿐 아니라 내보내는 데이터베이스 인스턴스 수, 각 인스턴스의 크기, 작업의 효과적인 동시성 수준에 따라서도 달라집니다.

속성 그래프 내보내기의 경우 [cloneClusterReplicaCount](export-params-fields.md#export-params-cloneClusterReplicaCount) 파라미터를 사용하여 데이터베이스 인스턴스 수를 구성하고, [동시성](export-params-fields.md#export-params-concurrency) 파라미터를 사용하여 작업의 효과적인 동시성 수준을 구성할 수 있습니다.

## `params` 객체
<a name="export-parameters-params"></a>

`params` 최상위 파라미터는 [`params` 최상위 JSON 객체에서 파라미터 필드 내보내기](export-params-fields.md)에 설명된 대로 내보내기 프로세스 자체를 제어하는 데 사용하는 파라미터가 포함된 JSON 객체입니다. `params` 객체의 일부 필드는 속성 그래프 내보내기에만 사용되고 일부는 RDF로 내보내는 데 사용됩니다.

## `additionalParams` 객체
<a name="export-parameters-additionalParams"></a>

`additionalParams` 최상위 파라미터는 데이터를 내보낸 후 데이터에 적용되는 작업을 제어하는 데 사용할 수 있는 파라미터를 포함하는 JSON 객체입니다. 현재 `additionalParams`는 [Neptune ML](machine-learning-additionalParams.md)의 훈련 데이터를 내보내는 데만 사용됩니다.

# `params` 최상위 JSON 객체에서 파라미터 필드 내보내기
<a name="export-params-fields"></a>

Neptune 내보내기 `params` JSON 객체를 사용하면 내보낸 데이터의 유형 및 형식을 비롯한 내보내기를 제어할 수 있습니다.

## 내보내기 파라미터 `params` 객체의 가능한 필드 목록
<a name="export-params-fields-list"></a>

`params` 객체에 나타날 수 있는 모든 최상위 필드는 다음과 같습니다. 한 객체에는 이러한 필드의 일부만 나타납니다.

### 모든 유형의 내보내기에 공통으로 사용되는 필드 목록
<a name="export-params-common-fields-list"></a>
+ [`cloneCluster`](#export-params-cloneCluster)
+ [`cloneClusterInstanceType`](#export-params-cloneClusterInstanceType)
+ [`cloneClusterReplicaCount`](#export-params-cloneClusterReplicaCount)
+ [`cloneClusterEnableAuditLogs`](#export-params-cloneClusterEnableAuditLogs)
+ [`clusterId`](#export-params-clusterId)
+ [`endpoint`](#export-params-endpoint)
+ [`endpoints`](#export-params-endpoints)
+ [`profile`](#export-params-profile)
+ [`useIamAuth`](#export-params-useIamAuth)
+ [`includeLastEventId`](#export-params-includeLastEventId)

### 속성 그래프 내보내기용 필드 목록
<a name="export-params-property-graph-fields-list"></a>
+ [`concurrency`](#export-params-concurrency)
+ [`edgeLabels`](#export-params-edgeLabels)
+ [`filter`](#export-params-filter)
+ [`filterConfigFile`](#export-params-filterConfigFile)
+ [`gremlinFilter`](#export-params-gremlinFilter)
+ [`gremlinNodeFilter`](#export-params-gremlinFilter)
+ [`gremlinEdgeFilter`](#export-params-gremlinFilter)
+ [`format`](#export-params-format-pg)
+ [`nodeLabels`](#export-params-nodeLabels)
+ [`scope`](#export-params-scope)

### RDF 내보내기용 필드 목록
<a name="export-params-RDF-fields-list"></a>
+ [`format`](#export-params-format-rdf)
+ [`rdfExportScope`](#export-params-rdfExportScope)
+ [`sparql`](#export-params-sparql)
+ [`namedGraph`](#namedgraph-params-sparql)

## 모든 유형의 내보내기에 공통으로 사용되는 필드
<a name="export-params-common-fields"></a>

### `params`의 `cloneCluster` 필드
<a name="export-params-cloneCluster"></a>

*(선택 사항)*. 기본값: `false`.

`cloneCluster` 파라미터가 `true`로 설정된 경우 내보내기 프로세스는 DB 클러스터의 고속 복제본을 사용합니다.

```
  "cloneCluster" : true
```

기본적으로 내보내기 프로세스는 `endpoint`, `endpoints` 또는 `clusterId` 파라미터를 사용하여 지정한 DB 클러스터에서 데이터를 내보냅니다. 하지만 내보내기가 진행되는 동안 DB 클러스터를 사용 중이고 데이터가 변경되는 경우 내보내기 프로세스는 내보내는 데이터의 일관성을 보장할 수 없습니다.

내보낸 데이터의 일관성을 보장하려면 `cloneCluster` 파라미터를 사용하여 DB 클러스터의 정적 복제본에서 내보내면 됩니다.

복제된 DB 클러스터는 소스 DB 클러스터와 동일한 VPC에서 생성되며 소스의 보안 그룹, 서브넷 그룹 및 IAM 데이터베이스 인증 설정을 상속합니다. 내보내기가 완료되면 Neptune은 복제된 DB 클러스터를 삭제합니다.

기본적으로 복제된 DB 클러스터는 소스 DB 클러스터의 기본 인스턴스와 동일한 인스턴스 유형의 단일 인스턴스로 구성됩니다. `cloneClusterInstanceType`을 통해 달리 지정하여 복제된 DB 클러스터에 사용되는 인스턴스 유형을 변경할 수 있습니다.

**참고**  
`cloneCluster` 옵션을 사용하지 않고 기본 DB 클러스터에서 직접 내보내는 경우 데이터를 내보내는 인스턴스의 제한 시간을 늘려야 할 수 있습니다. 대규모 데이터 세트의 경우 제한 시간을 몇 시간으로 설정해야 합니다.

### `params`의 `cloneClusterInstanceType` 필드
<a name="export-params-cloneClusterInstanceType"></a>

*(선택 사항)*.

`cloneCluster` 파라미터가 존재하고 `true`로 설정된 경우 `cloneClusterInstanceType` 파라미터를 사용하여 복제된 DB 클러스터에 사용할 인스턴스 유형을 지정할 수 있습니다.

기본적으로 복제된 DB 클러스터는 소스 DB 클러스터의 기본 인스턴스와 동일한 인스턴스 유형의 단일 인스턴스로 구성됩니다.

```
  "cloneClusterInstanceType" : "(for example, r5.12xlarge)"
```

### `params`의 `cloneClusterReplicaCount` 필드
<a name="export-params-cloneClusterReplicaCount"></a>

*(선택 사항)*.

`cloneCluster` 파라미터가 존재하고 `true`로 설정된 경우 `cloneClusterReplicaCount` 파라미터를 사용하여 복제된 DB 클러스터에 생성된 읽기 전용 복제본 인스턴스 수를 지정할 수 있습니다.

```
  "cloneClusterReplicaCount" : (for example, 3)
```

기본적으로 복제된 DB 클러스터는 단일 기본 인스턴스로 구성됩니다. `cloneClusterReplicaCount` 파라미터를 사용하면 추가로 생성해야 하는 읽기 전용 복제본 인스턴스의 수를 지정할 수 있습니다.

### `params`의 `cloneClusterEnableAuditLogs` 필드
<a name="export-params-cloneClusterEnableAuditLogs"></a>

*(선택 사항)*. 기본값: false.

`cloneCluster` 파라미터가 존재하고 true로 설정된 경우 `cloneClusterEnableAuditLogs` 파라미터를 사용하여 복제된 클러스터에서 감사 로그를 활성화하거나 비활성화할 수 있습니다.

기본적으로 감사 로깅은 비활성화되어 있습니다.

```
"cloneClusterEnableAuditLogs" : true
```

### `params`의 `clusterId` 필드
<a name="export-params-clusterId"></a>

*(선택 사항)*.

`clusterId` 파라미터는 사용할 DB 클러스터의 ID를 지정합니다.

```
  "clusterId" : "(the ID of your DB cluster)"
```

`clusterId` 파라미터를 사용하는 경우 내보내기 프로세스는 해당 DB 클러스터의 사용 가능한 모든 인스턴스를 이용하여 데이터를 추출합니다.

**참고**  
`endpoint`, `endpoints`, `clusterId` 파라미터는 함께 사용할 수 없습니다. 하나만 사용하세요.

### `params`의 `endpoint` 필드
<a name="export-params-endpoint"></a>

*(선택 사항)*.

`endpoint`를 사용하여 내보내기 프로세스가 데이터를 추출하기 위해 쿼리할 수 있는 DB 클러스터의 Neptune 인스턴스 엔드포인트를 지정합니다([엔드포인트 연결](feature-overview-endpoints.md) 참조). 이는 DNS 이름일 뿐이며, 프로토콜이나 포트는 포함되지 않습니다.

```
  "endpoint" : "(a DNS endpoint of your DB cluster)"
```

클러스터 또는 인스턴스 엔드포인트를 사용하되, 기본 리더 엔드포인트를 사용하지 마세요.

**참고**  
`endpoint`, `endpoints`, `clusterId` 파라미터는 함께 사용할 수 없습니다. 하나만 사용하세요.

### `params`의 `endpoints` 필드
<a name="export-params-endpoints"></a>

*(선택 사항)*.

`endpoints`를 사용하여 내보내기 프로세스가 데이터를 추출하기 위해 쿼리할 수 있는 DB 클러스터 엔드포인트의 JSON 배열을 지정합니다([엔드포인트 연결](feature-overview-endpoints.md) 참조). 이는 DNS 이름일 뿐이며, 프로토콜이나 포트는 포함되지 않습니다.

```
  "endpoints": [
    "(one endpoint in your DB cluster)",
    "(another endpoint in your DB cluster)",
    "(a third endpoint in your DB cluster)"
    ]
```

클러스터에 여러 인스턴스(기본 인스턴스와 하나 이상의 읽기 전용 복제본)가 있는 경우 `endpoints` 파라미터를 사용하여 해당 엔드포인트 목록에 쿼리를 분산함으로써 내보내기 성능을 개선할 수 있습니다.

**참고**  
`endpoint`, `endpoints`, `clusterId` 파라미터는 함께 사용할 수 없습니다. 하나만 사용하세요.

### `params`의 `profile` 필드
<a name="export-params-profile"></a>

*(`neptune_ml` 필드가 `additionalParams` 필드에 없는 경우 Neptune ML에 대한 훈련 데이터를 내보내는 데 필요)*.

`profile` 파라미터는 특정 워크로드에 대해 사전 구성된 파라미터 세트를 제공합니다. 현재 내보내기 프로세스는 `neptune_ml` 프로파일만 지원합니다.

Neptune ML용 훈련 데이터를 내보내는 경우 `params` 객체에 다음 파라미터를 추가합니다.

```
  "profile" : "neptune_ml"
```

### `params`의 `useIamAuth` 필드
<a name="export-params-useIamAuth"></a>

*(선택 사항)*. 기본값: `false`.

데이터를 내보낼 데이터베이스에 [IAM 인증이 활성화된 경우](iam-auth-enable.md) `true`로 설정한 `useIamAuth` 파라미터를 포함해야 합니다.

```
  "useIamAuth" : true
```

### `params`의 `includeLastEventId` 필드
<a name="export-params-includeLastEventId"></a>

`includeLastEventId`를 true로 설정하고 데이터를 내보내는 데이터베이스에 [Neptune 스트림](streams-using.md)이 활성화되어 있는 경우 내보내기 프로세스는 지정된 내보내기 위치에 `lastEventId.json` 파일을 씁니다. 이 파일은 스트림에 있는 마지막 이벤트의 `commitNum` 및 `opNum`을 포함합니다.

```
  "includeLastEventId" : true
```

내보내기 프로세스로 생성된 복제된 데이터베이스는 상위 데이터베이스의 스트림 설정을 상속합니다. 상위 데이터베이스에 스트림이 활성화되어 있는 경우 복제본에서도 마찬가지로 스트림이 활성화됩니다. 복제본에 있는 스트림의 콘텐츠는 복제본이 생성된 시점의 상위 데이터베이스 콘텐츠(동일한 이벤트 ID 포함)를 반영합니다.

## 속성 그래프 내보내기용 필드
<a name="export-params-property-graph-fields"></a>

### `params`의 `concurrency` 필드
<a name="export-params-concurrency"></a>

*(선택 사항)*. 기본값: `4`.

`concurrency` 파라미터는 내보내기 프로세스에서 사용해야 하는 병렬 쿼리 수를 지정합니다.

```
  "concurrency" : (for example, 24)
```

데이터를 내보내는 모든 인스턴스에서 vCPU 수의 2배로 동시성 수준을 설정하는 것이 좋습니다. 예를 들어, r5.xlarge 인스턴스에는 vCPU가 4개 있습니다. r5.xlarge 인스턴스 3개로 구성된 클러스터에서 내보내는 경우 동시성 수준을 24(=3x2x4)로 설정할 수 있습니다.

Neptune-Export 서비스를 사용하는 경우 동시성 수준은 [jobSize](export-parameters.md#export-parameters-jobSize) 설정에 의해 제한됩니다. 예를 들어, 소규모 작업은 동시성 수준 8을 지원합니다. `concurrency` 파라미터를 사용하여 소규모 작업에 대해 동시성 수준을 24로 지정하려고 해도 유효 수준은 8로 유지됩니다.

복제된 클러스터에서 내보내는 경우 내보내기 프로세스는 복제된 인스턴스의 크기와 작업 크기를 기반으로 적절한 동시성 수준을 계산합니다.

### `params`의 `edgeLabels` 필드
<a name="export-params-edgeLabels"></a>

*(선택 사항)*.

`edgeLabels`를 사용하여 지정한 레이블이 있는 엣지만 내보냅니다.

```
  "edgeLabels" : ["(a label)", "(another label"]
```

JSON 배열의 각 레이블은 하나의 단순한 레이블이어야 합니다.

`scope` 파라미터는 `edgeLabels` 파라미터보다 우선하므로, `scope` 값에 엣지가 포함되지 않은 경우 `edgeLabels` 파라미터는 영향을 주지 않습니다.

### `params`의 `filter` 필드
<a name="export-params-filter"></a>

*(선택 사항)*.

`filter`를 사용하여 특정 레이블이 있는 노드 및/또는 엣지만 내보내도록 지정하고 각 노드 또는 엣지에 대해 내보내는 속성을 필터링합니다.

인라인 또는 필터 구성 파일에 있는 `filter` 객체의 일반적인 구조는 다음과 같습니다.

```
  "filter" : {
    "nodes": [ (array of node label and properties objects) ],
    "edges": [ (array of edge definition an properties objects) ]
  }
```
+ **`nodes`**   –   다음과 같은 형식의 노드 및 노드 속성으로 구성된 JSON 배열을 포함합니다.

  ```
      "nodes : [
        {
          "label": "(node label)",
          "properties": [ "(a property name)", "(another property name)", ( ... ) ]
        }
      ]
  ```
  + `label`  –   노드의 속성 그래프 레이블 또는 레이블입니다.

    단일 값을 취하거나, 노드에 여러 레이블이 있는 경우 값의 배열을 취합니다.
  + `properties`  –   내보내려는 노드 속성 이름의 배열을 포함합니다.
+ **`edges`**   –   다음과 같은 형식의 엣지 정의로 구성된 JSON 배열을 포함합니다.

  ```
      "edges" : [
        {
          "label": "(edge label)",
          "properties": [ "(a property name)", "(another property name)", ( ... ) ]
        }
      ]
  ```
  + `label`   –   엣지의 속성 그래프 레이블입니다. 단일 값을 취합니다.
  + `properties`  –   내보내려는 엣지 속성 이름의 배열을 포함합니다.

### `params`의 `filterConfigFile` 필드
<a name="export-params-filterConfigFile"></a>

*(선택 사항)*.

`filterConfigFile`을 사용하여 `filter` 파라미터에 사용되는 것과 동일한 형식의 필터 구성이 포함된 JSON 파일을 지정합니다.

```
  "filterConfigFile" : "s3://(your Amazon S3 bucket)/neptune-export/(the name of the JSON file)"
```

`filterConfigFile` 파일 형식은 [필터](#export-params-filter)를 참조하세요.

### `params`의 속성 그래프 데이터에 사용되는 `format` 필드
<a name="export-params-format-pg"></a>

*(선택 사항)*. *기본*: `csv`(쉼표로 분리된 값)

`format` 파라미터는 내보낸 속성 그래프 데이터의 출력 형식을 지정합니다.

```
  "format" : (one of: csv, csvNoHeaders, json, neptuneStreamsJson)
```
+ **`csv`**   –   쉼표로 구분된 값(CSV) 형식의 출력으로, [Gremlin 로드 데이터 형식](bulk-load-tutorial-format-gremlin.md)에 따라 지정된 열 머리글 형식이 포함됩니다.
+ **`csvNoHeaders`**   –   열 머리글이 없는 CSV 형식의 데이터입니다.
+ **`json`**   –   JSON 형식의 데이터입니다.
+ **`neptuneStreamsJson`**   –   [GREMLIN\$1JSON 변경 직렬화 형식](streams-change-formats.md)을 사용하는 JSON 형식의 데이터입니다.

### `params`의 `gremlinFilter` 필드
<a name="export-params-gremlinFilter"></a>

*(선택 사항)*.

`gremlinFilter` 파라미터를 사용하면 노드와 엣지를 모두 필터링하는 데 사용되는 Gremlin 스니펫(예: `has()` 단계)을 제공할 수 있습니다.

```
  "gremlinFilter" : (a Gremlin snippet)
```

필드 이름과 문자열 값은 이스케이프 처리된 큰따옴표로 묶어야 합니다. 날짜와 시간의 경우 [datetime](best-practices-gremlin-datetime.md) 메서드를 사용할 수 있습니다.

다음 예제에서는 날짜 생성 속성 값이 2021-10-10보다 큰 노드 및 엣지만 내보냅니다.

```
  "gremlinFilter" : "has(\"created\", gt(datetime(\"2021-10-10\")))"
```

### `params`의 `gremlinNodeFilter` 필드
<a name="export-params-gremlinNodeFilter"></a>

*(선택 사항)*.

`gremlinNodeFilter` 파라미터를 사용하면 노드를 필터링하는 데 사용되는 Gremlin 스니펫(예: `has()` 단계)을 제공할 수 있습니다.

```
  "gremlinNodeFilter" : (a Gremlin snippet)
```

필드 이름과 문자열 값은 이스케이프 처리된 큰따옴표로 묶어야 합니다. 날짜와 시간의 경우 [datetime](best-practices-gremlin-datetime.md) 메서드를 사용할 수 있습니다.

다음 예제에서는 값이 `true`인 `deleted` 부울 속성을 가진 노드만 내보냅니다.

```
  "gremlinNodeFilter" : "has(\"deleted\", true)"
```

### `params`의 `gremlinEdgeFilter` 필드
<a name="export-params-gremlinEdgeFilter"></a>

*(선택 사항)*.

`gremlinEdgeFilter` 파라미터를 사용하면 엣지를 필터링하는 데 사용되는 Gremlin 스니펫(예: `has()` 단계)을 제공할 수 있습니다.

```
  "gremlinEdgeFilter" : (a Gremlin snippet)
```

필드 이름과 문자열 값은 이스케이프 처리된 큰따옴표로 묶어야 합니다. 날짜와 시간의 경우 [datetime](best-practices-gremlin-datetime.md) 메서드를 사용할 수 있습니다.

다음 예제에서는 값이 5인 `strength` 숫자 속성을 가진 엣지만 내보냅니다.

```
  "gremlinEdgeFilter" : "has(\"strength\", 5)"
```

### `params`의 `nodeLabels` 필드
<a name="export-params-nodeLabels"></a>

*(선택 사항)*.

`nodeLabels`를 사용하여 지정한 레이블이 있는 노드만 내보냅니다.

```
  "nodeLabels" : ["(a label)", "(another label"]
```

JSON 배열의 각 레이블은 하나의 단순한 레이블이어야 합니다.

`scope` 파라미터는 `nodeLabels` 파라미터보다 우선하므로, `scope` 값에 노드가 포함되지 않은 경우 `nodeLabels` 파라미터는 영향을 주지 않습니다.

### `params`의 `scope` 필드
<a name="export-params-scope"></a>

*(선택 사항)*. 기본값: `all`.

`scope` 파라미터는 노드만 내보낼지, 엣지만 내보낼지, 노드와 엣지를 모두 내보낼지를 지정합니다.

```
  "scope" : (one of: nodes, edges, or all)
```
+ `nodes`   –   노드와 해당 속성만 내보냅니다.
+ `edges`   –   엣지와 해당 속성만 내보냅니다.
+ `all`   –   노드와 엣지 및 해당 속성을 모두 내보냅니다(기본값).

## RDF 내보내기용 필드
<a name="export-params-rdf-fields"></a>

### `params`의 RDF 데이터에 사용되는 `format` 필드
<a name="export-params-format-rdf"></a>

*(선택 사항)*. *기본값*: `turtle`

`format` 파라미터는 내보낸 RDF 데이터의 출력 형식을 지정합니다.

```
  "format" : (one of: turtle, nquads, ntriples, neptuneStreamsJson)
```
+ **`turtle`**   –   Turtle 형식의 출력입니다.
+ **`nquads`**   –   열 머리글이 없는 N-Quads 형식의 데이터입니다.
+ **`ntriples`**   –   N-Triples 형식의 데이터입니다.
+ **`neptuneStreamsJson`**   –   [SPARQL NQUADS 변경 직렬화 형식](streams-change-formats.md)을 사용하는 JSON 형식의 데이터입니다.

### `params`의 `rdfExportScope` 필드
<a name="export-params-rdfExportScope"></a>

*(선택 사항)*. 기본값: `graph`.

`rdfExportScope` 파라미터는 RDF 내보내기 범위를 지정합니다.

```
  "rdfExportScope" : (one of: graph, edges, or query)
```
+ `graph`   –   모든 RDF 데이터를 내보냅니다.
+ `edges`   –   엣지를 나타내는 트리플만 내보냅니다.
+ `query`   –   `sparql` 필드를 사용하여 제공된 SPARQL 쿼리로 검색된 데이터를 내보냅니다.

### `params`의 `sparql` 필드
<a name="export-params-sparql"></a>

*(선택 사항)*.

`sparql` 파라미터를 사용하면 내보낼 데이터를 검색하는 SPARQL 쿼리를 지정할 수 있습니다.

```
  "sparql" : (a SPARQL query)
```

`sparql` 필드를 사용하여 쿼리를 제공하는 경우 `rdfExportScope` 필드도 `query`로 설정해야 합니다.

### `params`의 `namedGraph` 필드
<a name="namedgraph-params-sparql"></a>

*(선택 사항)*.

`namedGraph` 파라미터를 사용하면 IRI를 지정하여 내보내기를 이름이 지정된 단일 그래프로 제한할 수 있습니다.

```
  "namedGraph" : (Named graph IRI)
```

`namedGraph` 파라미터는 `rdfExportScope` 필드가 `graph`로 설정된 경우에만 사용할 수 있습니다.

# 내보내는 항목 필터링 예제
<a name="export-filtering-examples"></a>

다음은 내보내는 데이터를 필터링하는 방법을 보여주는 예제입니다.

## 속성 그래프 데이터 내보내기 필터링
<a name="export-property-graph-filtering-examples"></a>

### `scope`를 사용하여 엣지만 내보내는 예제
<a name="export-property-graph-filtering-scope-example"></a>

```
{
  "command": "export-pg",
  "params": {
    "endpoint": "(your Neptune endpoint DNS name)",
    "scope": "edges"
  },
  "outputS3Path": "s3://(your Amazon S3 bucket)/neptune-export"
}
```

### `nodeLabels` 및 `edgeLabels`를 사용하여 특정 레이블이 있는 노드와 엣지만 내보내는 예제
<a name="export-property-graph-filtering-labels-example"></a>

다음 예제의 `nodeLabels` 파라미터는 `Person` 레이블 또는 `Post` 레이블이 있는 노드만 내보내도록 지정합니다. `edgeLabels` 파라미터는 `likes` 레이블이 있는 엣지만 내보내도록 지정합니다.

```
{
  "command": "export-pg",
  "params": {
    "endpoint": "(your Neptune endpoint DNS name)",
    "nodeLabels": ["Person", "Post"],
    "edgeLabels": ["likes"]
  },
  "outputS3Path": "s3://(your Amazon S3 bucket)/neptune-export"
}
```

### `filter`를 사용하여 지정된 노드, 엣지 및 속성만 내보내는 예제
<a name="export-property-graph-filtering-filter-example"></a>

이 예제의 `filter` 객체는 `type`, `code`, `desc` 속성이 있는 `country` 노드를 내보내고, `dist` 속성이 있는 `route` 엣지도 내보냅니다.

```
{
  "command": "export-pg",
  "params": {
    "endpoint": "(your Neptune endpoint DNS name)",
    "filter": {
      "nodes": [
        {
          "label": "country",
          "properties": [
            "type",
            "code",
            "desc"
          ]
        }
      ],
      "edges": [
        {
          "label": "route",
          "properties": [
            "dist"
          ]
        }
      ]
    }
  },
  "outputS3Path": "s3://(your Amazon S3 bucket)/neptune-export"
}
```

### `gremlinFilter`를 사용하는 예제
<a name="export-property-graph-filtering-gremlinFilter-example"></a>

이 예제에서는 `gremlinFilter`를 사용하여 2021-10-10 이후에 생성된, 다시 말해 `created` 속성 값이 2021-10-10보다 큰 노드와 엣지만 내보냅니다.

```
{
  "command": "export-pg",
  "params": {
    "endpoint": "(your Neptune endpoint DNS name)",
    "gremlinFilter" : "has(\"created\", gt(datetime(\"2021-10-10\")))"
  },
  "outputS3Path": "s3://(your Amazon S3 bucket)/neptune-export"
}
```

### `gremlinNodeFilter`를 사용하는 예제
<a name="export-property-graph-filtering-gremlinNodeFilter-example"></a>

이 예제에서는 `gremlinNodeFilter`를 사용하여 삭제된 노드(값이 `true`인 부울 `deleted` 속성을 가진 노드)만 내보냅니다.

```
{
  "command": "export-pg",
  "params": {
    "endpoint": "(your Neptune endpoint DNS name)",
    "gremlinNodeFilter" : "has(\"deleted\", true)"
  },
  "outputS3Path": "s3://(your Amazon S3 bucket)/neptune-export"
}
```

### `gremlinEdgeFilter`를 사용하는 예제
<a name="export-property-graph-filtering-gremlinEdgeFilter-example"></a>

이 예제에서는 `gremlinEdgeFilter `를 사용하여 값이 5인 `strength` 숫자 속성을 가진 엣지만 내보냅니다.

```
{
  "command": "export-pg",
  "params": {
    "endpoint": "(your Neptune endpoint DNS name)",
    "gremlinEdgeFilter" : "has(\"strength\", 5)"
  },
  "outputS3Path": "s3://(your Amazon S3 bucket)/neptune-export"
}
```

### `filter`, `gremlinNodeFilter`, `nodeLabels`, `edgeLabels`, `scope` 결합
<a name="export-property-graph-filtering-combo-example"></a>

이 예제의 `filter` 객체는 다음을 내보냅니다.
+ `type`, `code`, `desc` 속성이 있는 `country` 노드
+ `code`, `icao`, `runways` 속성이 있는 `airport` 노드
+ `dist` 속성이 있는 `route` 엣지

`gremlinNodeFilter` 파라미터는 값이 A로 시작하는 `code` 속성을 가진 노드만 내보내도록 노드를 필터링합니다.

`nodeLabels` 및 `edgeLabels` 파라미터는 출력을 추가로 제한하여 `airport` 노드와 `route` 엣지만 내보내도록 합니다.

마지막으로 이 `scope` 파라미터는 내보내기에서 엣지를 제거하므로, 출력에는 지정된 `airport` 노드만 남습니다.

```
{
  "command": "export-pg",
  "params": {
    "endpoint": "(your Neptune endpoint DNS name)",
    "filter": {
      "nodes": [
        {
          "label": "airport",
          "properties": [
            "code",
            "icao",
            "runways"
          ]
        },
        {
          "label": "country",
          "properties": [
            "type",
            "code",
            "desc"
          ]
        }
      ],
      "edges": [
        {
          "label": "route",
          "properties": [
            "dist"
          ]
        }
      ]
    },
    "gremlinNodeFilter": "has(\"code\", startingWith(\"A\"))",
    "nodeLabels": [
      "airport"
    ],
    "edgeLabels": [
      "route"
    ],
    "scope": "nodes"
  },
  "outputS3Path": "s3://(your Amazon S3 bucket)/neptune-export"
}
```

## RDF 데이터 내보내기 필터링
<a name="export-RDF-filtering-examples"></a>

### `rdfExportScope` 및 `sparql`을 사용하여 특정 엣지 내보내기
<a name="export-RDF-filtering-rdfExportScope-sparql-example"></a>

이 예제에서는 조건자가 <http://kelvinlawrence.net/air-routes/objectProperty/route>이고 객체가 리터럴이 아닌 트리플을 내보냅니다.

```
{
  "command": "export-rdf",
  "params": {
    "endpoint": "(your Neptune endpoint DNS name)",
    "rdfExportScope": "query",
    "sparql": "CONSTRUCT { ?s <http://kelvinlawrence.net/air-routes/objectProperty/route> ?o } WHERE { ?s ?p ?o . FILTER(!isLiteral(?o)) }"
  },
  "outputS3Path": "s3://(your Amazon S3 bucket)/neptune-export"
}
```

### `namedGraph`를 사용하여 명명된 단일 그래프 내보내기
<a name="export-RDF-filtering-rdfExportScope-sparql-namedGraph-example"></a>

이 예제에서는 명명된 그래프 <http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph>에 속하는 트리플을 내보냅니다.

```
{
  "command": "export-rdf",
  "params": {
    "endpoint": "(your Neptune endpoint DNS name)",
    "rdfExportScope": "graph",
    "namedGraph": "http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph"
  },
  "outputS3Path": "s3://(your Amazon S3 bucket)/neptune-export"
}
```

# Neptune 내보내기 프로세스 문제 해결
<a name="export-troubleshooting"></a>

Amazon Neptune 내보내기 프로세스는 Neptune 데이터를 내보내는 데 필요한 컴퓨팅 및 스토리지 리소스를 프로비저닝하는 데 [AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/)를 사용합니다. 내보내기가 실행 중일 때 `logs` 필드의 링크를 사용하여 내보내기 작업에 대한 CloudWatch 로그에 액세스할 수 있습니다.

하지만 내보내기를 수행하는 AWS Batch 작업에 대한 CloudWatch 로그는 AWS Batch 작업이 실행 중일 때만 사용할 수 있습니다. Neptune 내보내기에서 내보내기가 보류 상태라고 보고하는 경우 CloudWatch 로그에 액세스할 수 있는 로그 링크가 없습니다. 내보내기 작업이 몇 분 이상 `pending` 상태를 유지하는 경우 기본 AWS Batch 리소스를 프로비저닝하는 데 문제가 있을 수 있습니다.

내보내기 작업이 보류 상태를 벗어나면 다음과 같이 상태를 확인할 수 있습니다.

**AWS Batch 작업의 상태를 확인하려면**

1. [https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/)에서 AWS Batch 콘솔을 엽니다.

1. neptune-export 작업 대기열을 선택합니다.

1. 내보내기를 시작할 때 이름이 Neptune 내보내기에서 반환한 `jobName`과 일치하는 작업을 찾습니다.

![\[상태 확인 시 AWS Batch 콘솔 스크린샷\]](http://docs.aws.amazon.com/ko_kr/neptune/latest/userguide/images/batch-console-checking-export.png)


작업이 계속 `RUNNABLE` 상태로 유지되는 경우 네트워킹 또는 보안 문제로 인해 컨테이너 인스턴스가 기본 Amazon Elastic Container Service(Amazon ECS) 클러스터에 조인하지 못하기 때문일 수 있습니다. [이 지원 문서](https://aws.amazon.com/premiumsupport/knowledge-center/batch-job-stuck-runnable-status/)에서 컴퓨팅 환경의 네트워크 및 보안 설정을 확인하는 방법에 대한 섹션을 참조하세요.

Auto Scaling에 문제가 있는지도 확인해볼 수 있습니다.

**AWS Batch 컴퓨팅 환경에 대한 Amazon EC2 Auto Scaling 그룹을 확인하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. neptune-export 컴퓨팅 환경에 대한 **Auto Scaling** 그룹을 선택합니다.

1. **활동 탭**을 열고 활동 기록에서 실패한 이벤트가 있는지 확인합니다.

![\[Auto Scaling 문제 확인 시 Amazon EC2 콘솔의 스크린샷\]](http://docs.aws.amazon.com/ko_kr/neptune/latest/userguide/images/ec2-console-checking-auto-scaling.png)


## Neptune 내보내기 일반 오류
<a name="export-troubleshooting-errors"></a>

### `org.eclipse.rdf4j.query.QueryEvaluationException: Tag mismatch!`
<a name="export-troubleshooting-errors-tag-mismatch"></a>

`export-rdf` 작업이 `Tag mismatch!` `QueryEvaluationException` 오류와 함께 정기적으로 실패하는 경우 Neptune Export에서 사용하는 대규모 장기 실행 쿼리를 기준으로 볼 때 Neptune 인스턴스의 크기가 작은 것입니다.

다음과 같이 대규모 Neptune 인스턴스로 확장하거나 대규모 복제 클러스터에서 내보내도록 작업을 구성하면 이 오류가 발생하지 않도록 할 수 있습니다.

```
'{
  "command": "export-rdf",
  "outputS3Path": "s3://(your Amazon S3 bucket)/neptune-export",
  "params": {
    "endpoint": "(your Neptune endpoint DNS name)",
    "cloneCluster": True,
    "cloneClusterInstanceType" : "r5.24xlarge"
  }
}'
```

# Amazon S3로 Gremlin 쿼리 결과 내보내기
<a name="exporting-gremlin"></a>

 엔진 릴리스 1.4.3.0부터 Amazon Neptune은 Gremlin 쿼리 결과를 Amazon S3로 직접 내보내는 기능을 지원합니다. 이 기능을 사용하면 쿼리 응답으로 반환하는 대신 Amazon S3 버킷으로 내보내 대규모 쿼리 결과를 효율적으로 처리할 수 있습니다.

 쿼리 결과를 Amazon S3로 내보내려면 Gremlin 쿼리의 마지막 단계로 `call()` 단계를 사용하며, 서비스 이름으로 `neptune.query.exportToS3`를 지정합니다. [바이트코드를 사용하는 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'
  ])
```

**Parameters**
+  `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 권한이 있어야 합니다. 이렇게 하지 않으면 '클러스터에 S3 내보내기에 대해 IAM 인증이 활성화되어 있어야 합니다'라는 400개의 잘못된 요청 오류가 발생합니다.
+  대상 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 수명 주기 관리 업데이트 – 멀티파트 업로드 및 삭제 마커 지원](https://aws.amazon.com/blogs/aws/s3-lifecycle-management-update-support-for-multipart-uploads-and-delete-markers/)을 참조하세요.  
![\[수명 주기 규칙 작업을 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/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 수명 주기 관리 업데이트 – 멀티파트 업로드 및 삭제 마커 지원](https://aws.amazon.com/blogs/aws/s3-lifecycle-management-update-support-for-multipart-uploads-and-delete-markers/)을 참조하세요.  
![\[수명 주기 규칙 작업과 만료된 객체 삭제 마커를 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/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)를 확인하여 쿼리가 현재 실행 중인지 확인할 수 있습니다. 클라이언트가 응답을 받지 못한 한 쿼리는 실행 중인 것으로 간주됩니다.

# Gremlin Amazon S3 내보내기 기능에 대한 액세스 권한 부여
<a name="granting-access-gremlin"></a>

 **필수 IAM 정책** 

1.  **Neptune 쿼리 읽기 액세스** 

   ```
   {
     "Sid": "NeptuneQueryRead",
     "Effect": "Allow",
     "Action": ["neptune-db:Read*"],
     "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-ABCD12/*"
   }
   ```

    **필요한 이유:** 이 권한은 내보내질 Gremlin 쿼리를 실행하는 데 필요한 Neptune 데이터베이스의 데이터 읽기를 허용합니다. 이전 예제에서는 읽기 쿼리를 허용합니다. 읽기/쓰기 쿼리의 경우 쓰기/삭제 권한이 필요합니다.

1.  **Amazon S3 내보내기 권한** 

   ```
   {
     "Sid": "NeptuneS3Export",
     "Effect": "Allow",
     "Action": [
       "s3:ListBucket",
       "s3:PutObject",
       "s3:AbortMultipartUpload",
       "s3:GetBucketPublicAccessBlock"
     ],
     "Resource": "arn:aws:s3:::neptune-export-bucket/*"
   }
   ```

    **각 권한이 필요한 이유:** 
   +  `s3:ListBucket`: 버킷 존재를 확인하고 콘텐츠를 나열하는 데 필요합니다.
   +  `s3:PutObject`: 내보낸 데이터를 Amazon S3에 쓰는 데 필요합니다.
   +  `s3:AbortMultipartUpload`: 내보내기가 실패할 경우 불완전 멀티파트 업로드를 정리하는 데 필요합니다.
   +  `s3:GetBucketPublicAccessBlock`: 데이터를 내보내기 전에 버킷이 퍼블릭 버킷이 아닌지 확인하기 위한 보안 조치로 필요합니다.

1.  **AWS KMSpermissios** - 선택 사항입니다. 사용자 지정 AWS KMS 암호화를 사용하는 경우에만 필요합니다.

   ```
   {
     "Sid": "NeptuneS3ExportKMS",
     "Effect": "Allow",
     "Action": [
       "kms:Decrypt",
       "kms:GenerateDataKey",
       "kms:DescribeKey"
     ],
     "Resource": "arn:aws:kms:<REGION>:<AWS_ACCOUNT_ID>:key/mrk-48971c37"
       "Condition": {
       "StringEquals": {
         "kms:ViaService": [
           "s3.<REGION>.amazonaws.com",
           "rds.<REGION>.amazonaws.com"
         ]
       }
     }
   }
   ```

    **각 권한이 필요한 이유:** 
   +  `kms:Decrypt`: 데이터 암호화를 위한 AWS KMS키를 복호화하는 데 필요합니다.
   +  `kms:GenerateDataKey`: 내보낸 데이터를 암호화하기 위한 데이터 키를 생성하는 데 필요합니다.
   +  `kms:DescribeKey`: AWS KMS키에 대한 정보를 확인하고 검색하는 데 필요합니다.
   +  `kms:ViaService`:이 역할이 다른 AWS서비스에 키를 사용할 수 없도록 하여 보안을 강화합니다.

**중요 사전 조건**
+  **IAM 인증:** 이러한 권한을 적용하려면 Neptune 클러스터에서 활성화해야 합니다.
+  **VPC 엔드포인트: **) 
  +  Neptune이 Amazon S3와 통신할 수 있으려면 Amazon S3용 게이트웨이 유형 VPC 엔드포인트가 필요합니다.
  +  쿼리에서 사용자 지정 AWS KMS암호화를 사용하려면 Neptune이 통신할 수 있도록 하려면에 대한 인터페이스 유형 VPC 엔드포인트AWS KMS가 필요합니다AWS KMS.
+  **Amazon S3 버킷 구성:** 
  +  퍼블릭이 아니어야 합니다.
  +  불완전 멀티파트 업로드를 정리하는 수명 주기 규칙이 있어야 합니다.
  +  새 객체를 자동으로 암호화합니다.

 이러한 권한 및 사전 조건은 적절한 액세스 제어 및 데이터 보호 조치를 유지하면서 Gremlin 쿼리 결과의 안전하고 안정적인 내보내기를 보장합니다.