使用 AWS Lambda 入门:逐步教程

AWS Lambda 是一项强大的 无服务器计算 服务,使您能够在不管理基础设施的情况下运行代码,因此您可以专注于编写代码,而无需担心服务器的配置或维护。

在本教程中,我们将探讨 AWS Lambda,从设置您的第一个函数到将其与其他 AWS 服务 集成。无论您是在处理数据流还是构建 API,本指南将帮助您使用 AWS Lambda 开始无服务器部署。

什么是 AWS Lambda?

AWS Lambda 是亚马逊网络服务(AWS)提供的无服务器计算平台,允许开发人员在不配置或管理服务器的情况下运行代码。AWS Lambda 通过动态分配资源来促进这一点,仅在需要时执行您的函数,按使用量收费,而不是按预分配的服务器容量收费。

这种应用程序开发方法消除了传统基础设施设置的需求,使您可以专注于编写和部署代码。

AWS Lambda 是事件驱动的,这意味着它由其他 AWS 服务的特定事件触发,非常适合构建响应迅速、可扩展且具有成本效益的解决方案。

传统的部署方法需要设置和管理服务器,这涉及到扩展、更新和修补。这些任务可能耗时、成本高且对偶发工作负载效率较低。相比之下,无服务器部署消除了这些开销,提供了开箱即用的自动扩展和高可用性。

AWS Lambda 的特点

  • 事件驱动架构: AWS Lambda函数根据数据更改、HTTP请求或AWS资源更新等事件被调用。
  • 多运行时支持: Lambda支持包括Python、Node.js、Java、Go、Ruby和.NET在内的各种运行时。开发人员还可以通过AWS Lambda Runtime API自定义运行时,使其成为适用于各种用例的多功能平台。
  • 自动伸缩性: AWS Lambda根据需求自动扩展应用程序。无论是处理单个事件还是同时处理数千个事件,Lambda都会动态调整计算资源。
  • 按需付费定价: 成本由请求数量和函数的执行时间决定。这消除了前期投资的需要,确保您只为使用的部分付费。
  • 集成安全性: Lambda与AWS身份与访问管理(IAM)配合工作,确保细粒度的访问控制和您的函数与其他AWS服务之间的安全交互。

Lambda的常见用例

  • 处理数据流:AWS Lambda 与Amazon Kinesis集成,以实时处理和分析流数据。例如,您可以监控物联网设备或动态处理日志文件。
  • 构建 RESTful API:Lambda 函数可以与 AWS API Gateway 配对,以为 web 和移动应用程序创建可扩展的 API。此设置通常用于处理用户身份验证、查询数据库或生成动态内容。
  • 自动化工作流程: 通过根据来自服务如 S3, DynamoDBCloudWatch 的事件触发 Lambda 函数,自动化复杂的工作流程。例如,您可以调整上传到 S3 的图像大小或自动存档旧的数据库记录。
  • 数据流水线中的事件处理: 您可以使用 Lambda 处理实时数据事件,比如处理上传到 S3 存储桶的新数据、在存储之前转换数据,或者通过外部 API 调用丰富数据流。
  • 无服务器后端处理: Lambda通常用于卸载后端任务,例如数据验证,ETL(提取、转换、加载)流程,或通过Amazon SNS或SES发送通知。

AWS Lambda是如何工作的?

AWS Lambda采用事件驱动模型,意味着它会根据特定触发器或事件执行代码。 Lambda功能的关键在于其与其他AWS服务的集成以及根据需要执行函数的能力。让我们逐步深入了解AWS Lambda的工作原理:

一个使用Lambda和其他核心AWS服务的示例架构图。图片来源:AWS。

1. 触发AWS Lambda函数

AWS Lambda函数由来自各种AWS服务或外部系统的事件触发。事件源的常见示例包括:

  • API Gateway:当用户向您的API Gateway端点发送HTTP请求(例如,GET或POST请求)时,Lambda可以执行一个函数来处理该请求——例如,一个用于在数据库中创建用户的RESTful API端点。
  • S3 事件:Lambda 函数可以响应在 S3 存储桶中上传、删除或修改对象等操作。例如,在将图像上传到 S3 存储桶后,它们可以调整图像大小或转换文件格式。
  • DynamoDB 流:对 DynamoDB 表的任何更改,如插入、更新或删除,都可以触发 Lambda 函数。例如,在向 DynamoDB 表添加新行时触发分析流水线。
  • 自定义应用:您可以直接使用 SDK、CLI 或 HTTP 请求调用 Lambda 函数,从而使其能够与外部系统集成。

2. 执行环境

当事件触发Lambda函数时,AWS会自动创建一个执行环境来运行代码。这个环境包括:

  • 您的函数代码: 您为特定任务编写的代码。
  • 分配的资源: 根据函数的需求动态分配CPU和内存(可配置)。
  • 依赖关系: 在部署过程中指定的任何外部库或软件包都将被包含在内。

