如何使用AWS无服务器应用程序模型(SAM),AWS lambda和node.js构建HTTP API
#aws #serverless #node #cloudcomputing

AWS无服务器应用程序模型(SAM)提供短手语法来指定无服务器资源,例如lambda函数,API网关和DynamoDB。语法可用于建模您想要使用yaml在AWS中创建的应用程序。
aws lambda 是一款无服务器,事件驱动的服务,可按需运行您的代码。

  • 在本文中,我们将与AWS SAM,部署在本地开发 http api test 已部署的API。

目录

创建lambda功能。

  • 在搜索栏上搜索lambda,左侧栏上的单击函数然后在创建功能上。
  • 提供所需的详细信息,即功能名称,运行时和体系结构,然后创建功能

使用图像进行推荐
create lambda

API网关

  • 这是一项完全管理的服务,使开发人员可以轻松地以任何规模创建,部署和管理API。
  • 在页面上单击 api ,以选择要创建的API。(我们正在构建HTTP API)

使用图像进行参考
build http

  • 单击构建: -

步骤1 - 添加将为lambda的集成,选择AWS,然后选择您之前创建的Lambda函数。提供一个API名称。
Intergration

步骤2 - 我们将配置路由选择A GET 方法并提供资源路径,并且分布目标是我们创建的lambda函数。
config

步骤3 - 阶段是将托管API的部署环境。将其留给默认,并确保自动deploy 被激活,它很方便。
步骤4 - 查看您所做的一切,如果您对此感到满意,请单击创建

http api aws sam on VS代码

先决条件

  1. 确保您有一个AWS帐户。

  2. 安装 aws cli 使用此link

  3. 使用aws configure配置您的AWS,您需要在其中提供AWS关键细节。
    如果您想生成新的,请使用此link生成新的。

  4. 使用此documentation安装 aws sam cli

  5. 安装docker here(本地测试)

  6. 安装nodejs here

  7. 安装AWS工具包与代码扩展。

  8. 安装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 有三个事件
  1. getusers :从API中获取所有用户。 具有 /user>的路径 httpapi ,所使用的方法是 get ,apiid,apiid,cof of httpapi

注意
apiid Ref(HTTPAPI)在HelloworldFunction上方定义,并且具有无服务器的httpapi类型,具有非prod的舞台名称(默认)

  1. getuser
    从API中获取单个用户。
    具有类型 httpapi /user/{id} 的路径,所使用的方法是 get ,apiid,apiid af af of httpapi

  2. 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帐户上

httpapi概述
http

  • 路线下

Routes

  • 所有路线都有一个配置集成(相同的lambda):
    config

  • 复制阶段复制我们将使用它进行测试的Invoke URL。
    url

测试

  • 我们将使用 Thunder Client Cli 扩展程序测试我们的API

getusers
我们正在做一个get请求,响应将是我们API中的所有用户。
要测试查询字符串,您可以在/user?start=1&end=3的末端添加规格。
users

getuser
这也是带有ID规范的GET请求。响应是用户名称的个性化问候。
user

postuser
使用帖子Methos,它将新用户添加到用户数组中。
post user

CloudWatch日志

  • 之前,我们将事件打印到CloudWatch中的日志中。
  • 一旦进入CloudWatch进入日志组,然后找到正确的日志组,然后单击它。
  • 您将看到它的概述,然后在底部有所有调用的日志流。
  • 日志的开始,结束和类似的报告:

LOGS

结论

AWS无服务器应用程序模型(SAM),AWS lambda和node.js使建筑物API变得轻而易举。通过本文概述的步骤,您可以立即使用自己的简单API端点开始。如果您发现这篇文章有帮助,请务必与我联系,并留下您的评论和反馈。愉快的编码!