Neptuneクラスター作成時に失敗したときの対処法

## はじめに
以下のように、NeptuneDBクラスター作成時に失敗したときの対処法をまとめてみました。
初心者は躓きやすいポイントかもしれないので、自分が把握している範囲で備忘録的に共有しておこうと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951176/95eebbd7-3830-4afd-a3a7-c0d3f618e52c.png)

## 内容
原因ごとに出てくるエラーの文言が違ったりするので、いくつか分けて紹介していこうと思います。

#### AZ不足
Neptuneは常に複数のサブネットを要求しますので、作成時に選択したVPCが単一のサブネットだと作成に失敗し、下記のようなエラーが発生します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951176/aae0de5c-9ebf-4077-9084-dc258975109d.png)
```
DB クラスターの作成中にエラーが発生しましたdb-neptune-1。
The DB subnet group doesn't meet Availability Zone (AZ) coverage requirement. Current AZ coverage: us-east-1a. Add subnets to cover at least 2 AZs.
```
公式ドキュメントにも以下のように記述があります。

>[Amazon Neptune DB クラスターが配置される Amazon VPC をセットアップする](https://docs.aws.amazon.com/ja_jp/neptune/latest/userguide/get-started-vpc.html)
VPC には少なくとも 2 つのサブネットが必要です。これらのサブネットは、2 つの異なるアベイラビリティーゾーン (AZ) になければなりません。

ですので、Neptuneインスタンスを作成するVPCには複数のAZがあることを確認しておく必要があります。
複数のAZがあるかの確認は、VPCのダッシュボードから利用中のVPCにチェックを入れることで、該当のサブネットのAZ数を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951176/43588465-0916-4f2b-a287-06866f68e3d4.png)


#### ノートブックの作成に失敗する

次に、ノートブックの作成に失敗するパターンです。下記の画像とエラーメッセージだとタイムアウトでノートブックが作成できないと言っています。
SageMakerのダッシュボードから直接作成してNeptuneを関連付けることも可能ですが、Neptuneのダッシュボードから作成する方法を模索したいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951176/aec51644-2ac1-4645-a454-62ceea0154b9.png)

```
障害の理由
Notebook Instance Lifecycle Config 'arn:aws:sagemaker:us-east-
1:512598865557:notebook-instance-lifecycle-config/aws-neptune-sample-
default-lc' for Notebook Instance 'arn:aws:sagemaker:us-east-
1:512598865557:notebook-instance/aws-neptune-sample' took longer than 
5 minutes. Please check your CloudWatch logs for more details if your 
Notebook Instance has Internet access.
```

原因としては、直接出ていないのでわかりづらいのですが
ノートブック作成→IAMロール名
の選択欄で、新規で選択してしまうと必要な権限が入っておらず接続できないようです。なので、事前にIAMロールを作成しておく必要があります...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951176/6b091acd-a02a-41d4-adab-d15744f100ea.png)



必要な権限としては以下になると思うので、これらを設定したロールを事前に作成した上で、ノート作成時に選択して頂ければと思います。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "S3ListBucketAndGetObject",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::aws-neptune-notebook",
                "arn:aws:s3:::aws-neptune-notebook/*"
            ]
        },
        {
            "Sid": "DBAccess",
            "Effect": "Allow",
            "Action": "neptune-db:*",
            "Resource": [
                "arn:aws:neptune-db:us-east-1:512598865557:cluster-XFC6AURHGWXKE45TPKD4HLSX7E/*"
            ]
        },
        {
            "Sid": "LogGroupAccess",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:512598865557:log-group:/aws/sagemaker/*"
            ]
        },
        {
            "Sid": "SageMakerNotebookAccess",
            "Effect": "Allow",
            "Action": "sagemaker:DescribeNotebookInstance",
            "Resource": [
                "arn:aws:sagemaker:us-east-1:512598865557:notebook-instance/*"
            ]
        }
    ]
}
```

また、権限の設定が正しくても、ネットワーク設定の関係でノートブックの作成に失敗する場合があります。
VPC作成時にDNS設定をしていないと、以下のようにエンドポイント解決ができないようなのでDNSの設定を忘れないようにしてください。していなかった場合は、VPCの編集から有効にできます。
```
fatal error: Could not connect to the endpoint
```

作成時にインターネットアクセスのオプションとして、
「Amazon SageMaker を介した直接アクセス」
「VPC を介したアクセス」
の二つがありますが、どちらを選ぶにせよクラスターがインターネットに接続できる状態でないと作成に失敗します。

ネットワーク周りの思いつく注意点としては、
・DNSが有効になっていない
・NATゲートウェイがアタッチされていない
・ルートテーブルやセキュリティグループの設定がずれている
といったところでしょうか。

また、ネットワーク設定の注意点は公式ドキュメントにもいくつか記載があります。

>[グラフノートブックでの Amazon Neptune の使用](https://docs.aws.amazon.com/ja_jp/neptune/latest/userguide/graph-notebooks.html)
Neptune ノートブックインスタンスを作成する場合、ネットワークアクセスには、Amazon SageMaker AI 経由の直接アクセス (デフォルト) と VPC 経由のアクセスの 2 つのオプションが用意されています。どちらのオプションでも、ノートブックは Neptune ワークベンチをインストールするためのパッケージの依存関係を取得するためにインターネットにアクセスする必要があります。インターネットにアクセスできないと、Neptune ノートブックインスタンスの作成が失敗します。



> [Amazon Neptune DB クラスターが配置される Amazon VPC をセットアップする](https://docs.aws.amazon.com/ja_jp/neptune/latest/userguide/get-started-vpc.html)
VPC に DNS サポートがあることを確認してください。
DNS ホスト名と DNS 解決の両方が VPC で確実に有効になっていることを確認します。VPC ネットワーク属性の enableDnsHostnames と enableDnsSupport を true に設定する必要があります。

## さいごに
今回はNeptuneクラスター作成時、気にしていないと引っかかりそうだな～と個人的に感じていた点を備忘録的にまとめました。
Neptune関連の記事って絶対数がそもそも少ないので、トラブルシューティングの記事となるとほとんどないのが本当に悩みでした。
私自身もNeptuneを使い始めたころはこの辺のエラーにかなり苦しめられたので、この記事の情報が誰かのお役に立てば幸いです。今後も何か発見があれば定期的にアウトプットしていきたいです。