随着云计算技术的发展,无服务器(Serverless)架构已经成为越来越受欢迎的一种应用开发模式。在无服务器架构下,开发者可以将精力放在业务逻辑的编写和优化上,而不必关心和管理服务器的运维问题。AWS 提供了丰富的无服务器服务,其中 AWS Lambda 是其中最具代表性的一种,它可以让开发者以函数为单位的方式编写和部署应用程序。
SAM(Serverless Application Model) 是一种无服务器应用程序模型,它可以让开发者以一种简单、有结构、易于维护的方式编写 Serverless 应用程序,且与 AWS CloudFormation 集成。SAM CLI 是 AWS 提供的一种 SAM 命令行工具,它可以帮助开发者本地开发、测试和部署 SAM 应用程序。本文将介绍如何使用 SAM CLI 构建无服务器应用程序。
安装 SAM CLI
在开始使用 SAM CLI 构建无服务器应用程序前,你需要先安装 SAM CLI。SAM CLI 支持 macOS、Linux 和 Windows。在 macOS 下,你可以使用 Homebrew 进行安装:
---- --- ------- ---- ------- -----------
在 Linux 下,你可以使用 PackageCloud 和 Snap 进行安装,详情请参考 AWS 官方文档。
在 Windows 下,你可以使用 PowerShell 进行安装:
----------------- ----------- ------------------------------------------------------------------------------------------------------------
安装完成后,你可以使用以下命令验证 SAM CLI 是否安装成功:
--- ---------
创建 SAM 应用程序
接下来,我们将使用 SAM CLI 创建一个无服务器应用程序。首先,创建一个新的目录,并在该目录下执行以下命令:
--- ----
SAM CLI 将会询问你要创建什么类型的应用程序,如下图所示:
本例中,我们选择了其中的 1 选项,即一个 “Quick Start” 应用程序模板,后续将会详细介绍各个选项的含义。SAM CLI 将会要求你输入以下信息:
- Project name: 应用程序名称,例如 “hello-world”。
- AWS Region: 部署时使用的 AWS 区域,默认是 “us-east-1”。
- Runtime: 使用的 Lambda 运行时,例如 “python3.8”。
- Dependency manager: 依赖包管理器,例如 “pip”。
- SAM template: 所使用的 SAM 模板文件,默认是 “template.yaml”。
在输入完以上信息后,你可以看到 SAM CLI 已经为你生成了一个完整的无服务器应用程序模板,如下所示:
------------ --- --------- - --- ------ - --- ------------------ --- ------------ - --- ----------- - --- ------ - --- ---------------- --- ------ - --- ----------- - --- ----------- --- --------- --- ------------- --- ------- --- ----------
其中, .aws-sam
目录是 SAM 构建应用程序时生成的中间文件,hello_world
目录是 Python 应用程序的源代码。接下来,我们将详细介绍每个文件的作用和内容。
template.yaml
template.yaml
是 SAM 应用程序的主要配置文件。它基于 AWS CloudFormation,用于定义应用程序的组件和资源。下面是一个简单的 template.yaml
文件示例,含有一个 Lambda 函数和一个 API Gateway:
---------- -------------------------- ---------- ------------------- ----- ------------------------- ----------- -------- ------------ -------- ------------------ -------- --------- ------- ----------- ----- --- ----------- ----- ------ ------- --- -------- -------------- ------ ---- -----------------------------------------------------------------------------------
其中,Transform
字段指定了使用的 SAM 版本,Resources
字段定义了应用程序的组件和资源,Outputs
字段将组件的输出暴露给其他 AWS 服务。这里我们定义了一个名为 “HelloWorldFunction” 的 Lambda 函数,代码位于 hello_world/
目录下,函数的运行时为 Python 3.8,该函数触发的事件类型为 API Gateway 的 GET 请求。Lambda 函数的入口为 app.lambda_handler
函数。此外,我们将 API Gateway 的 URL 输出给了其他 AWS 服务。关于 SAM 模板的更多内容,请参考 AWS 官方文档。
hello_world/app.py
app.py
是 Python 应用程序的入口,它包含了 Lambda 函数的具体实现。下面是一个简单的 app.py
示例:
------ ---- --- --------------------- --------- ---- - - ---------- ------ ------- - -------- - - ------------- ---- ------- ---------------- - ------ --------
该函数接受一个事件对象 event
和一个上下文对象 context
作为参数,返回一个 HTTP 响应对象。在这个例子中,我们返回了一个包含 "Hello world!"
的 JSON 消息。
hello_world/requirements.txt
requirements.txt
文件定义了 Python 应用程序依赖的包。该文件中每一行定义一个依赖项,例如:
-----
在构建 SAM 应用程序时,SAM CLI 会根据此文件自动下载和安装依赖项。
events/event.json
event.json
文件是用于给 Lambda 函数传递事件对象的示例。例如,如果要测试 app.py
中的 Lambda 函数,可以根据需要修改 event.json
文件中的内容,然后在本地运行:
--- ----- ------ ------------------ ------- -----------------
构建和部署 SAM 应用程序
有了以上文件,我们就可以使用 SAM CLI 构建和部署无服务器应用程序了。在命令行中,进入 hello-world
目录,执行以下命令:
--- -----
该命令会自动安装依赖项,并构建 Lambda 函数。构建结果可以在 .aws-sam/build
目录下查看。
接下来,我们可以通过以下命令将此应用程序部署到 AWS Lambda:
--- ------ --------
该命令会启动一个命令行交互式界面,要求你输入一些必要的细节,例如:
- Stack name: CloudFormation 堆栈的名称,例如 “hello-world-stack”。
- AWS Region: 部署时使用的 AWS 区域,默认是 “us-east-1”。
- Confirm changeset: 执行更改之前确认更改集。
- Allow SAM CLI IAM role creation: 允许 SAM CLI 创建 IAM 角色。
输入完以上信息后,SAM CLI 将会为你自动构建并部署应用程序,创建 Lambda 函数和其他支持资源。
现在,你已经成功地使用 SAM CLI 构建和部署了一个无服务器应用程序。你可以使用 sam logs
命令查看应用程序的日志,使用 sam teardown
命令删除 AWS 资源。
SAM 应用程序模板
在本文中,我们使用的是 SAM 的快速入门模板。实际上,SAM 还提供了许多其他有用的模板,例如:
- HelloWorld:最简单的 Lambda 函数示例。
- EventBridge Hello World:使用 AWS EventBridge 触发 Lambda 函数的示例。
- Step Functions Hello World:使用 AWS Step Functions 状态机执行任务的示例。
- Alexa Skills Kit Hello World:使用 Alexa Skills Kit 与 Lambda 函数交互的示例。
这些模板可以帮助你更快速和便捷地构建无服务器应用程序,也可以通过 --template-file
标志来指定自定义模板文件。
结论
SAM CLI 是一个强大的命令行工具,它为你提供了快速、简单的方式来构建和部署无服务器应用程序。在本文中,我们详细介绍了如何使用 SAM CLI 构建一个 Lambda 函数,并详细介绍了各个文件的作用和内容。希望这篇文章能够帮助你更好地理解 SAM CLI 和无服务器应用程序的构建过程。如果你想要进一步学习 SAM CLI 和无服务器应用程序的开发,请参考 AWS 官方文档。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/671e8e002e7021665ef87ed2