このモジュールでは、Amazon Neptune インスタンスをプロビジョニングして、アプリケーションコードでインスタンスへの接続をテストします。

モジュールの所要時間: 30 分


Amazon Neptune は、AWS によって提供される完全マネージド型のグラフデータベースです。スケーリングに優れたメカニズム、自動フェイルオーバー、定期的なバックアップとともに、高可用性サービスを提供します。

次の手順では、最初に Amazon Neptune インスタンスをプロビジョニングします。次に、Cloud9 開発環境からアクセスできるように Neptune インスタンスを設定します。最後に、アプリケーションコードで接続することで、この接続をテストします。


  • ステップ 1:Amazon Neptune データベースをプロビジョニングする

    AWS マネジメントコンソールの [Amazon Neptune] セクションに移動し、[Amazon Neptune を起動] を選択します。

    friend-rec-launch-neptune

    (クリックして拡大)

    friend-rec-launch-neptune

    [エンジンオプション] セクションで [バージョン] に Neptune 1.0.2.2.R2 を選択します。

    friend-rec-engine-options

    (クリックして拡大)

    friend-rec-engine-options
    [ 設定] セクションの [ DB クラスター識別子] では、データベースに recommendations という名前を付けます。
    friend-rec-settings

    (クリックして拡大)

    friend-rec-settings

    [テンプレート] セクションで [開発およびテスト] を選択します。

    friend-rec-templates

    (クリックして拡大)

    friend-rec-templates

    [DB インスタンスサイズ] セクションでは、[バーストクラス] を選択し、最小のインスタンスサイズを選択します。バーストインスタンスクラスは一般的に大容量を常には必要としない、開発用に最もコスト効率の良いインスタンスクラスです。(注意: Amazon Neptune は AWS 無料利用枠の対象外なので、インスタンスに少額の料金が発生します。)

    friend-rec-db-instance-size

    (クリックして拡大)

    friend-rec-db-instance-size
    [ 可用性、および堅牢性] セクションで [ マルチ AZ デプロイ] に [ いいえ] を選択します。( 注意: 本番環境では、このオプションを有効にして、障害が発生した場合にデータベースを利用可能な状態にすることができます。)
    friend-rec-availability

    (クリックして拡大)

    friend-rec-availability

    [接続] セクションでは、デフォルト設定を保持します。

    [追加設定] セクションを展開します。[データベースオプション] セクションの [DB インスタンス識別子] では、データベースインスタンスに recommendations という名前を付けます。その他の設定はすべてデフォルトのままにします。

    [データベースを作成] を選択します。

    friend-rec-addl-config

    (クリックして拡大)

    friend-rec-addl-config

    成功しました! Amazon Neptune データベースが作成されました! recommendations データベースが [作成] のステータスにあることが表示されます。

    friend-rec-database-creating

    (クリックして拡大)

    friend-rec-database-creating
  • ステップ 2:AWS Lambda 関数のセキュリティグループを作成する

    データベースのプロビジョニング中に、Lambda 関数のセキュリティグループを作成できます。AWS Lambda は、特定のイベントが発生したときに実行されるコードをアップロードする AWS のサーバーレスコンピューティングサービスです。サーバーのプロビジョニングや管理について心配する必要はありません。コードの実行はすべて処理されます。AWS Lambda については、今後のモジュールで詳しく学びます。

    ここでは、Lambda 関数が Amazon Neptune データベースにアクセスできるように、セキュリティグループを作成する必要があります。開始するには、AWS マネジメントコンソールの EC2 セクションの [セキュリティグループ] タブに移動します。

    [セキュリティグループを作成] を選択して、新しいセキュリティグループを作成します。

    friend-rec-security-group

    (クリックして拡大)

    friend-rec-security-group

    [セキュリティグループを作成] ページで、セキュリティグループに recommendations-lambda という名前を付けます。このセキュリティグループは、デフォルトの VPC にある必要があります。これは、Neptune データベースを起動したのと同じ VPC です。

    [セキュリティグループを作成] をクリックします。

    friend-rec-create-sg

    (クリックして拡大)

    friend-rec-create-sg

    セキュリティグループのリストで、recommendations-lambda のセキュリティグループを見つけます。グループ ID (sg- で始まります) の値をコピーします。

    Cloud9 ターミナルで、次のコマンドを実行し、<securityGroupId>グループ ID 値に置き換えます。

    echo "export SECURITY_GROUP_ID=<securityGroupId>" >> env.sh && source env.sh
  • ステップ 3:Neptune インスタンスへのアクセスを設定する

    次に、Cloud9 開発環境と AWS Lambda 関数の両方がアクセスできるように、Neptune データベースを設定する必要があります。

    Amazon Neptune インスタンスは、プライベートサブネットの Virtual Private Cloud (VPC) でプロビジョニングする必要があります。これらは、パブリック IP アドレスを取得できず、パブリックインターネットからアクセスできません。Neptune インスタンスにアクセスするには、Amazon EC2 インスタンスや Lambda 関数など、VPC 内にアクセスできるコンピューティングリソースからのアクセスを設定する必要があります。

    このアクセスを設定するには、AWS マネジメントコンソールの [Neptune] セクションの [データベース] に移動して、Writer ロール (Cluster の下) で recommendations インスタンスを選択します。

    friend-rec-instance

    (クリックして拡大)

    friend-rec-instance

    Neptune データベースインスタンスの詳細の [接続 & セキュリティ] セクションにデータベース用に設定されたセキュリティグループが表示されます。セキュリティグループ名を選択して開きます。

    friend-rec-config-sg

    (クリックして拡大)

    friend-rec-config-sg

    下のセクションで、[受信ルール] タブを選択して、セキュリティグループで許可されている受信ルールを確認します。その後、[受信ルールを編集] を選択します。

    friend-rec-inbound-rules

    (クリックして拡大)

    friend-rec-inbound-rules

    受信ルールは、Neptune インスタンスに対して、どのネットワークトラフィックが、どのポートで許可されるかを示します。デフォルトでは、Neptune ウィザードによって受信ルールが 1 件設定されます。この既存のルールを編集して、Cloud9 インスタンスからのアクセスを許可します。

    1. [タイプ] に [カスタム TCP] を選択します。
    2. [ポート範囲] に 8182 と入力します。
    3. [ソース] に [カスタム] を選択し、aws-cloud9-User-Recommendations と入力します。Cloud9 インスタンスのセキュリティグループを選択します。
    4. [説明] に AWS Cloud9 と入力します。

    次に、[ルールを追加] を選択して、Lambda 関数のアクセスを許可するルールを追加します。

    1. [タイプ] に [カスタム TCP] を選択します。
    2. [ポート範囲] に 8182 と入力します。
    3. [ソース] に [カスタム] を選択し、recommendations-lambda と入力します。Lambda セキュリティグループを選択します。
    4. [説明] に AWS Lambda と入力します。

    これで、セキュリティグループに 2 つのルールができしました。[ルールを保存] を選択します。

    friend-rec-edit-inbound

    (クリックして拡大)

    friend-rec-edit-inbound

    これで、Cloud9 開発環境と Lambda 関数に Amazon Neptune データベースへのアクセス権が付与されました。

  • ステップ 4:Neptune データベースへの接続をテストする

    Cloud9 インスタンスから Neptune データベースへのアクセスを有効にしたので、接続をテストして、データベースに接続できることを確認する必要があります。

    Neptune インスタンスの詳細ページに戻ります。[接続 & セキュリティ] ボックスに、データベースのエンドポイントが表示されます。

    エンドポイントの値をコピーします。次に、Cloud9 ターミナルで次のコマンドを実行します (<yourEndpoint> をコピーしたエンドポイント値に置き換えてください)。

    echo "export NEPTUNE_ENDPOINT=<yourEndpoint>" >> env.sh
    friend-rec-endpoint

    (クリックして拡大)

    friend-rec-endpoint

    次のコマンドを実行して、これらの環境変数をセッションにロードします。

    source env.sh

    scripts/ ディレクトリに testDatabase.js というファイルがあります。このファイルは、接続設定が正しいことを確認するために、Neptune データベースへの接続を開始します。

    ファイルの内容は次のとおりです。

    const gremlin = require('gremlin');
    const DriverRemoteConnection = gremlin.driver.DriverRemoteConnection;
    const Graph = gremlin.structure.Graph;
    
    const connection = new DriverRemoteConnection(`wss://${process.env.NEPTUNE_ENDPOINT}:8182/gremlin`,{});
    
    const graph = new Graph();
    const g = graph.traversal().withRemote(connection);
    
    g.V().count().next().
        then(data => {
            console.log(data);
            connection.close();
        }).catch(error => {
            console.log('ERROR', error);
            connection.close();
        });
    

    データベースへの接続に使用しているライブラリは Gremlin と呼ばれます。これは、Gremlin クエリ言語を使用して、Neptune データベースをクエリおよびトラバースします。Gremlin クエリの詳細については、次のモジュールをご覧ください。

    コードの最初の数行は、必要なライブラリをインポートします。次に、ターミナルで設定した Neptune のエンドポイントプロパティを使用して、データベースへの接続を作成します。最後に、データベースに接続し、count() リクエストを実行して、グラフ内の頂点の数をクエリします。

    次のコマンドでスクリプトを実行できます。

    node scripts/testDatabase.js

    次の出力が表示されます。

    { value: 0, done: false }

    成功しました! データベースに接続できます。スクリプトは結果を出力し、グラフに 0 個の頂点があることを示しています。


このモジュールでは、アプリケーション用に Amazon Neptune データベースインスタンスをプロビジョニングしました。次に、セキュリティグループ設定を更新して、Cloud9 開発環境と Lambda 関数からのデータベースへのアクセスを許可しました。最後に、データベースインスタンスに接続できることを確認するために、テストスクリプトを実行しました。

次のモジュールでは、Neptune グラフデータモデルについて学習します。グラフデータベースの主要な概念と用語を学びます。次に、データベースにデータをロードし、アプリケーションで必要なクエリをいくつか実行します。