3. 并发与扩展性

AWS Lambda 支持通过并行运行多个实例来实现自动扩展。它能够透明地进行扩展,无需任何配置。以下是并发工作的方式:

  • 如果您的函数需要同时处理 100 个事件,Lambda 将根据需要创建尽可能多的执行环境(直到并发限制)。

4. 与其他 AWS 服务的集成

AWS Lambda 深度集成 AWS 服务,以构建强大的端到端解决方案:

  • 数据库交互:Lambda 可以在执行期间读取/写入 DynamoDB 或 RDS 中的数据。
  • 消息服务: Lambda 可以通过 SNS 触发通知或将消息发送到 SQS 队列以便后续处理。
  • 监控和日志记录: CloudWatch 捕获所有日志、指标和 Lambda 函数的错误详细信息,使您能够监控和排查性能问题。

现在,让我们开始设置您的第一个 Lambda 函数吧!

设置 AWS Lambda

前提条件

  • AWS账户:确保您拥有一个活跃的AWS账户。在这里注册
  • IAM用户设置:创建一个具有AWS Lambda权限的IAM用户。请按照IAM指南操作。

设置开发环境

  • 安装 AWS CLI: 下载并安装 AWS CLI。使用您的 IAM 凭据对其进行配置。
  • 设置Python或Node.js:根据您的首选运行时安装PythonNode.js。AWS Lambda支持多种运行时。在本教程中,我们将使用Python运行时

Step 1: 访问AWS Lambda控制台

  1. 登录到AWS管理控制台
  2. 导航到 Lambda 服务。

AWS 控制台中的导航仪表板。

点击 Lambda 在导航菜单中 以查看仪表板:

AWS 控制台中的 AWS Lambda 仪表板。

步骤 2:创建一个新函数

  1. 点击创建函数
  2. 选择“从头开始创建作者”。
  3. 为您的函数提供一个名称。
  4. 选择运行时(例如,Python 3.11)。
  5. 单击创建函数按钮。

创建新的 AWS Lambda 函数。

这将需要几秒钟。函数创建完成后,您将在顶部看到一个成功的消息。

步骤 3:编写函数代码

AWS Lambda 浏览器 IDE 用于简单的代码编辑。

步骤 4:测试您的 Lambda 函数

此时,此功能仅返回字符串“Hello from Lambda!”

没有逻辑,没有依赖,什么都没有。

我们有一个名为lambda_function.py的Python脚本,其中包含名为lambda_handler()的函数,该函数返回一个字符串。

我们现在可以通过简单地点击测试按钮来测试它。

在浏览器中测试你的AWS Lambda函数。

由于我们的函数不需要输入,可以删除“事件JSON”。给事件命名,然后点击调用按钮。

成功测试AWS Lambda函数。

该函数已成功执行,并返回了消息。

太棒了!我们刚刚部署了一个使用AWS Lambda的无服务器函数。目前它还没有做太多事情,但已经可以运行了。每次调用这个函数时,它会返回一个简单的字符串。

使用事件触发Lambda

正如前面提到的,AWS Lambda架构允许您根据来自各种AWS服务的特定事件来触发函数,使其成为自动化工作流和系统集成的多功能工具。

例如,文件上传到S3存储桶、DynamoDB表中的更新或通过API Gateway的API调用都可以触发Lambda函数,实现实时处理和可伸缩执行。

1. 设置S3触发器

  1. 进入S3控制台。
  2. 选择S3存储桶。
  3. 在属性下,添加一个事件通知以在创建对象时触发您的Lambda函数。在AWS S3存储桶中创建事件通知。在S3中选择要触发的Lambda函数。

示例用例:

    • 自动调整上传到S3的图像大小。
    • 将视频转换为多种分辨率或格式以进行流式传输。
    • 上传时检查文件格式、大小或元数据。
    • 使用AI从上传的文档中提取文本(例如,通过Amazon Textract)。

2. API Gateway集成

  1. 转到API Gateway服务。

AWS控制台中的API Gateway服务仪表板。

  1. 创建一个新的REST API。

通过API Gateway创建新的REST API。

  1. 配置一个方法(例如,POST)来触发您的Lambda函数。

示例用例:

    • 构建用于实时响应的无服务器API。
    • 触发Lambda函数以创建并存储用户数据到数据库中。
    • 处理POST请求以实时处理和验证客户订单。
    • 触发Lambda函数从数据库或API查询并返回数据。

部署和监控 AWS Lambdas

部署 AWS Lambda 函数非常简单,可以根据需求使用不同的方法,例如使用 AWS 管理控制台进行手动部署或使用 AWS CLI 进行自动部署。

1. 使用 AWS 控制台进行手动部署

