【AWS】わかりやすい！グラフデータベースNeptuneの構築

### はじめに
グラフデータベースNeptuneの構築手順を補足しながら解説します。
さっそくやってみましょう！

### Neptune構築

Amazon Neptuneコンソールを開きます。
左メニューのクラスターをクリックして、データベースの作成をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/8449cc7c-3614-d81c-533d-65010c992761.png)


#### タイプの選択
* Provisioned
設定したリソースに基づいて料金が発生します。予測可能なトラフィックの場合に適しています。
* Serverless
使用したリソースに基づいて料金が発生します。トラフィックが予測できない場合や急激に変動する場合に適しています。

お試しのため、Serverlessを選択します。
エンジンバージョンはデフォルトで選択されているNeptune 1.3.2.1.R1とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/4636f7a9-7458-7daa-1506-4281d390c96a.png)

#### テンプレート
* 本番稼働用
高い可用性と、高速で安定したパフォーマンスのためには、デフォルト値を使用します。
* 開発とテスト
このインスタンスは本番稼働環境ではない開発で使用します。

お試しのため、開発とテストを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/51991c70-b492-a19e-ddf0-e9284e6d3919.png)

#### 名前
* DBクラスター名
* DBインスタンス名

DBクラスターは複数のDBインスタンスを含むグループ全体を指し、DBインスタンスはそのグループ内の個々のデータベースの実行単位を指します。
それぞれのインスタンスはクラスターの一部として連携し、高可用性やスケーラビリティを実現しています。

それぞれわかりやすい名前を付けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/4b5c8c74-32ee-9e45-bfe7-f0d73f21d16b.png)

#### クラスターストレージ設定
* Neptune Standard
一般的なワークロードに最適化されており、バランスの取れたパフォーマンスを提供します。読み込みと書き込みの負荷が均等である場合に適しています。
* Neptune I/O最適化
高いI/O性能が必要なワークロードに最適化されています。特に、頻繁な読み込みや書き込みが発生する場合に効果的です。

お試しのため、Neptune Standardを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/2a95daee-11bc-dbe4-0e30-3d24d0bed18b.png)

#### キャパシティセクション ※タイプの選択でServerlessを選択した場合※
* Neptuneの最小キャパシティユニット
Neptune サーバーレス DB クラスターの最小スケーリングを構成します。1～128 （0.5刻み）で指定可能。
* Neptuneの最大キャパシティユニット
Neptune サーバーレス DB クラスターの最大スケーリングを構成します。16～128 （0.5刻み）で指定可能。

お試しのため、1～16を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/156f8a30-f72b-f15c-410c-24e4cc63ec2e.png)

:::note info
#### インスタンスオプション ※タイプの選択でProvisionedを選択した場合※
* Neptuneの最小キャパシティユニット
DB インスタンスのコンピューティング容量とメモリ容量を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/35e49d50-dd07-50b0-c0f9-864c246029f9.png)
:::

#### 可用性と耐久性
* 別のゾーンでリードレプリカを作成します
* なし

お試しのため、なしを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/0b69a417-9a14-c8a8-51ae-cb24e0916166.png)

#### ネットワークとセキュリティ

:::note warn
事前に以下を作成する必要があります。
* VPC
* サブネットグループ
* セキュリティグループ

**VPCには2つ以上のAZと2つ以上のサブネットが必要です。
（Neptuneの構築に最低 2 つのサブネットが必要なため。）**

**サブネットグループは Neptuneコンソール左メニューのサブネットグループから作成します。**
サブネットグループは、Amazon RDSやAmazon Neptuneなどのデータベースサービスが使用するサブネットのコレクションです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/96127ed3-2be8-32ac-72c6-9770f988280a.png)

**セキュリティグループはインバウンドでポート範囲「8182」を許可してください。**
Neptuneはデフォルトでポート8182を使用します。
:::

それぞれ事前に作成したVPC、サブネットグループ、セキュリティグループを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/70ac21df-8594-a847-f659-75f181ddcd48.png)

その他の設定にデータベースポートの記載があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/bcc55526-d948-1a96-4315-6e7e1787374b.png)

#### ノートブック設定
Neptune ノートブックを作成すると、Neptune クラスターから簡単にデータをクエリおよび可視化できるようになります。
ノートブックが Amazon SageMaker を介して直接インターネットに接続するか、NAT ゲートウェイを備えた VPC を介して接続するかを選択します。
* Amazon SageMakerを介した直接アクセス
Amazon SageMakerノートブックインスタンスがインターネットに直接接続します。
* VPCを介したアクセス
Amazon NeptuneノートブックがVPC内に配置され、インターネットアクセスにはNATゲートウェイを使用します。（NATゲートウェイが必要。ただしアクセス制限できる。）

Amazon SageMakerを介した直接アクセスでノートブックを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/217dc97e-c597-0a19-689c-d396bbb29a03.png)

:::note info
Amazon SageMakerを介した直接アクセスでノートブックを作成すると、Amazon SageMakerコンソールのノートブックからも確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/294cd68e-c413-8dae-e015-b6db581002e6.png)

Amazon Neptuneコンソールのノートブックからも確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/d4ecad28-1271-e25c-6df9-91fb883edfc2.png)
:::

#### その他の設定
* DBクラスターパラメータグループ
クラスタ全体に適用されます。
* DBインスタンスパラメータグループ
特定のDBインスタンスに適用されます。

:::note info
パラメータグループの作成は、Neptuneコンソール左メニュー「パラメータグループ」からできます。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/db3c7b2e-34e9-8f5b-34e4-ba6d04b72cd3.png)

さらに表示を開くと以下となります。

* フェイルオーバー優先順位
複数のリードレプリカが存在する場合に、どのリードレプリカがフェイルオーバー先として選ばれるかを決定するための設定。
フェイルオーバーの発生（プライマリインスタンスに障害が発生）した場合、リードレプリカのうち優先度の高い（Tierの数が低い）1つが新しいプライマリインスタンスとして昇格します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/7a180c4f-a193-b844-e642-1599af081e20.png)

そして、「データベースの作成」ボタンをクリックします。

本日はここまで！

### さいごに
* （グラフデータベースの具体的な利用をやっていく予定です。）