首页  »  AWS 教程

使用 Amazon Neptune 构建游戏好友推荐引擎

预配数据库

在本模块中,您将预配一个 Amazon Neptune 实例,并在您的应用程序代码中测试与该实例的连通性。

 完成时间

30 分钟


Amazon Neptune 是由 AWS 提供的全托管图形数据库。Neptune 提供高可用性服务,具备易于扩展的机制、自动故障切换以及定期备份等功能。

在接下来的步骤中,您首先需要预配一个 Amazon Neptune 实例。然后,配置 Neptune 实例,以便 Cloud9 开发环境可以访问该实例。最后,您将在应用程序代码中建立连接,以测试与 Neptune 实例的连通性。


  • 进入 AWS 管理控制台的 Amazon Neptune 页面,点击 Launch Amazon Neptune(启动 Amazon Neptune)。

    在 Engine options(引擎选项)部分中,对于 Version(版本),点击 Neptune 1.2.1.0.R3。

    在 Settings(设置)部分,DB cluster identifier(数据库集群标识符)输入 recommendations 作为数据库名称。

    在 Templates(模板)部分中,点击 Development and Testing(开发和测试)。

    在 DB instance size(数据库实例大小)部分中,点击 Burstable classes(可突增类),并点击最小实例大小。对开发环境来说,可突增实例是最具性价比的选择,因为大多数时候并不需要持续的高性能。(注意:Amazon Neptune 不适用于 AWS 免费套餐,所以使用实例会产生少量费用。

    在 Availability & durability(可用性和持久性)部分中,对于 Multi-AZ-deployment(多可用区部署),点击 No(否)。(注意:在生产过程中,您可能需要启用此选项,以便在发生故障时可以使用数据库。)

    Connectivity(连接)部分保持默认设置即可。

    展开 Additional configuration(其他配置)部分。在 Database options(数据库选项)部分,DB instance identifier(数据库实例标识符)输入 recommendations 作为数据库实例名称。其他设置均保留默认值。

    点击 Create database(创建数据库)。

    成功了!您已经创建了 Amazon Neptune 数据库!您将看到 recommendations 数据库的状态为 creating(创建中)。

  • 趁着数据库正在预配,您可以先为 Lambda 函数创建一个安全组。AWS Lambda 是 AWS 提供的一项无服务器计算服务,您上传编写好的代码,在特定事件触发时 AWS 就会执行这些代码。您无需关心服务器的配置和管理工作,代码的执行完全由该服务来处理。您将在之后的模块中学到更多关于 AWS Lambda 的知识。

    目前,您需要为 Lambda 函数创建一个安全组,使其能访问 Amazon Neptune 数据库。进入 AWS 管理控制台中 EC2 服务的 Security Groups(安全组)选项卡

    点击 Create security group(创建安全组)以创建新的安全组。

    在 Create security group(创建安全组)页面,将新安全组命名为 recommendations-lambda。它应该位于默认 VPC 中,也就是您已在其中启动 Neptune 数据库的 VPC。

    点击 Create security group(创建安全组)。

    在安全组列表中找到您刚创建的 recommendations-lambda 安全组。复制该安全组的 Group ID(组 ID)值(以 sg- 开头)。

    Cloud9 终端执行以下命令,记得把 <securityGroupId> 换成您复制的 Group ID(组 ID):

    echo "export SECURITY_GROUP_ID=<securityGroupId>" >> env.sh && source env.sh
  • 接下来,您要配置 Neptune 数据库,让您的 Cloud9 开发环境和 AWS Lambda 函数都可以访问它。

    Amazon Neptune 实例必须部署在 VPC 的私有子网内。Neptune 实例不能分配公网 IP,也不能通过公网访问。要访问 Neptune 实例,您需要配置一些位于同一 VPC 内部的计算资源,比如 Amazon EC2 实例或 Lambda 函数,使其能访问该 Neptune 实例。

    要配置此访问,请转到 AWS 管理控制台的 Neptune 部分中的数据库,并点击具有 Writer(写入程序)角色(在 Cluster(群集)下)的 recommendations 实例。

    在 Neptune 数据库实例的详情页面,Connectivity & security(连接与安全)模块展示了该数据库配置的安全组信息。点击安全组的名称打开安全组详情页。

    在下面的部分中,点击 Inbound rules(入站规则)选项卡,以查看您的安全组的允许入站规则。然后,点击 Edit inbound rules(编辑入站规则)。

    入站规则定义了允许哪些网络流量从哪些端口流入 Neptune 实例。默认情况下,Neptune 向导已经配置好了一条入站规则。修改这条现有规则,允许来自您的 Cloud9 实例的访问:

    1. 对于 Type(类型),选择 Custom TCP(自定义 TCP)。
    2. Port range(端口范围)输入 8182
    3. 对于 Source(源),点击 Custom(自定义),然后键入 aws-cloud9-User-Recommendations。点击 Cloud9 实例的安全组。
    4. Description(描述)填写 AWS Cloud9

    接下来,点击 Add Rule(添加规则),再添加一条规则,允许您的 Lambda 函数访问:

    1. 对于 Type(类型),选择 Custom TCP(自定义 TCP)。
    2. Port Range(端口范围)输入 8182
    3. 对于 Source(源),点击 Custom(自定义),然后键入 recommendations-lambda。点击您的 Lambda 安全组。
    4. Description(描述)填写 AWS Lambda

    此时您的安全组里应该有两条规则了。点击 Save rules(保存规则)。

    到此,您已经允许了 Cloud9 开发环境和 Lambda 函数访问您的 Amazon Neptune 数据库。

  • 现在您已经开启了从 Cloud9 实例访问 Neptune 数据库的权限,接下来应该测试一下连接,确保能成功连上数据库。

    回到 Neptune 实例的详情页面。在 Connectivity & security(连接与安全)区域会显示该数据库的 Endpoint(端点)。

    复制 Endpoint(端点)的值。接着在 Cloud9 终端运行如下命令(记得把 <yourEndpoint> 换成您刚才复制的端点值):

    echo "export NEPTUNE_ENDPOINT=<yourEndpoint>" >> env.sh
    执行以下命令,将这些环境变量加载至当前会话:
    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 图形数据模型。您将学到图形数据库的一些关键概念和术语。然后向数据库中加载一些数据,并执行应用程序需要的查询操作。