在 AWS 服务上构建无服务器 Web 应用程序
介绍
在本教程中,您将学习使用以下 AWS 服务构建一个简单的 Web 应用程序:
- AWS DynamoDB作为数据库
- AWS Lambda创建从数据库读取和写入的函数
- AWS API Gateway用于创建 Web 应用程序将使用的 REST API
- AWS S3托管 Web 应用程序
- AWS CloudFront从靠近用户的位置提供 Web 应用程序。
以下是架构图:
对于 lambda 函数,我们将使用带有 Javascript SDK 的 Node.js 运行环境。
一切都将从 AWS 管理控制台进行,无需外部框架、SDK 或命令行界面 (CLI)。
示例 WebApp 和信用
示例 Web 应用程序允许您创建/编辑/删除课程。它如下所示:
这是一个使用 React 和 Redux 制作的单页应用程序。该应用程序的功劳归于Aries McRae。对于本指南,我只是修改了他的React CRUD 样板。
您可以从此GitHub 存储库克隆该应用程序,并使用附带的 Express 服务器在本地进行测试。
本指南不会解释如何制作应用程序。因此,如果您不熟悉 React 和 Redux,请不要担心,因为本教程将重点介绍如何构建 API 和设置所有 AWS 服务。
工作原理
该 API 适用于两种数据结构,课程和作者:
Course:
{
id: "web-components-shadow-dom",
title: "Web Component Fundamentals",
watchHref: "http://www.pluralsight.com/courses/web-components-shadow-dom",
authorId: "cory-house",
length: "5:10",
category: "HTML5"
}
Author:
{
id: 'cory-house',
firstName: 'Cory',
lastName: 'House'
}
在 DynamoDB 中存储数据
DynamoDB是一个完全托管的 NoSQL 数据库,它将数据存储在键值对中,类似于 JSON 对象:
{
"ID": 1,
"Title": "Introduction to Angular 5",
"Category": "web-dev"
}
没有模式,因此每条记录都可以有不同的结构。唯一的限制是定义为分区键的字段必须存在于所有记录中。
DynamoDB 根据此分区键将数据存储在不同的驱动器中。高效的分布将使访问数据的速度尽可能快,因此选择好的分区键非常重要。
这样,分区键就可以成为主键,但您也可以将分区键和排序键组合用作主键。例如,如果您有多条记录具有相同的课程 ID(分区键),则可以添加时间戳作为排序键以形成唯一组合。此外,您还可以为任何其他字段(或字段组合)创建二级索引,以提高查询效率。
DynamoDB 为您提供了很多选项。您可以在开发人员指南中了解更多信息,但现在,让我们深入研究如何为我们的 API 创建数据库。
打开服务菜单并选择DynamoDB:
确保您位于正确的 AWS 区域(每个区域都有一个 DynamoDB 数据库)并单击“创建表”:
输入以下信息,保留默认设置并单击“创建”:
- 表名:courses
- 主键:id
如果您看到以下消息:
您的 AWS 账户目前没有 DynamoDBAutoscaleRole ,但如果您不打算使用自动缩放服务或不确定它是什么,则没有问题。如果您想使用它,请按照文档链接添加 AmazonDynamoDBFullAccess和自定义内联策略,以便在第一次使用自动缩放功能创建新表时自动创建自动缩放角色,这一切都在文档中。
这可能需要几秒钟,但您应该会看到如下确认页面:
记下表的Amazon 资源名称 (ARN),稍后您将需要它。
在“项目”选项卡中,您可以查询表格或添加项目:
我现在将其留空,但应用程序完成后我会向此表添加项目。同时,我将继续为作者创建一个新表,其中包含以下信息:
- 表名称:authors
- 主键:id
创建表后,记下其 ARN。
现在,在Items选项卡中,创建一些作者,例如:
{
"id": "cory-house",
"firstName": "Cory",
"lastName": "House"
},
{
"id": "samer-buma",
"firstName": "Samer",
"lastName": "Buma"
},
{
"id": "deborah-kurata",
"firstName": "Deborah",
"lastName": "Kurata"
}
现在让我们创建将使用这些表的 lambda 函数。
创建 lambda 函数
AWS Lambda是一种允许您根据某些事件运行函数的服务,例如,当数据插入 DynamoDB 表时或当文件上传到 S3 时。
在这种情况下,每当请求到达您将在下一部分中设置的 API 端点之一时,就会运行 lambda 函数。
在撰写本文时,lambda 函数可以用 Node.js、Python、Java 或 C# 编写。本教程将使用 Node.js。
您可以在开发人员文档中了解有关 AWS Lambda 的更多信息。
我们将创建六个 lambda 函数:
- get-all-authors返回数据库中的所有用户
- get-all-courses返回数据库中的所有课程
- get-course仅返回一门课程
- 保存课程以创建新课程
- update-course更新课程
- delete-course删除课程
让我们从创建get-all-authors函数开始。打开服务菜单并选择Lambda:
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~