aws dynamodb_AWS Lambda / Java,DynamoDB和Api网关集成

aws dynamodb

介绍

在本文中,我将介绍一个完整的(Java)示例,该示例集成了AWS Lambda,DynamoDb和Api Gateway以创建一个函数,并将该函数作为HTTP资源公开给其他方使用。

在深入研究细节之前,我将简要概述本示例中使用的AWS服务(摘自AWS文档):

  • AWS Lambda。 AWS Lambda是一种计算服务,可运行开发人员的代码以响应事件并自动管理事件的计算资源,从而使构建易于响应新信息的应用程序变得容易。
  • DynamoDB:快速,灵活,托管的NoSql数据库。
  • Api网关:Amazon API Gateway是一项完全托管的服务,使开发人员可以轻松地创建,发布,维护,监控和保护各种规模的API。

在此示例中,我们将创建一个lambda函数来跟踪特定移动设备的位置(纬度和经度)。 数据流如下所示:

移动设备-> HTTP POST-> Api网关-> recordLocation(Lambda函数)-> DynamoDb(存储位置)

创建应用程序

先决条件:

  • IntelliJ Idea用于此示例,但是任何IDE都可以。 Gradle用于构建系统。
  • 实际部署和运行示例的AWS帐户。
  • 完成示例后,请删除您创建的所有AWS资源,以防止不必要的计费。

对于Lambda函数的实现,我们使用AWS Java SDK。

1.在IntelliJ中,选择File-> New project,然后选择带有Java库的Gradle。 点击下一步

2. groupId = com.example,artifactId = locationpersister。 点击下一步。

3.选择一个Java 8 IDE,然后单击“下一步”,再单击“完成”。

4.创建src / main / java文件夹(如果尚不存在)。

5.打开de build.gradle文件并添加以下依赖项:

compile 'com.amazonaws:aws-lambda-java-core:1.1.0'
compile 'com.amazonaws:aws-lambda-java-events:1.1.0'

6.将以下代码添加到build.gradle文件中:

task buildZip(type: Zip) {
    from compileJava
    from processResources
    into('lib') {
        from configurations.runtime
    }
}
build.dependsOn buildZip

当触发构建任务时,以上代码创建了一个zip存档。 可以将zip文件直接上传到AWS Lambda。

7.创建一个类com.example.persister.DeviceLocation,其成员为:lat(double),lng(double)和deviceId(string)。 此类保存提交给Lambda函数的数据。

8.创建一个新类com.example.persister.LocationPersisterFunction。 此类将保留Lambda函数的实现。

9.使LocationPersisterFunction实现com.amazonaws.services.lambda.runtime.RequestHandler

接口。

该接口定义了handleRequest函数,该函数在触发Lambda函数时执行。 handleRequest函数带有两个参数:输入(属于DeviceLocation类型,在调用Context对象时将传入)。

创建DynamoDb表

要将数据存储在DynamoDB中,我们需要创建一个表。

1.打开AWS控制台,然后导航到DynamoDB部分。

2.单击创建表,名称使用:“ DeviceLocation”。 键入id(字符串字段)以用作分区键,而不指定排序键。 将所有内容保留为默认值,然后单击创建。

3.请注意,该表是在所选区域中创建的。 如果单击表格并查看详细信息,则可以看到表格的区域。

创建DeviceLocation类

DeviceLocation类保存传递给Lambda函数的输入。

1.使用以下字段创建一个名为DeviceLocation的新类:id(字符串),lat(双精度)和lng(双精度)

2.确保该类同时包含setter和getter。 调用Lambda函数时,AWS Lambda将使用setter来基于传入的JSON填充此对象。

实施Lambda函数

1.打开LocationPersisterFunction

2.将以下代码添加到handleRequest方法的主体中:

final AmazonDynamoDBClient client = new AmazonDynamoDBClient(new EnvironmentVariableCredentialsProvider());
        client.withRegion(Regions.EU_WEST_1); // specify the region you created the table in.
        DynamoDB dynamoDB = new DynamoDB(client);
        Table table = dynamoDB.getTable("DeviceLocation");
        final Item item = new Item()
                .withPrimaryKey("id", UUID.randomUUID().toString()) // Every item gets a unique id
                .withString("deviceId", input.getDeviceId())
                .withDouble("lat", input.getLat())
                .withDouble("lng", input.getLng());
        table.putItem(item);
        return null;

3.确保更改区域以匹配在其中创建表的区域。

