

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

# 예제: Neptune DB 인스턴스에 데이터 로드
<a name="bulk-load-data"></a>

이 예는 데이터를 Amazon Neptune으로 로드하는 방법을 보여줍니다. 달리 명시되지 않는 한, Neptune DB 인스턴스와 동일한 Amazon Virtual Private Cloud(VPC)에 있는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 다음 단계를 수행해야 합니다.

## 데이터 로딩 예제의 사전 조건
<a name="bulk-load-tutorial-prereqs"></a>

시작하기 전에 다음을 완비해야 합니다.
+ Neptune DB 인스턴스.

  Neptune DB 인스턴스 실행에 대한 자세한 내용은 [Amazon Neptune 클러스터 생성](get-started-create-cluster.md) 섹션을 참조하세요.
+ 데이터 파일을 넣을 수 있는 Amazon Simple Storage Service(S3) 버킷.

  기존 버킷을 사용해도 됩니다. S3 버킷이 없는 경우 *[Amazon S3 시작 안내서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)*의 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html)을 참조하세요.
+ Neptune 로더가 지원하는 형식 중 하나로 로드할 그래프 데이터:

  Gemlin을 사용하여 그래프를 쿼리하는 경우, [Gremlin 로드 데이터 형식](bulk-load-tutorial-format-gremlin.md)에서 설명한 대로 Neptune은 쉼표로 구분된 값(`CSV`) 형식으로 데이터를 로드할 수 있습니다.

  openCypher를 사용하여 그래프를 쿼리하는 경우 Neptune은 [openCypher 데이터의 로드 형식](bulk-load-tutorial-format-opencypher.md)에 설명된 대로 openCypher 전용 `CSV` 형식으로 데이터를 로드할 수도 있습니다.

  SPARQL을 사용하는 경우, [RDF 로드 데이터 형식](bulk-load-tutorial-format-rdf.md)에 설명된 대로 Neptune에서는 여러 RDF 형식으로 데이터를 로드할 수 있습니다.
+ S3 버킷의 데이터 파일에 액세스하도록 허용하는 IAM 정책이 있다고 가정하는 Neptune DB 인스턴스의 IAM 역할. 이 정책은 읽기 및 목록 권한을 부여해야 합니다.

   Amazon S3에 대한 액세스 권한이 있는 역할을 생성하고 이를 Neptune 클러스터와 연결하는 방법은 [사전 조건: IAM 역할 및 Amazon S3 액세스](bulk-load-tutorial-IAM.md) 섹션을 참조하세요.
**참고**  
Neptune `Load` API는 데이터 파일에 대한 읽기 전용 액세스 권한이 있어야 합니다. IAM 정책에서 전체 버킷에 대한 액세스 또는 쓰기 액세스 권한을 허용할 필요는 없습니다.
+ Amazon S3 VPC 엔드포인트. 자세한 내용은 [Amazon S3 VPC 엔드포인트 생성](#bulk-load-prereqs-s3)(을)를 참조하세요.

### Amazon S3 VPC 엔드포인트 생성
<a name="bulk-load-prereqs-s3"></a>

Neptune 로더에는 Amazon S3용 VPC 엔드포인트가 필요합니다.

**Amazon S3에 대한 액세스를 설정하려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) Amazon VPC 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **엔드포인트**를 선택합니다.

1. **엔드포인트 생성**을 선택합니다.

1. **서비스 이름** `com.amazonaws.{{region}}.s3`을 선택합니다.
**참고**  
여기의 리전이 올바르지 않은 경우 콘솔 리전이 올바른지 확인하십시오.

1. Neptune DB 인스턴스가 포함된 VPC를 선택합니다.

1. 클러스터와 관련된 서브넷과 연결된 라우팅 테이블 옆에 있는 확인란을 선택합니다. 라우팅 테이블이 하나만 있는 경우에는 해당 확인란을 선택해야 합니다.

1. **엔드포인트 생성**을 선택합니다.

