在本模块中,您将使用 AWS Lambda 和 Amazon DynamoDB 来构建一个后端进程,用于处理 Web 应用程序的请求。用户可以通过您在第一个模块中部署的浏览器应用程序来请求将 unicorn 发送至他们选择的位置。为了满足这些请求,在浏览器中运行的 JavaScript 需要调用在云中运行的服务。

Serverless_Web_App_LP_assets-04

您将实施一个用户每次请求获取 unicorn 时都会调用的 Lambda 函数。该函数将从队列中选择一个 unicorn,在 DynamoDB 表中记录该请求,然后使用将要分派的 unicorn 的详细信息响应前端应用程序。

系统会使用 Amazon API Gateway 通过浏览器调用此函数。您将在下一模块中实施该连接。在本模块中,您只需要单独测试函数。

完成模块所需时间:30 分钟

使用的服务:AWS Lambda、Amazon DynamoDB


按照以下分步说明创建无服务器后端进程。单击各个步骤号可展开该部分。

  • 第 1 步:创建 Amazon DynamoDB 表

    使用 Amazon DynamoDB 控制台创建一个新的 DynamoDB 表。将该表命名为 Rides ,并为其指定名为 RideId 的分区键,类型为字符串。表名称和分区键都区分大小写。确保您使用的是提供的正确 ID。所有其他设置都保留默认值。

    创建该表之后,记录 ARN,以备下一步中使用。


    1. 在 AWS 管理控制台中选择服务,然后选择“数据库”下的 DynamoDB

    2. 选择创建表

    3. 输入 Rides 作为表名称,此字段区分大小写。

    4. 输入 RideId 作为分区键,并选择字符串作为键类型。此字段区分大小写。

    5. 选中使用默认设置框,然后选择创建

    6. 滚动到新表“概述”部分的底部,并记录 ARN。您在下一节中会用到它。

  • 第 2 步:为 Lambda 函数创建 IAM 角色

    每个 Lambda 函数都有一个与之关联的 IAM 角色。此角色定义了函数可与哪些 AWS 服务进行交互。在本次研讨会中,您需要创建一个 IAM 角色,用于授予 Lambda 函数将日志写入 Amazon CloudWatch Log 和向 DynamoDB 表中写入项目的权限。

    使用 IAM 控制台创建一个新角色。将其命名为 WildRydesLambda ,并选择 AWS Lambda 作为角色类型。您需要挂载相应的策略,以便授予函数写入 Amazon CloudWatch Log 和将项目存入 DynamoDB 表的权限。

    将名为 AWSLambdaBasicExecutionRole 的托管策略挂载到此角色,以授予必要的 CloudWatch Log 权限。另外,还要为该角色创建一个自定义内联策略,以允许对上一节中创建的表执行 ddb:PutItem 操作。


    1. 在 AWS 管理控制台中,单击服务,然后在“安全、身份与合规”部分选择 IAM

    2. 在左侧导航栏中选择角色,然后选择创建新角色

    3. 选择 AWS Lambda 作为角色类型。

      注意:选择角色类型会自动为您的角色创建信任策略,并允许 AWS 服务代表您承担此角色。如果您使用 CLI、AWS CloudFormation 或其他机制创建此角色,则应直接指定信任策略。

    4. 开始将 AWSLambdaBasicExecutionRole 输入筛选条件文本框中,并选中此角色旁边的复选框。

    5. 选择下一步

    6. WildRydesLambda 作为角色名称

    7. 选择创建角色

    8. 在“角色”页面的“筛选条件”框中输入 WildRydesLambda 并选择您刚刚创建的角色。

    9. 在“权限”选项卡上,展开内联策略部分,然后选择单击此处链接以创建新的内联策略。

    10. 确保选中策略生成器,然后选择选择

    11. AWS Service 下拉列表中选择 Amazon DynamoDB

    12. 从“操作”列表中选择 PutItem

    13. 将您在上一节中创建的表的 ARN 粘贴到 Amazon 资源名称 (ARN) 字段中。

    14. 选择添加声明

    15. 选择下一步,然后选择应用策略

  • 第 3 步:创建用于处理请求的 Lambda 函数

    AWS Lambda 将运行您的代码以响应诸如 HTTP 请求之类的事件。在此步骤中,您将构建核心函数,用于处理来自 Web 应用程序的 API 请求,以便分派 unicorn。在下一模块中,您将使用 Amazon API Gateway 创建一个 RESTful API,用于公开可以通过用户浏览器调用的 HTTP 终端节点。然后,您可以将在此步骤中创建的 Lambda 函数连接到此 API,以便为您的 Web 应用程序创建功能齐全的后端。

    使用 AWS Lambda 控制台创建名为 Requestunicorn 的新 Lambda 函数,用于处理 API 请求。将提供的 requestunicorn.js 示例实施用于您的函数代码。只需从该文件中复制该示例并将其粘贴到 AWS Lambda 控制台的编辑器中即可。

    确保将您的函数配置为使用在上一节中创建的 WildRydesLambda IAM 角色。


    1. 选择服务,然后在“计算”部分选择 Lambda

    2. 选择创建 Lambda 函数

    3. 选择空白函数蓝图卡片。

    4. 此时不要添加任何触发。选择下一步继续定义您的函数。

    5. Requestunicorn输入名称字段中。

    6. 可选择输入描述。

    7. 选择 Node.js 6.10 作为运行时

    8. requestunicorn.js 中复制代码并将其粘贴到代码输入区域。

    9. 将默认值 index.handler 保留在处理程序字段中。

    10. 选择 WildRydesLambda 作为现有角色下拉列表中的选项。

    11. 选择下一步,然后在“审核”页面选择创建函数

  • 第 4 步:测试您的实施

    在本模块中,您将测试使用 AWS Lambda 控制台构建的函数。在下一模块中,您将使用 API Gateway 添加一个 REST API,以便从在第一个模块中部署的基于浏览器的应用程序中调用此函数。


    1. 在函数的主编辑屏幕中选择操作,然后选择配置测试事件

    2. 复制以下测试事件并将其粘贴到编辑器中:

    {
        "path": "/ride",
        "httpMethod": "POST",
        "headers": {
            "Accept": "*/*",
            "Authorization": "eyJraWQiOiJLTzRVMWZs",
            "content-type": "application/json; charset=UTF-8"
        },
        "queryStringParameters": null,
        "pathParameters": null,
        "requestContext": {
            "authorizer": {
                "claims": {
                    "cognito:username": "the_username"
                }
            }
        },
        "body": "{\"PickupLocation\":{\"Latitude\":47.6174755835663,\"Longitude\":-122.28837066650185}}"
    }
    1. 选择保存并测试

    2. 验证执行是否成功,以及函数结果是否如下所示:

    {
        "statusCode": 201,
        "body": "{\"RideId\":\"SvLnijIAtg6inAFUBRT+Fg==\",\"Unicorn\":{\"Name\":\"Rocinante\",\"Color\":\"Yellow\",\"Gender\":\"Female\"},\"Eta\":\"30 seconds\"}",
        "headers": {
            "Access-Control-Allow-Origin": "*"
        }
    }