NeptuneにVertex(頂点)、Edge(辺)のデータをいれる手段の一つとしてS3を経由したバルクロードの方法があります。
公式ドキュメントにもある通り、csvを用意してIAMを設定すればほぼほぼ完了です。
IAMの用意
マネジメントコンソールから「クラスターのアクション」から「IAMロールの管理」を選択すると下記の画面が現れます。
ここに、設定したIAMロールを紐付ければオッケーです。反映まで少し時間がかかります。
設定方法ですがここにある通り、
- AmazonS3ReadOnlyAccessを使う
- 信頼関係の編集を行う
以上の2点を行えばオッケーです。最終的に以下のようになると思います。
データの用意
ここを参考にためしてみます。
ヘッダーとして、下記が最低限定義できれていれば、ほぼほぼオッケーでしょう。
ちょうど、私は駅すぱあとを提供する会社に勤めていますので、駅データを抽出してCSV化してみました。
作成したcsvファイルをS3に配置します。
バルクロード
個人的都合でNeptuneをPrivate Subnet内に配置しているため、アクセスが許可されたEC2からバルクロードしたみたいと思います。
以下の2点がちゃんとできていれば、ほぼほぼオッケーです。
- curlコマンドが使える
- セキュリティグループが適切に設定されている
EC2上で下記のコマンドを実行します。
curl -X POST \
-H 'Content-Type: application/json' \
https://あなたのクラスターエンドポイント:8182/loader -d '
{
"source" : "s3://csvを配置したバケット/作成した.csv",
"format" : "csv",
"iamRoleArn" : "さっきつくったIAMロール",
"region" : "ap-northeast-1",
"failOnError" : "FALSE"
}'
そうすると下記のレスポンスが帰ってきます。
{
"status" : "200 OK",
"payload" : {
"loadId" : "50b6ccc6-de0b-4830-ba15-*********"
}
}
これは、挿入・更新が成功したというものではなく、どうやら処理を受け付けたというレスポンスっぽいです。
また、挿入後すぐに別のを挿入しようとするとエラーが帰ってきます。
(基本的に1タスクしか受け付けない?)
ロードとCPU使用率の関係
Neptuneのr4.largeインスタンスを使ってたので、ロード件数に対してどれくらいCPUを使うのかチェックしてみます。
結果としては、下記のようになりました。
ただ、これを試す前に20万件を一気にバルクロードしたらCPUが100%に張り付いたまま帰ってこない事象が発生しました。(バグか?)
ベスト・プラクティスにあるように、ロード時には一旦強いインスタンスにスケールアップするのがベターですね。