4.上面的代码获取了对DynamoDB DeviceLocation表的引用,创建了一个项目并将其持久化。

5.执行gradle构建任务以创建zip归档文件或我们的代码。

5.现在,实现已完成,我们准备创建我们的AWS Lambda函数。

创建Lambda函数
1.打开AWS控制台,然后导航至Lambda部分。

2.选择空白功能,然后单击下一步(在此阶段我们不创建触发器)。

3.作为名称,选择:persistDeviceLocation,然后选择Java 8作为运行时。

4.上传/build/distributions/locationpersister-1.0-SNAPSHOT.zip文件

5.在Handler字段中,指定实现我们的处理程序的标准类名:com.example.persister.LocationPersisterFunction

6.在角色字段中,选择创建自定义角色。 创建角色表单已打开。 使用lambda_location_persister作为角色名称,然后单击允许。 在“现有角色”字段中创建并选择了该角色。 参见屏幕截图“ lambda_role”

7.保留所有默认设置,然后单击“下一步”。

8.单击创建功能

屏幕截图-2016-12-02-at-16-30-52

在de AWS控制台中测试功能

创建功能后,我们将使用AWS控制台进行测试。

1.单击测试

2.将打开一个对话框,您可以在其中指定发送给Lambda函数的数据。 使用以下测试数据:

{
  "deviceId": "deviceId",
  "lat": 52.5,
  "lng": 5.5
}

3.您可以随时通过单击操作->配置测试事件来修改测试数据。

4.完成后,单击测试

5.如果一切都按计划进行,您将收到一条错误消息,指出以下内容:状态代码:400; 错误代码:AccessDeniedException

6.到目前为止,这是正确的。 尽管我们创建了自定义角色,但没有授予该角色访问DynamoDB表的权限。

将DynamoDB权限添加到我们的角色

1.打开AWS控制台,然后导航到IAM部分。

2.单击角色

3.单击lambda_location_persister打开它。

4.单击附加策略

5.在过滤器字段中搜索DynamoDB

6.选择AmazonDynamoDBFullAccess策略,然后单击附加。

7.浏览回到AWS Lambda并再次测试该功能。 该功能应该成功。

8.导航到DynamoDB并选择DeviceLocation表,然后单击项目。 您应该看到一个项目添加到表中。

9如果您收到状态码:400;否则,请重新启动。 错误代码:ResourceNotFoundException错误,请检查您在Lambda实现中指定的区域与DynamoDB表的区域相对应。

创建API网关

API网关用于创建HTTP端点,该端点是Lambda函数的触发器。 应用程序可以通过HTTP与该端点进行通信。

1.打开AWS控制台,然后导航到API Gateway。

2.创建一个新的API。 作为名称使用:LocationPersisterApi

3.单击创建API

4.选择操作->并单击创建资源,请参阅screenshot_create_resource。

5.作为资源名称使用:devicelocation,然后单击创建资源。

6.选择Actions->,然后单击Create Method并选择POST。

7.在方法详细信息中,选择“集成类型:Lambda函数”,“ Lambda区域”(在其中创建Lambda函数的区域)以及“ Lambda函数:persistDeviceLocation”(Lambda函数的名称))

8.单击保存,然后单击确定。

9.单击“测试”,然后在正文中粘贴测试消息。 该消息可以与Lambda函数的“测试”部分中使用的消息相同。 填充主体后,单击“测试”。 如果一切正常,您应该看到HTTP 200状态代码。

10.选择操作->部署API,然后选择[新阶段]。 指定prod作为阶段名称。

11.单击部署。 将部署您的API,以便可以从外部访问它。

12.导航到生产阶段,展开资源并选择POST方法。 将网址复制到“邮递员”等“调用网址”文本之后。 执行带有测试消息正文的HTTP帖子。 您应该看到一个HTTP 200状态代码(成功)。

13.如果现在打开DynamoDB表并列出项目,则应该看到添加到表中的几项。

资源

结论

AWS Lambda,DynamoDB和API Gateway具有强大的功能,可以在云中配置功能,而无需配置整个服务器或更多像弹性beantalk这样的功能全面的托管服务。 这篇文章向您展示了如何使用这些AWS服务来创建Lambda函数,该函数使用DynamoDB并通过API网关使其可用。

资源资源

–示例项目的完整源代码可以在Github上找到。
AWS Lambda
AWS DynamoDBAWS Api网关

翻译自: https://www.javacodegeeks.com/2016/12/aws-lambdajava-dynamodb-api-gateway-integration.html

aws dynamodb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值