本文是基于S3 + API gateway + Lambda + DynamoDB的一个serverless应用搭建!该应用为serverless架构,您无需管理任何服务器,只需进行应用代码编写和一些简单的配置,即可实现一个动态伸缩、高可用、按实际使用量付费的架构!
1 . Amazon S3静态网站托管
- 创建S3存储桶aws-serverless-wildrydes-lxq
- 上传网页文件
链接:https://pan.baidu.com/s/11O6KCpdVuqQUgUE_lIfnZA 密码:up6l
解压缩后把tutorial文件夹(不包含tutorial文件夹)内的所有内容通过网页控制台上传到刚才创建的S3存储桶内
- 添加存储桶允许公开访问
选择存储桶,选择权限选项卡,选择公有访问设置选项卡。取消“管理此存储桶的公有存储桶策略“的两个勾选。
选择存储桶策略,在存储桶策略编辑器中粘贴如下代码示例,确保在Resource中替换您存储桶的名字,点击保存
- 开启静态网站托管
在桶的属性中选择静态网站托管,配置如下:
打开后可以看到我们网站托管的内容,恭喜您,已经成功托管了一个静态网站在AWS上!!!
2.搭建无服务器后台
- 创建DynamoDB表结构
表名称:Rides(注意大小写敏感)
主键(分区键):RideId(注意大小写敏感),类型选择为“字符串”
表设置: 勾选“使用默认设置”
在表详细信息栏里获取资源名称 ARN , 把对应的值记录下来将会用在下一个操作
Amazon 资源名称 (ARN) arn:aws:dynamodb:us-east-2:993501560978:table/Rides
- 创建 Lambda 函数需要使用的 IAM 角色
每个Lambda函数都有一个与之关联的IAM角色。此角色定义允许Lambda函数访问其他相关的AWS服务。您需要创建一个IAM角色,授予您的Lambda函数权限,以便并访问DynamoDB表,以及写入日志到CloudWatchLogs。
1在AWS管理控制台中,单击“服务”,然后在“安全性&身份”部分中选择IAM
2在左侧导航栏中选择“角色”,然后选择“创建角色”
3从AWS服务组中为角色类型选择Lambda,然后单击“下一步:权限”
4在“Attach权限策略”中,通过搜索栏键入“AWSLambdaBasicExecutionRole”,当搜索结果出来后勾选此项,并点击“下一步:审核”
5在审核信息中填入如下内容 角色名称:WildRydesLambda
6创建完成后可以通过角色搜索栏搜索“WildRydesLambda-liu”,点击进去查看角色摘要
7点击“权限”选项页里右侧的“添加内联策略”创建允许往DynamoDB写的权限
8在“可视化编辑器”中填写如下信息
o 服务:DynamoDB
o 操作:PutItem,可在搜索栏上筛选PutItem
o 资源:选择“特定”,点击“添加ARN”,输入刚才创建DynamoDB表后记录下来的ARN信息
o 填写完ARN后,Region, Account, Table name这三个字段会自动填充。
9点击“添加”,然后“查看策略”
10输入名称“DynamoDBWriteAccess-liu”,然后点击“Create Policy”
11创建结束后在“权限”选项页里可以看到已经成功添加了“DynamoDBWriteAccess-liu”策略
- 创建用于处理请求的Lambda函数
o 名称:RequestUnicorn-liu
o 运行语言:Node.js12.0
o 角色:选择现有角色
o 现有角色:WildRydesLamdba-liu
将index.js代码编辑器中的现有代码替换为aws-serverless-workshop.zip压缩包下lambda文件夹的index.js代码
- 验证Lambda函数
在功能的主编辑屏幕中,从“选择测试事件 …”下拉列表中选择“配置测试事件”。
最后测试成功。
3 集成API Gateway 构建RESTful APIs
- 选择“API Gateway”服务。创建名为WildRydes-liu的API
- 创建 API Resource (资源)和 Method(请求方法)
在API中创建名为 /ride 的新资源, 然后为该资源创建一个 POST 方法,并将其配置为 Lambda RequestUnicorn 函数代理集成
左侧导航栏中,单击WildRydes API下的“资源”。 api
从“操作”下拉列表中选择“创建资源”。
在“新建子资源”页面上填入如下信息
o 资源名:ride
o 资源路径:/ride
o 勾选“启用API Gateway CORS”
击“创建资源”
选择新创建的 /ride 资源后,从“操作”下拉列表中选择“创建方法”
选中显示的新下拉列表中的POST方法
击“POST”方法进入设置页面,填入如下信息
o 集成环境:Lambda函数
o 勾选 “使用Lambda代理集成”
o Lambda区域:us-east-2
o Lambda函数:RequestUnicorn-liu
o 勾选“使用默认超时”
在“操作”下拉列表中,选择“部署API” api
在部署API页面中填入如下信息 o 部署阶段:新阶段
o 阶段名称:prod-liu
点击“部署”
记录“prod-liu阶段编辑器”的调用URL,这个URL就是API暴露到公网的访问地址。后续需要用到(如下图所示)。
- 更新网页应用的配置
修改/tutorial/js/config.js 文件,将刚才部署的API调用URL填入invokeUrl
window._config = {
api: {
invokeUrl: ‘[https://2sdx64a490.execute-api.us-east-2.amazonaws.com/prod-liu]’
}
}; - 验证集成实现
在AWS管理控制台中,单击“服务”,然后在“存储和内容分发”下选择“S3”
选择实验创建的存储桶,选择“属性”,选择“静态网站托管”
点击终端节点跳转到网页应用执行验证
http://aws-serverless-wildrydes-lxq.s3-website.us-east-2.amazonaws.com/
最后结果:
数据库中可看到我们的操作记录。