AWS 管理控制台提供了一个直观的网页界面来部署 Lambda 函数。此方法适合小型项目或快速更改。以下是通过控制台部署 Lambda 函数的步骤:

  1. 创建或编辑函数:
    • 登录到AWS 管理控制台
    • 导航到 AWS Lambda。
    • 点击创建函数以设置新函数或选择现有函数进行更新。
  2. 上传代码:
    • 选择上传来源并选择 .zip 文件或容器镜像。
    • 您可以在集成代码编辑器中直接编辑函数代码以进行小规模开发。
  3. 配置函数:
    • 根据您的使用案例定义环境变量、内存分配和超时限制。
    • 使用 AWS IAM 角色添加必要的权限,以允许该函数与其他 AWS 服务交互。
  4. 部署更改:
    • 点击部署以保存并激活您的更改。
    • 使用测试功能手动调用函数,验证其是否按预期工作。

2. 使用 AWS CLI 进行自动部署

AWS CLI 是部署和更新 Lambda 函数的高效方式,适用于自动化或频繁更新。它确保一致性,减少手动错误,尤其是在较大的项目或 CI/CD 流水线中。

步骤 1 – 准备部署包

将您的代码和依赖项打包到 .zip 文件中。例如:

zip -r my-deployment-package.zip .

步骤 2 – 使用 CLI 部署函数

使用 update-function-code 命令将新代码上传到 AWS Lambda:

aws lambda update-function-code \ --function-name MyFunction \ --zip-file fileb://my-deployment-package.zip

–function-name MyFunction \

–zip-file fileb://my-deployment-package.zip

aws lambda get-function --function-name MyFunction

步骤 3 – 检查部署

部署后,使用以下命令验证函数的状态:

该命令检索函数的配置并确认部署。

使用 CloudWatch 监控 Lambda

监控对于确保您的 Lambda 函数高效运行、优雅处理错误以及满足性能期望至关重要。AWS Lambda 集成Amazon CloudWatch提供监控和日志记录功能。

  1. Amazon CloudWatch 自动收集并显示您 Lambda 函数的关键指标。这些指标帮助您分析函数的性能并排除问题。
  2. 需要监控的指标:
  3. 调用次数:跟踪函数被调用的次数。帮助您了解流量模式和使用趋势。
  4. 错误:显示函数执行过程中出现的错误次数。用于识别失败率和调试问题。

持续时间:测量执行函数所需的时间。这对于优化性能和管理成本至关重要。

从命名空间列表中选择Lambda

选择要监视的函数以查看详细指标。

AWS Lambda 最佳实践

现在您已经部署了第一个 Lambda 函数,了解一些未来更复杂项目的最佳实践是有用的。在本节中,我提供了一些需要牢记的最佳实践。

1. 优化函数冷启动

  • 冷启动发生在 Lambda 函数在空闲后被调用时,导致 AWS 分配执行环境而产生轻微延迟。虽然 AWS 最小化了这种开销,但您可以采取以下步骤来减少冷启动时间:
  • 使用较小的部署包
  • 通过仅包含必要的依赖项,保持部署包轻量化。

使用 AWS Lambda Layers 等工具,跨函数共享常用库(例如 AWS SDK),而无需将它们包含在各个包中。

在可能的情况下压缩和精简代码,特别是针对基于 JavaScript 或 Python 的函数。

避免在函数中进行繁重的初始化操作

将资源密集型初始化(例如数据库连接、API客户端或第三方库)移出函数处理程序。这样可以确保代码仅在每个环境中执行一次并在调用之间重复使用。

利用预置并发

对于关键、对延迟敏感的函数,使用预置并发来保持执行环境准备好响应请求。虽然会带来额外成本,但可以确保高优先级工作负载的低延迟。

2. 保持函数无状态

无状态是无服务器架构的基本原则,确保您的应用程序能够无缝扩展:

避免依赖内存数据

Lambda函数是短暂的,意味着它们的执行环境是临时的,可能不会跨调用保留。不要依赖内存变量,而是将状态信息存储在外部系统中,如DynamoDB、S3或Redis。

确保幂等性

设计函数以优雅地处理重复事件。为请求使用唯一标识符,并检查日志或数据库,确保同一事件不会被多次处理。

3. 使用环境变量

  • 环境变量是配置Lambda函数的安全便捷方式:
  • 存储敏感信息

将API密钥、数据库连接字符串和其他机密信息存储为环境变量。AWS Lambda在休息时加密这些变量,在执行期间解密。

为了增加安全性,使用AWS Secrets Manager或Systems Manager Parameter Store动态管理机密。

简化配置管理

使用环境变量来管理配置,如日志级别、区域设置或第三方服务的 URL。这样可以消除硬编码数值的需要,使您的函数在各种环境(如开发、演练、生产)中更易移植。

结论

Source:
https://www.datacamp.com/tutorial/aws-lambda