AWS无服务器应用程序模型(SAM)提供短手语法来指定无服务器资源,例如lambda函数,API网关和DynamoDB。语法可用于建模您想要使用yaml在AWS中创建的应用程序。
aws lambda 是一款无服务器,事件驱动的服务,可按需运行您的代码。
- 在本文中,我们将与AWS SAM,部署在本地开发 http api test 已部署的API。
目录
- Create Lambda Function
- API Gateway
- HTTP API AWS SAM on VS Code
- Deploying to AWS
- Testing
- CloudWatch Logs
- Conclusion
创建lambda功能。
- 在搜索栏上搜索lambda,左侧栏上的单击函数然后在创建功能上。
- 提供所需的详细信息,即功能名称,运行时和体系结构,然后创建功能。
API网关
- 这是一项完全管理的服务,使开发人员可以轻松地以任何规模创建,部署和管理API。
- 在页面上单击 api ,以选择要创建的API。(我们正在构建HTTP API)
- 单击构建: -
步骤1 - 添加将为lambda的集成,选择AWS,然后选择您之前创建的Lambda函数。提供一个API名称。
步骤2 - 我们将配置路由选择A GET 方法并提供资源路径,并且分布目标是我们创建的lambda函数。
步骤3 - 阶段是将托管API的部署环境。将其留给默认,并确保自动deploy 被激活,它很方便。
步骤4 - 查看您所做的一切,如果您对此感到满意,请单击创建。
http api aws sam on VS代码
先决条件
-
确保您有一个AWS帐户。
-
安装 aws cli 使用此link。
-
使用
aws configure
配置您的AWS,您需要在其中提供AWS关键细节。
如果您想生成新的,请使用此link生成新的。 -
使用此documentation安装 aws sam cli
-
安装docker here(本地测试)
-
安装nodejs here
-
安装AWS工具包与代码扩展。
-
安装Thunder Client CLI扩展在VS代码上。
创建SAM项目
- 创建一个文件夹并在VS代码中打开它。
-
使用
sam init
生成默认的SAM应用程序。选择 aws快速启动应用模板。 hello world示例, nodejs14.x 运行时和软件包类型, zip package, hello world xpemend example 启动模板,< em> n 到X射线跟踪以避免额外的费用最终给您的SAM项目一个名字。 -
将生成带有SAM项目名称的文件夹,让我们详细讨论: -
events/
:包含可用于lambda功能本地测试的示例事件。 -
hello-world/
:包含一个示例AWS SAM应用程序,用于测试所有内容是否正常工作。 -
.gitignore
:git用来确定对存储库更改时要忽略的文件和目录。 -
README.md
:一个包含项目文档的降价文件。 -
samconfig.toml
:SAM CLI使用的配置文件指定了部署应用程序的选项和设置。 -
template.yaml
:定义应用程序的资源和配置。
template.yaml代码说明
- 在
template.yaml
here中查看完整代码。 在 Resources 部分下,HttpApi
定义了将在AWS上创建的资源。 我们保留了具有无服务器函数类型的默认HelloworldFunction 有三个事件:
- getusers :从API中获取所有用户。 具有 /user>的路径 httpapi ,所使用的方法是 get ,apiid,apiid,cof of httpapi
注意
apiid Ref(HTTPAPI)在HelloworldFunction上方定义,并且具有无服务器的httpapi类型,具有非prod的舞台名称(默认)
-
getuser :
从API中获取单个用户。
具有类型 httpapi ,/user/{id} 的路径,所使用的方法是 get ,apiid,apiid af af of httpapi em> -
Poster
创建新用户。
具有/em>的类型/user>的路径,所使用的方法是 post ,apiid apiID,ref af of httpapi p>
app.js代码说明
- 查看
app.js
here中的完整代码。 - 该文件定义了lambda处理程序,即调用Lambda时将运行的代码。
Response
是我们从lambda回来的对象(API响应)const USERS
是包含的一系列对象 用户具有名称和用户ID的属性。lambdaHandler
具有事件和上下文。如果是将HTTP请求注入的地方console.log
事件以在CloudWatch日志中获取HTTP。result
将通过响应对象传递。 - 第一个条件使用以前传递的事件对象和路由(使用的方法) 可以将查询参数传递以进行启动和结束(启动的默认值为0,末端的总数组长度。) 验证
- 第一个验证是确保开始更大或等于0。
- 第二个验证是确保末端较小或等于数组长度。
- 第三验证确保开始小于结束。
- 第二条件我们有邮政方法和/用户路径,我们将在其中将新用户发布到用户数组
- 第三条件使用个性化的问候语使用/user/{id}的方法返回单个用户。
部署到AWS
-
确保您在包含
template.yaml
的目录中。 -
运行
sam build
命令以构建lambda函数并生成部署软件包。
AWS-SAM文件夹将成功生成。
n/b
验证您的IAM用户是否具有执行部署的必要权限。所需的权限为:
- awslambdafullaccess
- iamfullaccess
- AmazonApigateWayAadMinistrator
- Amazons3fullaccess
- cloudformationfullaccess
-
cloudwatchlogsfullaccess
-
使用SAM模板和lambda功能代码逐步创建云形式堆栈,以逐步创建
sam deploy --guided
。
提供该应用程序的名称,使用默认区域,确认更改,允许IAM角色创建,不要禁用回滚,我们没有授权,因此同意它,我们希望将我们的参数保存在配置文件中,并使用默认值其余的。
确认我们要部署更改(应该成功)。 -
在 API网关下的AWS帐户上
- 在路线下
测试
- 我们将使用 Thunder Client Cli 扩展程序测试我们的API
getusers
我们正在做一个get请求,响应将是我们API中的所有用户。
要测试查询字符串,您可以在/user?start=1&end=3
的末端添加规格。
getuser em>
这也是带有ID规范的GET请求。响应是用户名称的个性化问候。
postuser
使用帖子Methos,它将新用户添加到用户数组中。
CloudWatch日志
- 之前,我们将事件打印到CloudWatch中的日志中。
- 一旦进入CloudWatch进入日志组,然后找到正确的日志组,然后单击它。
- 您将看到它的概述,然后在底部有所有调用的日志流。
- 日志的开始,结束和类似的报告:
结论
AWS无服务器应用程序模型(SAM),AWS lambda和node.js使建筑物API变得轻而易举。通过本文概述的步骤,您可以立即使用自己的简单API端点开始。如果您发现这篇文章有帮助,请务必与我联系,并留下您的评论和反馈。愉快的编码!