엔드포인트 생성에 대한 자세한 내용은 *Amazon VPC 사용 설명서*의 [VPC 엔드포인트](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html#create-vpc-endpoint) 섹션을 참조하세요. VPC 엔드포인트 제한에 대한 자세한 내용은 [Amazon S3용 VPC 엔드포인트](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html)를 참조하세요.

**데이터를 Neptune DB 인스턴스로 로드하려면**

1. 데이터 파일을 Amazon S3 버킷에 복사합니다. S3 버킷은 데이터를 로드하는 클러스터와 동일한 AWS 리전에 있어야 합니다.

   다음 AWS CLI 명령을 사용하여 파일을 버킷에 복사할 수 있습니다.
**참고**  
이 명령을 Amazon EC2 인스턴스에서 실행할 필요는 없습니다.

   ```
   aws s3 cp {{data-file-name}} s3://{{bucket-name}}/{{object-key-name}}
   ```
**참고**  
Amazon S3에서 **객체 키 이름**은 파일 이름을 포함한 파일의 전체 경로입니다.  
*예:* 명령 `aws s3 cp datafile.txt s3://examplebucket/mydirectory/datafile.txt`에서 객체 키 이름은 **`mydirectory/datafile.txt`**입니다.

   또는 AWS Management Console 를 사용하여 S3 버킷에 파일을 업로드할 수 있습니다. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 Amazon S3 콘솔을 열고 버킷을 선택합니다. 왼쪽 상단 모서리에서 **업로드**를 선택하여 파일을 업로드합니다.

1. 명령줄 창에서 다음을 입력하여 엔드포인트, Amazon S3 경로, 형식 및 IAM 역할 ARN에 대한 올바른 값을 사용하여 Neptune 로더를 실행합니다.

   `format` 파라미터는 Gremlin의 경우 `csv`, openCypher의 경우 `opencypher`, RDF의 경우 `ntriples`, `nquads`, `turtle`, `rdfxml` 중 하나일 수 있습니다. 기타 파라미터에 대한 자세한 내용은 [Neptune 로더 명령](load-api-reference-load.md) 단원을 참조하십시오.

   사용자의 Neptune DB 인스턴스 호스트 이름을 찾는 방법은 [Amazon Neptune 엔드포인트에 연결](feature-overview-endpoints.md) 섹션을 참조하세요.

   리전 파라미터는 클러스터 및 S3 버킷의 리전과 일치해야 합니다.

Amazon Neptune은 다음 AWS 리전에서 사용할 수 있습니다.
   + 미국 동부(버지니아 북부):   `us-east-1`
   + 미국 동부(오하이오):   `us-east-2`
   + 미국 서부(캘리포니아 북부):   `us-west-1`
   + 미국 서부(오레곤):   `us-west-2`
   + 캐나다(중부):   `ca-central-1`
   + 캐나다 서부(캘거리): `ca-west-1`
   + 남아메리카(상파울루):   `sa-east-1`
   + 유럽(스톡홀름):   `eu-north-1`
   + 유럽(스페인): `eu-south-2`
   + 유럽(아일랜드):   `eu-west-1`
   + 유럽(런던):   `eu-west-2`
   + 유럽(파리):   `eu-west-3`
   + 유럽(프랑크푸르트):   `eu-central-1`
   + 중동(바레인):   `me-south-1`
   + 중동(UAE):   `me-central-1`
   + 이스라엘(텔아비브):   `il-central-1`
   + 아프리카(케이프타운):   `af-south-1`
   + 아시아 태평양(홍콩):   `ap-east-1`
   + 아시아 태평양(도쿄):   `ap-northeast-1`
   + 아시아 태평양(서울):   `ap-northeast-2`
   + 아시아 태평양(오사카): `ap-northeast-3`
   + 아시아 태평양(싱가포르):   `ap-southeast-1`
   + 아시아 태평양(시드니):   `ap-southeast-2`
   + 아시아 태평양(자카르타): `ap-southeast-3`
   + 아시아 태평양(멜버른): `ap-southeast-4`
   + 아시아 태평양(말레이시아): `ap-southeast-5`
   + 아시아 태평양(뭄바이):   `ap-south-1`
   + 아시아 태평양(하이데라바드):   `ap-south-2`
   + 중국(베이징):   `cn-north-1`
   + 중국(닝샤):   `cn-northwest-1`
   + AWS GovCloud(미국 서부):   `us-gov-west-1`
   + AWS GovCloud(미국 동부):   `us-gov-east-1`

------
#### [ AWS CLI ]

   ```
   aws neptunedata start-loader-job \
     --endpoint-url https://{{your-neptune-endpoint}}:{{port}} \
     --source "s3://{{bucket-name}}/{{object-key-name}}" \
     --format "{{format}}" \
     --iam-role-arn "arn:aws:iam::{{account-id}}:role/{{role-name}}" \
     --s3-bucket-region "{{region}}" \
     --no-fail-on-error \
     --parallelism "MEDIUM" \
     --no-update-single-cardinality-properties \
     --queue-request \
     --dependencies "{{load_A_id}}" "{{load_B_id}}"
   ```

   자세한 내용은 AWS CLI 명령 참조의 [start-loader-job](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/start-loader-job.html)을 참조하세요.

------
#### [ SDK ]

   ```
   import boto3
   from botocore.config import Config
   
   client = boto3.client(
       'neptunedata',
       endpoint_url='https://{{your-neptune-endpoint}}:{{port}}',
       config=Config(read_timeout=None, retries={'total_max_attempts': 1})
   )
   
   response = client.start_loader_job(
       source='s3://{{bucket-name}}/{{object-key-name}}',
       format='{{format}}',
       iamRoleArn='arn:aws:iam::{{account-id}}:role/{{role-name}}',
       s3BucketRegion='{{region}}',
       failOnError=False,
       parallelism='MEDIUM',
       updateSingleCardinalityProperties=False,
       queueRequest=True,
       dependencies=['{{load_A_id}}', '{{load_B_id}}']
   )
   
   print(response)
   ```

------
#### [ awscurl ]

   ```
   awscurl https://{{your-neptune-endpoint}}:{{port}}/loader \
     --region {{us-east-1}} \
     --service neptune-db \
     -X POST \
     -H 'Content-Type: application/json' \
     -d '{
           "source" : "s3://{{bucket-name}}/{{object-key-name}}",
           "format" : "{{format}}",
           "iamRoleArn" : "arn:aws:iam::{{account-id}}:role/{{role-name}}",
           "region" : "{{region}}",
           "failOnError" : "FALSE",
           "parallelism" : "MEDIUM",
           "updateSingleCardinalityProperties" : "FALSE",
           "queueRequest" : "TRUE",
           "dependencies" : ["{{load_A_id}}", "{{load_B_id}}"]
         }'
   ```

**참고**  
이 예제에서는 자격 AWS 증명이 환경에 구성되어 있다고 가정합니다. {{us-east-1}}을 Neptune 클러스터의 리전으로 바꿉니다.

------
#### [ curl ]

   ```
   curl -X POST https://{{your-neptune-endpoint}}:{{port}}/loader \
     -H 'Content-Type: application/json' \
     -d '{
           "source" : "s3://{{bucket-name}}/{{object-key-name}}",
           "format" : "{{format}}",
           "iamRoleArn" : "arn:aws:iam::{{account-id}}:role/{{role-name}}",
           "region" : "{{region}}",
           "failOnError" : "FALSE",
           "parallelism" : "MEDIUM",
           "updateSingleCardinalityProperties" : "FALSE",
           "queueRequest" : "TRUE",
           "dependencies" : ["{{load_A_id}}", "{{load_B_id}}"]
         }'
   ```

------

   IAM 역할을 생성하고 Neptune 클러스터와 연결하는 방법은 [사전 조건: IAM 역할 및 Amazon S3 액세스](bulk-load-tutorial-IAM.md) 섹션을 참조하세요.
**참고**  
로드 요청 파라미터에 대한 자세한 내용은 [Neptune 로더 요청 파라미터](load-api-reference-load.md#load-api-reference-load-parameters)를 참조하십시오. 간략 설명:  
`source` 파라미터는 단일 파일 또는 폴더를 가리키는 Amazon S3 URI를 허용합니다. 폴더를 지정하면 Neptune이 폴더에서 모든 데이터 파일을 로드합니다.  
폴더에는 여러 버텍스 파일 및 여러 엣지 파일이 포함될 수 있습니다.  
URI 형식은 다음 중 하나가 될 수 있습니다.  
`s3://{{bucket_name}}/{{object-key-name}}`
`https://s3.amazonaws.com/{{bucket_name}}/{{object-key-name}}`
`https://s3-us-east-1.amazonaws.com/{{bucket_name}}/{{object-key-name}}`
`format` 파라미터는 다음 값 중 하나일 수 있습니다.  
Gremlin 속성 그래프용 Gremlin CSV 형식(`csv`)
openCypher 속성 그래프용 openCypher CSV 형식(`opencypher`)
RDF / SPARQL용 N -Triple(`ntriples`) 형식
RDF / SPARQL용 N-Quad(`nquads`) 형식
RDF / SPARQL용 RDF/XML(`rdfxml`) 형식
RDF/SPARQL용 Turtle(`turtle`) 형식
선택적 `parallelism` 파라미터를 통해 벌크 로드 프로세스에 사용되는 스레드 수를 제한할 수 있습니다. 이 파라미터는 `LOW`, `MEDIUM`, `HIGH` 또는 `OVERSUBSCRIBE`로 설정할 수 있습니다.  
`updateSingleCardinalityProperties`를 `"FALSE"`로 설정하면 에지 또는 단일 카디널리티 버텍스 속성에 대해 로드되는 소스 파일에 둘 이상의 값이 제공된 경우 로더는 오류를 반환합니다.  
`queueRequest`를 `"TRUE"`로 설정하면 로드 작업이 이미 실행 중인 경우 로드 요청이 대기열에 배치됩니다.  
`dependencies` 파라미터는 로드 요청의 실행이 대기열에 이미 배치된 하나 이상의 로드 작업이 성공적으로 완료되는 것에 의존하게 합니다.

1. Neptune 로더는 상태를 확인하거나 로드 프로세스를 취소할 수 있는 작업 `id`를 반환합니다. 예를 들면 다음과 같습니다.

   ```
   {
       "status" : "200 OK",
       "payload" : {
           "loadId" : "{{ef478d76-d9da-4d94-8ff1-08d9d4863aa5}}"
       }
   }
   ```

1. **3단계**에서 `loadId`와 함께 로그 상태를 가져오려면 다음을 입력하세요.

------
#### [ AWS CLI ]

   ```
   aws neptunedata get-loader-job-status \
     --endpoint-url https://{{your-neptune-endpoint}}:{{port}} \
     --load-id {{ef478d76-d9da-4d94-8ff1-08d9d4863aa5}}
   ```

   자세한 내용은 AWS CLI 명령 참조의 [get-loader-job-status](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/get-loader-job-status.html)를 참조하세요.

------
#### [ SDK ]

   ```
   import boto3
   from botocore.config import Config
   
   client = boto3.client(
       'neptunedata',
       endpoint_url='https://{{your-neptune-endpoint}}:{{port}}',
       config=Config(read_timeout=None, retries={'total_max_attempts': 1})
   )
   
   response = client.get_loader_job_status(
       loadId='{{ef478d76-d9da-4d94-8ff1-08d9d4863aa5}}'
   )
   
   print(response)
   ```

------
#### [ awscurl ]

   ```
   awscurl 'https://{{your-neptune-endpoint}}:{{port}}/loader/{{ef478d76-d9da-4d94-8ff1-08d9d4863aa5}}' \
     --region {{us-east-1}} \
     --service neptune-db
   ```

**참고**  
이 예제에서는 자격 AWS 증명이 환경에 구성되어 있다고 가정합니다. {{us-east-1}}을 Neptune 클러스터의 리전으로 바꿉니다.

------
#### [ curl ]

   ```
   curl -G 'https://{{your-neptune-endpoint}}:{{port}}/loader/{{ef478d76-d9da-4d94-8ff1-08d9d4863aa5}}'
   ```

------

   로드 상태에 오류가 있는 경우에는 보다 자세한 상태 및 오류 목록을 요청할 수 있습니다. 자세한 내용과 예제는 [Neptune 로더 Get-Status API](load-api-reference-status.md) 섹션을 참조하세요.

1. (선택 사항) `Load` 작업을 취소합니다.

   **3단계**에서 작업 `Delete`와 함께 로더 작업을 `id`하려면 다음을 입력하세요.

------
#### [ AWS CLI ]

   ```
   aws neptunedata cancel-loader-job \
     --endpoint-url https://{{your-neptune-endpoint}}:{{port}} \
     --load-id {{ef478d76-d9da-4d94-8ff1-08d9d4863aa5}}
   ```

   자세한 내용은 AWS CLI 명령 참조의 [cancel-loader-job](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/cancel-loader-job.html)을 참조하세요.

------
#### [ SDK ]

   ```
   import boto3
   from botocore.config import Config
   
   client = boto3.client(
       'neptunedata',
       endpoint_url='https://{{your-neptune-endpoint}}:{{port}}',
       config=Config(read_timeout=None, retries={'total_max_attempts': 1})
   )
   
   response = client.cancel_loader_job(
       loadId='{{ef478d76-d9da-4d94-8ff1-08d9d4863aa5}}'
   )
   
   print(response)
   ```

------
#### [ awscurl ]

   ```
   awscurl 'https://{{your-neptune-endpoint}}:{{port}}/loader/{{ef478d76-d9da-4d94-8ff1-08d9d4863aa5}}' \
     --region {{us-east-1}} \
     --service neptune-db \
     -X DELETE
   ```

**참고**  
이 예제에서는 자격 AWS 증명이 환경에 구성되어 있다고 가정합니다. {{us-east-1}}을 Neptune 클러스터의 리전으로 바꿉니다.

------
#### [ curl ]

   ```
   curl -X DELETE 'https://{{your-neptune-endpoint}}:{{port}}/loader/{{ef478d76-d9da-4d94-8ff1-08d9d4863aa5}}'
   ```

------

   `DELETE` 명령은 취소 성공 시 HTTP 코드 `200 OK`를 반환합니다.

   로드가 완료된 로드 작업에서 파일의 데이터는 롤백되지 않습니다. 데이터는 Neptune DB 인스턴스에 남아 있습니다.