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

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

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


猜你喜欢

  • Mocha 测试框架中如何测试 WebSocket API

    WebSocket 是一种基于 TCP 协议实现的双向通信协议。它相比传统的 HTTP 请求响应轮询的方式具有更低的延迟和更高的效率。在前端开发中,我们经常会使用 WebSocket 来实现实时通信等...

    11 天前
  • AngularJS 最佳实践 5

    AngularJS 最佳实践 5 随着前端技术的迅猛发展,越来越多的开发者开始使用 AngularJS 来构建复杂的单页面应用程序。但是,由于 AngularJS 的架构和设计思路相对复杂,很容易出现...

    11 天前
  • Kubernetes 中 Service 为什么总是 Pending 状态?

    Kubernetes 是一个流行的容器编排平台,它提供了一种管理容器化应用程序的方法。在 Kubernetes 中,Service 是一种将多个 Pod 组织在一起的方式,以便它们可以通过单个 IP ...

    11 天前
  • 如何使用 Node.js 进行开发:从基础到高级

    在近年来,Node.js 已经成为前端技术栈中非常重要的一部分,它可以使前端开发者在服务器端使用 JavaScript 来进行开发。但是,很多人不知道如何开始学习 Node.js。

    11 天前
  • Cypress 如何模拟用户的行为

    前言 Cypress 是一款现代化的前端端到端测试工具,它提供了一整套完整的 API,让开发者可以针对自己的应用程序编写测试用例。本文将介绍 Cypress 中如何通过模拟用户的行为来进行测试。

    11 天前
  • 基于 React 和 Web Components 的应用开发最佳实践

    引言 React 和 Web Components 是当前前端技术中非常热门的两个话题,它们分别代表了前端开发中的两个不同的方向。React 是一个基于组件化思想的 JavaScript 库,可以帮助...

    11 天前
  • Flexbox 布局中如何实现子元素的固定宽度

    Flexbox 布局能够让我们在不同的设备上轻松地创建灵活的布局。然而,当子元素的内容变化时,它们的宽度也会随之变化,这不是我们希望看到的。在一些情况下,我们需要子元素的宽度保持不变,这文章将介绍如何...

    11 天前
  • 如何在 Serverless 应用程序中使用 SQS 队列

    Serverless 技术是一个正在快速成长的领域,尽管在 Serverless 应用程序中使用消息队列是一个不错的选择,但有关此主题的指导有点不足。 在本文中,我们将探讨如何使用 AWS SQS 队...

    11 天前
  • iOS 如何实现无障碍拖放

    对于视力障碍者来说,使用普通的拖放操作可能会有困难。在 iOS 上,我们可以通过开启“无障碍拖放”来解决这个问题。本文将介绍 iOS 如何实现无障碍拖放,并提供详细的示例代码。

    11 天前
  • Redis发布 - 订阅模式的实现及应用场景

    Redis提供了发布 - 订阅模式用于实现消息的发布和订阅。 在这种模式中,Redis充当一个基础架构,使发布者可以实时处理其事件并将消息发送给任何已经订阅该事件的客户端。

    11 天前
  • Next.js 实践:不只是服务端渲染,还有这些技巧

    介绍 Next.js 是一款用于构建 React 应用程序的框架。它以服务端渲染、静态生成和客户端渲染的形式提供了很多功能。本文将介绍在 Next.js 中的一些先进技巧。

    11 天前
  • PWA 应用中的图标和启动画面优化技巧

    PWA(Progressive Web App)是一种可以通过网页运行且功能类似于原生应用程序的应用程序。由于其具有易于安装、渐进式功能增强等特点,越来越多的开发者开始采用 PWA 技术进行开发。

    11 天前
  • Socket.io 实现客户端和服务器间实时双向通信的方法

    Socket.io 实现客户端和服务器间实时双向通信的方法 作为一名前端开发工程师,我们经常需要实现实时通信的功能。例如在线聊天室、实时游戏等等。Socket 是一种在客户端和服务器之间实现双向通信的...

    11 天前
  • 如何在 Express 中使用 Promise

    在开发 Web 应用程序时,使用 Promise 是一种非常有用的方式来处理异步代码。Express 是一个帮助我们构建 Web 应用程序的 Node.js 框架,它可以与 Promise 结合使用,...

    11 天前
  • Mongoose 查询数据为空时的问题及解决方法

    Mongoose 查询数据为空时的问题及解决方法 在使用 Mongoose 时,我们常常会遇到查询数据为空的情况。这种情况可能会导致程序出错,影响项目的运行。本文将介绍 Mongoose 查询数据为空...

    11 天前
  • Angular 中的状态管理与 Redux 简介

    Web 应用程序经常需要处理复杂的状态管理。为了实现更高效的状态管理,在 Angular 中,一些较小的应用程序使用本地状态管理技术,但对于较大规模的应用程序,需要更持久且可扩展的状态管理技术。

    11 天前
  • 在 Kotlin 中开发 RESTful API

    Kotlin 是一种功能强大的现代编程语言,它融合了面向对象和函数式编程的特性,具备高效、可读性高、易于学习等优点,越来越受到前端开发者的青睐。在本文中,我们将简单介绍如何在 Kotlin 中开发 R...

    11 天前
  • 使用 Jest 测试异步代码时如何调试

    在前端开发中,测试是非常重要的一环。尤其是在开发复杂应用程序的过程中,测试可以大大提高代码的质量和稳定性。Jest 是一个流行的 JavaScript 测试框架,它支持异步代码的测试,并且还提供了很好...

    11 天前
  • ES9 更新:解决 JavaScript 中存在的问题

    JavaScript 是一种高级编程语言,广泛用于前端开发和后端开发。由于 JavaScript 语言特性复杂,一些问题难以解决。ES9 收集了这些问题,提供了新的功能解决了这些问题。

    11 天前
  • Redis 持久化方式及其优缺点的总结

    在 Redis 中,持久化是保障数据存储的关键。Redis 有两种不同的持久化方式:RDB 持久化和 AOF 持久化。本文将详细介绍这两种持久化方式及其优缺点,以及如何选择适合你的业务场景的持久化方式...

    11 天前

相关推荐

    暂无文章