使用 SAM CLI 构建无服务器应用程序

阅读时长 9 分钟读完

随着云计算技术的发展,无服务器(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

纠错
反馈