这次,我为2014年11月发布的AWS Lambda创建了一个历史时间表。AWS Lambda 是一项无服务器、全托管的代码执行服务,今年2024年11月将迎来其宣布发布的十周年纪念。虽然提前了一些,但为了提前庆祝这一重要时刻,我写了这篇文章。
文章中,我从AWS Lambda的诞生到功能的增加和更新进行了追踪,并将这些内容总结为当前AWS Lambda的功能列表和概述。我希望这些内容能为你提供了解各个AWS服务的功能概述,以及其背后的理念、保持不变的核心和发生变化的部分的线索。
AWS Lambda 历史时间表的创建背景与方法
这次之所以要创建AWS Lambda的历史时间表,是因为2024年将迎来AWS Lambda发布的十周年纪念日。
自2014年11月AWS Lambda发布以来,随着它与各种AWS服务的集成以及所支持的运行时环境(支持的编程语言)的扩展,我希望通过以下方法整理AWS Lambda的相关信息:
- 追踪AWS Lambda的历史,梳理其更新历程
- 汇总AWS Lambda的功能列表及特点
在创建这个时间表时,我主要参考了以下博客和文档的AWS Lambda相关内容:
- What's New with AWS?
- AWS News Blog
- What is AWS Lambda? - AWS Lambda
由于参考资料中公告和文章发布的时间可能存在差异,时间表中的日期可能会有些许偏差。所列内容主要包括与当前AWS Lambda相关的核心功能及其概述说明。因此,请注意,这份时间表并未涵盖AWS Lambda的所有更新,而是我精心挑选出的代表性更新。
AWS Lambda 历史时间表(2014年11月13日至2024年6月1日更新)
接下来便是AWS Lambda功能的时间表。到本文撰写时,AWS Lambda的历史已有约9年7个月,并将在2024年11月迎来其十周年纪念日
年月日 | 概要 |
---|---|
2022/07/15 | AWS Lambda Powertools for TypeScript 现已全面推出。 |
2017/11/30 | AWS Lambda 函数的最大内存分配限制已从 1536MB 增加到 3008MB。 |
2020/12/01 | AWS Lambda 函数的最大内存分配限制已从 3008MB 增加到 10240MB。 |
2014/11/13 | AWS Lambda 将发布。支持 Node.js 运行时并通过 zip 文件上传部署包。提供由对象更改的 Amazon S3 事件通知、到达 Amazon Kinesis 流的消息以及 Amazon DynamoDB 表更新触发的自动代码执行,最大执行超时为 1 分钟。 |
2020/02/20 | AWS Lambda 将添加到计算节省计划中。 |
2018/10/16 | AWS Lambda 服务级别协议 (SLA) 将公布。 |
2015/04/09 | AWS Lambda 正式发布 (GA)。它支持实时(同步)和异步事件,并引入了资源策略。 |
2015/04/08 | AWS Lambda 现在可以用作 AWS CloudFormation 中的自定义资源。 |
2020/10/20 | AWS Lambda 现在支持 AWS PrivateLink。您将能够通过接口类型 VPC 终端节点从 VPC 访问 Lambda API。 |
2022/07/19 | AWS Lambda 现在支持基于属性的访问控制 (ABAC)。 |
2015/04/09 | AWS 移动开发工具包现在支持 AWS Lambda。 |
2020/02/18 | ConcurrentExecutions 指标针对所有函数、别名和版本发布,允许您按版本和别名查看和监控 AWS Lambda 函数的并发执行数量。 |
2015/07/16 | DynamoDB Streams 现已全面推出,允许您使用 Lambda 函数作为 DynamoDB 表的触发器。 |
2018/11/19 | Kinesis 事件源现在支持 Kinesis Data Streams (KDS) 增强的扇出和 HTTP/2 数据检索功能。 |
2021/05/24 | Lambda 扩展现已普遍可用。使您能够使用 Lambda 合作伙伴提供的扩展。 |
2015/07/09 | Lambda 控制台现在提供“蓝图”,其中提供了示例事件源配置和示例代码。 |
2019/06/20 | Lambda 控制台监控页面现在包括来自 Amazon CloudWatch Logs Insights 的报告。 |
2021/09/29 | Lambda 支持 AWS Graviton2 处理器的 64 位 ARM 架构 (arm64)。 |
2023/11/09 | Lambda 现在支持 Amazon Linux 2023 作为托管运行时和容器基础映像。 |
2021/07/07 | Lambda 现在支持 Amazon MQ for RabbitMQ 作为事件源。 |
2020/11/05 | Lambda 现在支持 Amazon MQ 作为事件源。 |
2020/08/13 | Lambda 现在支持 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 作为事件源。 |
2021/06/29 | Lambda 现在支持 SASL/PLAIN 身份验证机制以及自我管理的 Apache Kafka 事件源。 |
2020/12/15 | Lambda 现在支持自我管理的 Apache Kafka 作为事件源。 |
2016/12/01 | Lambda@Edge 允许您执行 Lambda 函数以响应 Amazon CloudFront 事件。 |
2019/05/14 | Lambda执行环境使用Amazon Linux 2018.03的公告。 |
2015/06/15 | 可以用 Java 创建 Lambda 代码。 |
2016/12/01 | 支持 C#。 |
2018/01/15 | 支持 Go 和 .NET 2.0 运行时。 |
2023/11/17 | 支持 Java 21 运行时。 |
2023/11/15 | 支持 Node.js 20 运行时。 |
2016/04/07 | 支持 Node.js 运行时 v4.3。 |
2017/03/22 | 支持 Node.js 运行时 v6.10。 |
2023/07/27 | 支持 Python 3.11 运行时。 |
2023/12/14 | 支持 Python 3.12 运行时。 |
2018/11/19 | 支持 Python 3.7 运行时。 |
2021/08/16 | 支持 Python 3.9 运行时。 |
2018/11/29 | 支持 Ruby 2.5 运行时。 |
2023/06/07 | 支持 Ruby 3.2 运行时。 |
2024/04/04 | 支持 Ruby 3.3 运行时。 |
2022/02/24 | 支持.NET 6 运行时。 |
2024/02/22 | 支持.NET 8 运行时。 |
2018/09/11 | 支持PowerShell Core语言。 |
2018/10/11 | 使用 AWS Lambda 控制台管理和监控您的无服务器应用程序。 |
2019/04/25 | 使用 GetLayerVersionByArn API,您可以使用版本 ARN 作为输入来下载层版本信息。 |
2015/10/08 | 使用 Python 开发 Lambda 函数代码成为可能。 |
2020/03/02 | 使用 VPC 的 Lambda 状态生命周期更新适用于所有 Lambda 函数。 |
2019/10/31 | 借助 Lambda 控制台,您可以创建具有与 AWS CodeCommit、GitHub 等集成的持续交付管道的无服务器应用程序。 |
2018/11/29 | 可以将 Lambda 函数指定为 Application Load Balancer 的目标。 |
2020/11/23 | 启用代码签名,管理员仅在部署期间接受签名的代码。 |
2019/11/25 | 如果您在创建或更新功能时连接到VPC,您可以立即创建共享弹性网络接口(ENI)。 |
2019/12/16 | 宣布对使用 VPC 的 Lambda 状态生命周期进行更新。 |
2020/10/08 | 将 Lambda 与操作工具集成的新 AWS Lambda 扩展现已可供预览。 |
2019/09/03 | 开始在您的 VPC 中使用新的弹性网络接口 (ENI)。随着功能扩展,无需创建额外的网络接口,从而显着缩短启动时间。 |
2018/11/16 | 异步调用的最大负载大小从 128 KB 增加到 256 KB。 |
2018/11/29 | 引入了 Lambda 层。库、自定义运行时和其他依赖项可以与函数代码分开打包和部署。 |
2017/08/11 | 引入了 SAM Local(当前为 SAM CLI)。在本地开发、测试和分析无服务器应用程序。 |
2017/11/30 | 引入新的 Lambda 控制台,可以更轻松地调试和修改函数代码。可以为各个函数设置并发限制。 |
2020/01/20 | 当函数连接到VPC时,在Reason Code中添加了StateReasonCode和LastUpdateStatusReasonCode。 |
2022/11/28 | 您可以使用 Lambda SnapStart 来减少 Java 函数的启动时间。 |
2016/11/30 | 您将能够通过与 Amazon Lex 链接来创建聊天机器人。 |
2022/03/16 | 您现在可以与同一 AWS 账户中的其他用户共享测试事件。 |
2019/09/23 | 您现在可以为 Amazon DynamoDB 和 Amazon Kinesis 事件源映射配置自定义批处理窗口。 |
2016/11/18 | 您现在可以使用 AWS SAM 定义无服务器应用程序。 |
2015/04/09 | 您现在可以使用 Amazon SNS 通知作为触发器来调用 Lambda 函数。 |
2022/03/24 | 您现在可以使用 Lambda 函数将临时存储从 512MB 扩展到最多 10GB。 |
2019/12/03 | 您现在可以使用 Lambda 控制台创建 Amazon RDS 代理。 |
2016/11/18 | 您现在可以使用环境变量在代码外部指定 Lambda 函数的设置。 |
2019/11/19 | 您现在可以创建支持从 Amazon SQS FIFO 队列读取的事件源映射。 |
2020/06/16 | 您现在可以将 Amazon EFS 文件系统连接到 Lambda 函数。 |
2020/12/01 | 您现在可以将容器映像用于 Lambda 函数。 |
2019/11/25 | 您现在可以将异步调用的执行结果记录发送到 SQS 队列、SNS 主题、Lambda 函数和 EventBridge 事件总线等目的地。 |
2015/10/08 | 您现在可以设置计划事件以定期运行代码。 |
2016/02/11 | 您现在可以配置 Lambda 函数来访问 VPC 内的资源。 |
2022/04/06 | 支持 AWS Lambda 函数 URL 作为 Lambda 函数的专用 HTTPS 终端节点。 |
2019/11/26 | 支持 Amazon CloudWatch 指标的百分位数。 |
2018/06/28 | 支持 Amazon Simple Queue Service (Amazon SQS) 作为事件源。 |
2020/08/12 | 支持 Java 8 和自定义运行时(使用 Amazon Linux 2)。 |
2019/11/25 | 支持 Kinesis Streams 和 DynamoDB Streams 的并行化因子,允许事件源映射一次处理多个批次。 |
2022/03/11 | 支持 Lambda 通过基于资源的策略向 AWS Organizations 中的组织授予权限。 |
2019/05/15 | 支持 Node.js 10 运行时(使用 Amazon Linux 2)。 |
2019/11/18 | 支持 Node.js 12、Python 3.8 和 Java 11 运行时。 |
2021/02/03 | 支持 Node.js 14 运行时(使用 Amazon Linux 2)。 |
2022/05/12 | 支持 Node.js 16 运行时(使用 Amazon Linux 2)。 |
2022/11/18 | 支持 Node.js 18 运行时(使用 Amazon Linux 2)。 |
2018/04/02 | 支持 Node.js 运行时版本 8.10。 |
2020/02/19 | 支持 Ruby 2.7 运行时(使用 Amazon Linux 2)。 |
2018/07/09 | 支持.NET Core 2.1.0运行时。 |
2020/03/31 | 支持.NET Core 3.1.0运行时。 |
2023/01/24 | 支持使用 AWS Lambda 进行运行时管理控制。允许您控制函数何时更新到新的运行时版本。 |
2021/11/19 | 支持使用 Amazon MSK 和自我管理的 Apache Kafka 事件源进行 mTLS 身份验证。 |
2019/11/25 | 支持使用 Kinesis 流和 DynamoDB 流的事件源故障处理功能。 |
2021/11/26 | 支持使用 Kinesis、DynamoDB 和 Amazon SQS 事件源进行事件过滤。 |
2017/11/28 | 支持使用别名切换流量并安全部署新版本的 Lambda 函数。 |
2023/04/07 | 支持响应负载流。包含大于 6MB 有效负载的响应有效负载现在可以分阶段流式传输到客户端。 |
2023/02/09 | 支持异步调用的 CloudWatch 指标(AsyncEventsReceived、AsyncEventAge、AsyncEventsDropped)。 |
2023/10/12 | 支持用于 VPC 出站连接的 Internet 协议版本 6 (IPv6)。双栈VPC内的资源(出站连接)可以通过IPv6访问。 |
2020/11/12 | 支持运行时日志 API。 Lambda 扩展现在可以订阅执行环境的日志流。 |
2015/10/08 | 最大执行超时限制从 1 分钟增加到 5 分钟。 |
2018/10/10 | 最大执行超时限制从 5 分钟增加到 15 分钟。 |
2018/11/29 | 构建自定义运行时以使用任何编程语言运行 Lambda 函数。 |
2022/07/22 | 添加了 IAM 条件键 (lambda:SourceFunctionArn),用于指定可在 IAM 策略条件中使用的请求源函数的 ARN。 |
2020/09/17 | 添加了对 AWS Lambda 的控制台支持,以可视化 AWS Step Functions 工作流程。 |
2019/12/03 | 添加了将预置并发分配给函数版本和别名的选项。 |
2019/11/25 | 添加了异步调用的配置选项。可以设置最大重试尝试次数和最大事件期限。 |
2015/10/08 | 添加了版本控制功能,允许您在不同环境中运行不同版本的 Lambda 函数。 |
2020/08/10 | 现在可以使用 AWS Lambda VPC 设置的 IAM 条件键(lambda:VpcIds、lambda:SubnetIds、lambda:SecurityGroupIds)。 |
2020/06/18 | 现在可以配置 HTTP/2 流的批处理窗口。 |
2020/01/20 | 现在将默认应用使用 VPC 的 Lambda 生命周期更新。 |
2015/07/09 | 现在,您可以使用 Amazon API Gateway 从任何与 REST 兼容的客户端调用 Lambda 函数,而以前需要 AWS 开发工具包才能从 Web、移动和 IoT 应用程序调用 Lambda 函数。 |
2015/05/28 | 现在,您可以通过将 Lambda 函数部署包(.zip 文件)上传到同一区域中的 Amazon S3 存储桶并指定存储桶名称和对象键名称来创建或更新 Lambda 函数。 |
2016/06/23 | 简化了 Lambda 控制台中的角色创建过程。 |
2017/04/19 | 部署 X-Ray 来检测、分析和优化 Lambda 应用程序性能问题。 |
2021/03/02 | 重新设计了 Lambda 控制台以提高性能和一致性。 |
现阶段AWS Lambda的功能列表和概述
接下来,我将详细介绍当前AWS Lambda的主要功能。AWS Lambda是一项无服务器计算服务,它允许用户无需管理服务器或基础设施即可执行代码。
AWS Lambda通过提供事件驱动的处理和自动扩展资源的功能,提高了应用程序的开发和运维效率。此外,它会自动分配执行代码所需的资源,并根据实际使用量计费,从而实现了高性价比的解决方案。同时,AWS Identity and Access Management (IAM) 提供的访问管理,以及数据在传输中和存储中的加密功能,确保了高水平的安全性。除了这些特点外,AWS Lambda还能与其他AWS服务轻松集成,实现快速的应用开发和灵活的运维。
AWS Lambda的应用场景
AWS Lambda被设计用于构建可扩展且事件驱动的应用程序,并广泛应用于各种场景中。以下是AWS Lambda的主要应用场景:
-
数据处理
AWS Lambda可用于触发对S3或DynamoDB等数据存储的更改事件,执行数据加工或转换。 -
Web应用的后台
通过将API Gateway与Lambda结合,可以构建无服务器的Web应用后台。 -
事件驱动的工作流
结合Step Functions与Lambda,可以实现具有复杂业务逻辑的工作流。
应用场景的具体示例
例如,以下是一些具体的应用场景:
-
图像缩略图生成
当图像上传到S3存储桶时,以此事件触发Lambda自动生成缩略图,并将其保存到另一个S3存储桶中。通过这种方式,可以实时生成应用程序所需的缩略图。 -
Web应用的后台
通过使用API Gateway与Lambda构建Web应用的后台,Lambda实现业务逻辑并通过API Gateway调用,从而实现前端与后台的分离,构建出可扩展的应用程序。 -
IoT数据处理
通过AWS IoT收集来自IoT设备的数据,并实时在Lambda中进行处理。例如,可以基于传感器数据进行异常检测,并触发警报等操作。
通过这些应用场景可以看出,AWS Lambda在多种场景下提供了无服务器计算服务,使得事件驱动且可扩展的应用程序设计成为可能。
AWS Lambda的概念图
在详细介绍AWS Lambda的主要功能和特点之前,为了帮助大家更容易理解AWS Lambda的整体架构,下面先展示一张AWS Lambda的概念图。
在这张概念图中,我们展示了来自事件源的事件如何通过同步或异步方式由AWS Lambda函数处理。事件源会根据自身的特点决定Lambda函数是以同步还是异步方式被调用。有些服务同时支持同步和异步调用,而有些服务则仅支持其中一种方式。
对于异步调用,事件会通过AWS Lambda的事件队列进行处理。
Lambda函数支持多种编程运行时环境,包括Node.js、Python、Java、.NET、Ruby和OS-only Runtime,这使得可以执行用不同编程语言编写的代码。
在Lambda函数中,您可以根据需要使用AWS SDK或API来调用AWS服务或其他服务。异步调用的结果可以发送到指定的目标,例如Amazon SQS、Amazon SNS、AWS Lambda、Amazon EventBridge等。
接下来,我将详细介绍这些AWS Lambda的功能和设置。
AWS Lambda函数的运行时环境
AWS Lambda通过“运行时”提供对多种编程语言的支持。运行时提供了特定语言的环境,用于在Lambda与函数之间中继事件调用、上下文信息以及响应。AWS Lambda用户可以使用AWS Lambda提供的托管运行时,也可以构建自定义运行时。
在创建函数时选择运行时,新版本的迁移需要更改运行时标识符。由于AWS Lambda不保证跨主要版本的向后兼容性,因此此更新需要由AWS Lambda用户主动执行。
当前支持的主要运行时
截至本文撰写时,AWS Lambda支持以下运行时环境:
- Node.js: nodejs20.x、nodejs18.x、nodejs16.x
- Python: python3.12、python3.11、python3.10、python3.9、python3.8
- Java: java21、java17、java11、java8.al2
- .NET: dotnet8、dotnet6
- Ruby: ruby3.3、ruby3.2
- OS-only Runtime: provided.al2023、provided.al2(通过使用自定义运行时,可以使用其他语言,如Go和Rust)
Lambda使用这些运行时支持x86_64和arm64架构。Lambda定期管理运行时更新,提供安全补丁和小版本更新支持。然而,当运行时被弃用时,新的安全补丁应用和技术支持将终止,因此建议迁移到最新或受支持的运行时。
基于此信息,在开发和运维Lambda函数时,保持对所用运行时的支持状况的关注,并制定必要的运行时升级计划非常重要。
AWS Lambda函数的设置选项
在配置AWS Lambda函数时,可以通过Lambda API或控制台自定义函数的核心功能和选项。以下是主要的配置选项及其可设置的值范围:
-
内存(Memory)
设置函数执行所需的内存量。内存量直接影响性能,分配的内存量会相应地扩展CPU和网络带宽。
可设置值:最小128MB,最大10,240MB -
临时存储(Ephemeral Storage)
学习如何增加函数的临时存储容量以及调整时机。临时存储用于保存函数执行期间生成的临时文件。
可设置值:最小512MB,最大10,240MB -
超时(Timeout)
设置函数的最大执行时间。适当地设置此值可以防止意外的长时间执行并控制成本。
可设置值:最小1秒,最大900秒(15分钟) -
环境变量(Environment Variables)
使用环境变量将配置信息与代码分离,使代码更便携,同时隔离敏感信息。环境变量允许在函数设置中存储配置值,而无需在代码中直接硬编码。 -
VPC
应用VPC设置到Lambda函数,使其能够安全地与VPC内的RDS、EC2实例等资源进行交互。使用接口VPC端点,可以在不通过公开互联网的情况下调用Lambda函数。此设置可以增强安全性,并可能提高性能,但需要适当的网络配置。 -
文件系统(File System)
将Amazon EFS挂载到Lambda函数,以在本地目录中使用。通过文件系统,函数代码可以安全地并发访问和修改共享资源。 -
别名(Aliases)
设置别名以允许客户端调用特定的Lambda函数版本。此设置使您可以在不更新客户端的情况下指定不同版本的函数。 -
版本(Versions)
通过发布函数版本,将代码和配置保存为不可更改的资源。这使得稳定的部署和回滚更加容易。 -
响应流(Response Streaming)
配置AWS Lambda函数的URL以将响应负载流式传输到客户端。响应流通过减少第一个字节的时间,提高了对延迟敏感的应用程序的性能,并可用于构建返回大负载的函数。
AWS Lambda函数的部署方法
AWS Lambda函数的部署主要有两种方法:
- 上传
.zip
文件包。 - 创建并上传容器镜像。
以下是这两种方法的简要说明:
通过.zip
文件包进行部署
.zip
文件包包含应用程序的代码及其依赖项。在使用Lambda控制台或工具包创建函数时,Lambda会自动生成代码的.zip
文件包。如果使用Lambda API、命令行工具或AWS SDK创建函数,则需要手动创建部署包。可以将部署包从Amazon S3或本地计算机上传,以部署函数代码。
文件权限是必需的,以便Lambda运行时能够读取部署包中的文件。非可执行文件需要644权限,目录和可执行文件需要755权限。
通过容器镜像进行部署
还可以使用容器镜像来打包代码及其依赖项。通过使用Docker CLI等工具创建容器镜像,并将其上传到Amazon Elastic Container Registry (Amazon ECR)。调用函数时,Lambda会将容器镜像部署到执行环境中。Lambda执行函数的初始化代码后,将调用配置的入口点来运行函数。
AWS提供与Lambda服务兼容的开源基础镜像,还可以从其他容器注册表使用其他基础镜像。此外,AWS还提供了运行时接口模拟器,用于在本地测试函数。
作为容器镜像部署函数时,打包和部署不会产生额外费用,但将容器镜像存储在Amazon ECR时会产生相关费用。另外,Lambda首次下载容器镜像时,会对镜像进行优化,并加密后保存。所有加密密钥由AWS KMS保护,可以通过AWS CloudTrail日志审计Lambda的密钥使用情况。
因此,选择适合项目需求和管理方便的部署方法非常重要。
AWS Lambda函数的调用方法和测试
在部署AWS Lambda函数后,可以通过多种方式调用和测试函数。以下是主要的调用方法和测试方式的简要说明,这些可以作为博客文章的一个章节来总结。
主要的函数调用方法
-
Lambda控制台
使用Lambda控制台可以直接测试函数,非常方便于开发和调试阶段。 -
AWS SDK
使用AWS SDK从程序中调用Lambda函数,通常用于应用程序与Lambda函数集成时。 -
Invoke API
可以直接使用Lambda的Invoke API调用函数。Invoke API允许进行细致的设置和同步/异步控制。 -
AWS命令行界面 (CLI)
使用AWS CLI可以直接从命令行调用函数,这对于脚本和自动化任务非常方便。 -
AWS Lambda Function URLs(函数URL) HTTPS端点
可以配置AWS Lambda Function URLs,通过专用的HTTP(S)端点调用函数。通过此HTTPS端点,可以将Lambda函数用作接收HTTP请求的Web服务。但由于AWS Lambda Function URLs可以直接从互联网访问,因此必须正确配置访问控制。可以利用基于资源的策略只允许来自特定IP地址的访问,或者通过正确配置跨域资源共享(CORS)来管理安全风险。 -
事件源映射
当Amazon DynamoDB、Amazon Kinesis、Amazon SQS等AWS服务发生事件时,可以将其作为触发器自动调用Lambda函数。通过事件源映射,可以高效处理流数据或队列中的消息。
同步调用与异步调用
同步调用
调用方会等待Lambda函数的执行完成并接收结果。同步调用适用于需要实时获取函数响应的情况。
异步调用
事件通过AWS Lambda的事件队列异步传递给Lambda,Lambda在后台处理。调用方会立即接收到响应,处理结果稍后确认。这种调用方式适合事件驱动的处理或可以接受处理延迟的情况。异步调用的结果记录可以发送到指定的目标,如Amazon SQS、Amazon SNS、AWS Lambda、Amazon EventBridge等。对于异步调用的结果记录,可以分别为成功处理的事件和所有处理尝试均失败的事件指定不同的目标。这些结果记录的目标还可以用于触发基于事件驱动的处理。
测试与调试
控制台测试
在Lambda控制台中,可以创建自定义测试事件并对函数进行测试。通过控制台测试,可以立即确认正在开发的函数是否按预期工作。
本地测试
使用AWS SAM(无服务器应用程序模型)或本地开发环境,也可以在本地测试Lambda函数。这有助于在部署前进行详细的调试。
通过理解AWS Lambda的多种调用方式,并采用合适的测试方法,您可以根据应用程序的需求高效地构建系统。根据开发阶段或运维场景,合理利用同步调用、异步调用和事件源映射,再结合丰富的AWS工具和服务,可以显著提升函数的性能和可靠性。
AWS Lambda函数的管理方法
通过以下方法和工具,可以高效地管理AWS Lambda函数。
使用AWS CLI
AWS命令行界面(CLI)是一种直接从命令行管理Lambda函数及其他AWS资源的工具。AWS CLI利用Python编写的AWS SDK(Boto3)与AWS服务通信。使用该工具,可以对函数的创建、更新、删除等管理操作进行脚本化和自动化。
函数的扩展
Lambda提供了以下两种并发控制功能:
-
预留并发数(Reserved Concurrency)
可以为特定函数预留并发数。通过此设置,可以在不受其他函数影响的情况下,保持所需的性能。 -
预置并发数(Provisioned Concurrency)
为了提高响应速度,可以预先初始化执行环境。此设置可以减少启动延迟(冷启动),确保函数即时响应。
代码签名
通过使用代码签名功能,可以确保部署到Lambda函数的代码由授权开发人员签名,且未被篡改。这对于提高函数代码的可信度和完整性至关重要。部署时会验证签名,如果验证失败,部署将被阻止。
通过标签进行整理
为AWS资源添加标签,可以对资源进行分类并简化管理。通过将项目名称、部门名称、环境名称(如开发、测试、生产)等作为标签,可以更容易地管理成本中心和设置访问控制。
使用层(Layers)
Lambda层是用于在函数之间共享公共依赖项和库的功能。通过使用层,可以在一个地方管理这些公共组件,并在多个Lambda函数中重用。这种设置有助于保持部署包的尺寸较小,同时简化开发过程并减少代码重复。
通过适当地使用这些功能,可以提升Lambda函数的性能、安全性和管理效率。
AWS Lambda的安全措施
在使用AWS Lambda时,安全性依然是最高的优先事项。AWS的云安全性旨在满足最注重安全的组织的需求。与其他AWS服务一样,AWS Lambda也遵循AWS与客户之间的共享责任模型,即AWS负责云基础设施的安全性,而客户则负责其使用的AWS服务的安全配置和管理。
使用AWS Lambda时的数据保护与合规性
为了在使用AWS Lambda时实现数据保护与合规性,以下是一些推荐的做法:
- 保护AWS账户的认证信息:通过设置AWS IAM Identity Center和AWS身份与访问管理(IAM),只授予每个用户所需的权限。
- 使用多因素认证(MFA):加强账户的安全性。
- 使用SSL/TLS进行通信:与AWS资源通信时,使用TLS 1.2及以上版本(推荐TLS 1.3)。
- 记录API和用户活动日志:通过设置AWS CloudTrail,增强安全监控和活动监控。
- 利用AWS的加密解决方案:与默认的安全控制结合使用。
- 使用Amazon Macie等管理安全服务:帮助保护存储在Amazon S3中的敏感数据。
- 利用安全监控工具:通过使用AWS Security Hub和Amazon GuardDuty,持续监控安全状态,并快速检测威胁。
AWS Lambda的IAM与访问管理
在AWS Lambda中,IAM在访问管理中起着核心作用。通过使用IAM,管理员可以安全地控制对AWS资源的访问。使用IAM的关键点包括:
- 适当的认证与授权管理:使用IAM控制谁可以访问Lambda资源。
- 基于策略的访问控制:使用IAM策略定义特定操作和资源的访问权限。
传输时与存储时的加密
与其他AWS服务一样,AWS Lambda也推荐使用数据传输时的加密和数据存储时的加密来保护数据。
- 传输时的加密:Lambda API端点仅支持通过HTTPS的安全连接,通过AWS管理控制台、SDK、API管理Lambda资源时,使用TLS加密通信。
- 存储时的加密:Lambda始终对环境变量进行加密存储。默认情况下使用AWS管理的密钥,但也可以使用客户管理的密钥进行加密。
安全治理与合规性
使用AWS Lambda的企业应根据数据敏感性和法律法规构建适当的治理策略。使用AWS CloudFormation Guard或AWS Config来自动评估Lambda函数的安全性并维持合规性。此外,还包括对Lambda函数的标签管理和VPC连接等方面的设置。
弹性与扩展性
- 版本管理与别名:Lambda支持代码和配置的版本管理,实现蓝绿部署等高级部署策略。
- 高可用性:Lambda在多个可用区中运行功能,即使某些可用区出现服务中断,事件也能继续得到处理。
通过这些实践,您可以安全地使用AWS Lambda,并将安全风险降至最低。定期进行安全评估和改进,持续提升系统的安全性是十分推荐的做法。
AWS Lambda的监控
在AWS Lambda中,可以通过与Amazon CloudWatch等监控服务集成来对Lambda函数进行监控和故障排除。Lambda会自动监控函数,并将请求数、每个请求的执行时间、发生错误的请求数等指标发布到CloudWatch。
在Lambda控制台中监控函数
在Lambda控制台的监控选项卡中,可以通过可视化的方式查看请求数、执行时间、错误数等指标。利用这些图表,可以快速了解函数的性能,并在问题出现时缩短响应时间。
与CloudWatch Logs的集成
函数执行的日志会自动发送到CloudWatch Logs。通过配置CloudWatch Logs,可以从日志中获取函数执行的详细信息,帮助分析错误原因和性能问题。
使用AWS X-Ray进行可视化
通过AWS X-Ray,可以可视化查看与函数调用相关的跟踪数据,有助于识别性能瓶颈和错误原因。X-Ray能够跟踪服务间的请求,非常适合理解整个应用程序的运行情况。
Amazon CloudWatch Lambda Insights
使用CloudWatch Lambda Insights,可以收集和汇总函数执行的系统级别指标和日志,帮助诊断Lambda函数的问题。Lambda Insights提供了CPU使用率、内存、磁盘、网络使用情况等指标,帮助更深入地理解函数的性能。
通过使用这些工具和服务,可以维持AWS Lambda函数的健康状态,并做好应对意外停机或性能下降的准备。各种监控工具有助于高效地运维Lambda函数,最终提升应用程序的可靠性和客户体验。
通过AWS Lambda层管理共享组件
AWS Lambda层是一种功能,用于将共享组件与Lambda函数的代码分离管理,并实现重用。通过使用层,您可以将库、自定义运行时和其他依赖项与Lambda函数分离管理,并在多个Lambda函数之间共享这些组件。使用AWS Lambda层,您可以在保持函数部署包小巧的同时,提高代码的可重用性。
Lambda层可以关联到特定的Lambda函数,函数执行时,层的内容会添加到运行时环境中。开发者可以创建自己的层,或使用其他开发者公开的层。
使用AWS Lambda层可以带来以下好处:
-
提高代码的可重用性
通过在多个Lambda函数中共享相同的库或自定义运行时,提高了代码的可重用性。 -
减少Lambda函数的大小
通过将共享依赖项移动到层中,可以减少Lambda函数的大小,从而缩短函数的部署时间。 -
简化管理
由于库或运行时的更新可以在一个地方进行,管理变得更加简便。
您可以通过AWS Lambda控制台、AWS CLI、AWS SDK等工具创建和管理层。创建的层可以在Lambda函数的设置中指定,从而被函数使用。
利用AWS Lambda层,您可以提高代码的管理性和可重用性,从而实现更高效的无服务器应用程序开发。
可调用AWS Lambda的AWS服务
作为无服务器计算服务,AWS Lambda在事件驱动处理中的核心作用之一是与其他AWS服务无缝集成,利用各种AWS服务中的事件触发Lambda函数的执行。
以下是一个表格,概述了哪些主要的AWS服务可以调用AWS Lambda函数、使用什么方式(事件驱动、异步、同步、事件源映射等)进行调用,以及在什么用例中使用这些服务。
服务 | 调用方法 | 描述 |
---|---|---|
亚马逊 Alexa | 事件驱动 同步调用 | 使用 Lambda 函数作为 Alexa 技能的后端来生成自定义响应以响应用户请求。 |
适用于 Apache Kafka 的 Amazon 托管流式处理 | 事件源映射 | 将 Kafka 主题中的消息流式传输到 Lambda 函数以进行实时数据处理。 |
自我管理的 Apache Kafka | 事件源映射 | 运行由来自自我管理的 Apache Kafka 集群的消息触发的 Lambda 函数,以执行实时数据处理。 |
亚马逊 API 网关 | 事件驱动 同步调用 | 您可以通过 REST API 或 WebSocket API 调用 Lambda 函数。 API Gateway 将 HTTP 请求转换为 Lambda 函数并充当后端。 |
AWS 云形成 | 事件驱动 异步调用 | 将 Lambda 函数定义为自定义资源,以在堆栈创建或更新过程中自动执行某些操作。 |
亚马逊 CloudFront (Lambda@Edge) | 事件驱动 同步调用 | 在处理 CloudFront 请求或响应时执行 Lambda 函数。通过这种方式,可以在全球内容交付网络中执行自定义代码。 |
亚马逊 CloudWatch 日志 | 事件驱动 异步调用 | 使用 CloudWatch Logs 日志组中的日志数据作为触发器来执行 Lambda 函数。通过这种方式,您可以根据日志数据设置自动操作。 |
AWS 代码提交 | 事件驱动 异步调用 | 执行由推送到存储库触发的 Lambda 函数,并执行自动化任务以响应代码更改。 |
AWS 代码管道 | 事件驱动 异步调用 | 使用 Lambda 函数在管道的每个阶段执行自定义操作和验证。 |
亚马逊认知 | 事件驱动 同步调用 | 启动 Lambda 函数以响应用户池事件。例如,您可以在用户注册或身份验证期间运行自定义逻辑。 |
AWS配置 | 事件驱动 异步调用 | 执行由配置更改或合规性规则评估结果触发的 Lambda 函数。 |
亚马逊连接 | 事件驱动 同步调用 | 在 Amazon Connect 联系流中调用 Lambda 函数以实现动态客户交互。 |
亚马逊动态数据库 | 事件源映射 | 将表更改数据作为流发送到您的 Lambda 函数,以自动处理以响应数据更改。 |
亚马逊弹性文件系统 | 特殊积分方法 | 调用 Lambda 函数以响应 EFS 中的文件系统事件,以根据文件操作执行自定义操作。 |
弹性负载均衡(应用程序负载均衡器) | 事件驱动 同步调用 | 它直接触发 Lambda 函数来响应 HTTP(S) 请求并充当后端服务器。 |
AWS物联网 | 事件驱动 异步调用 | 执行由 IoT 设备消息触发的 Lambda 函数来处理和分析设备数据。 |
亚马逊运动 | 事件源映射 | 将流数据实时发送到 Lambda 函数进行数据处理。 |
亚马逊数据消防管 | 事件驱动 同步调用 | 将收集到的数据发送到 Lambda 函数进行数据转换和预处理,然后将其加载到数据存储或分析工具中。 |
亚马逊莱克斯 | 事件驱动 同步调用 | 使用 Lambda 执行聊天机器人意图处理并动态控制用户交互。 |
亚马逊MQ | 事件源映射 | 执行由来自消息代理的消息触发的 Lambda 函数。 |
亚马逊简单电子邮件服务 (SES) | 事件驱动 异步调用 | 根据传入电子邮件运行 Lambda 函数以自动处理和回复电子邮件。 |
亚马逊简单通知服务 (SNS) | 事件驱动 异步调用 | 执行通过向主题发布消息触发的 Lambda 函数。 |
亚马逊简单队列服务 (SQS) | 事件源映射 | 执行由消息队列中的消息触发的 Lambda 函数。 |
亚马逊简单存储服务(S3) | 事件驱动 异步调用 | 执行由存储桶中的对象操作(创建、更新、删除)触发的 Lambda 函数。 |
亚马逊简单存储服务批量 | 事件驱动 同步调用 | 通过对 S3 存储桶中的大量对象同步运行 Lambda 函数来执行批处理。 |
AWS 秘密管理器 | 事件驱动 同步调用 | 使用 Lambda 函数处理秘密轮换等事件,并自动管理数据库凭据等内容。 |
亚马逊 VPC 格子 | 事件驱动 同步调用 | 根据 VPC Lattice 的路由规则将收到的请求传输到 Lambda 函数并执行动态应用程序处理。 |
AWS X射线 | 特殊积分方法 | 将 Lambda 函数执行跟踪发送到 X-Ray 以进行性能可视化和分析。 |
亚马逊事件桥 | 事件驱动 异步调用 | 执行由 AWS 服务或自定义应用程序的事件触发的 Lambda 函数,以实现事件驱动的架构。 |
AWS 步骤函数 | 事件驱动 同步或异步调用 | 在状态机的每个步骤调用 Lambda 函数来控制您的工作流程或实现复杂的业务逻辑。 |
这样,可以与 Lambda 集成的 AWS 服务是多种多样的,包括存储、数据库、消息传递、日志管理、API 管理、身份验证、物联网和部署。
这些集成使您能够扩展应用程序功能、自动化操作并构建创新的解决方案。
AWS Lambda的最佳实践
有效利用AWS Lambda的最佳实践,可以优化安全性、性能和成本。以下是按主要领域(如函数代码、设置、可扩展性、安全性等)总结的主要最佳实践的概述。
函数代码
- 分离处理器和核心逻辑:将Lambda处理器与业务逻辑分离,以提高单元测试的易用性。
- 重用执行环境:在函数处理器外部初始化SDK客户端或数据库连接,并在
/tmp
目录中缓存静态资产。 - 使用环境变量:在向函数传递操作参数时,利用环境变量。
- 最小化部署包的大小:严格管理依赖项,将部署包保持在最小范围内。
- 确保幂等性:编写幂等代码,确保函数在处理相同事件时返回相同结果。
- 避免使用非公开API:避免依赖AWS未公开提供的API。
函数设置
- 优化内存和超时:进行性能测试,设置适当的内存大小和超时时间。
- 最小权限原则:合理设置IAM策略,仅赋予函数必要的最小权限。
- 删除不必要的函数:删除未使用的Lambda函数,以避免浪费资源。
函数的可扩展性
- 管理限流:通过应用超时、重试和带抖动的回退,并设置预置并发数,提高对限流的耐受性。
指标和警报
- 利用CloudWatch警报:监控Lambda函数的指标,早期检测意外行为或性能下降。
- 使用AWS Cost Anomaly Detection:检测异常的成本增加。
处理事件源的流
- 优化批处理大小:调整事件源的轮询频率和批处理大小,实现高效的数据处理。
- 确保幂等性:保持函数代码的幂等性,避免处理重复事件时引发问题。
安全性
- 加强安全监控:使用AWS Security Hub和Amazon GuardDuty,持续监控Lambda函数的安全状态,及早检测威胁。
通过适当地实施这些最佳实践,您可以安全、高效地利用AWS Lambda。此外,定期审查代码和设置,发现改进机会也是非常重要的。
<参考資料>
AWS Documentation(AWS Lambda)
Tech Blog with related articles referenced
总结
在本次内容中,我们创建了AWS Lambda的历史时间表,并回顾了AWS Lambda的功能列表和概述。
作为一项无服务器且全托管的代码执行服务,AWS Lambda于2014年首次发布,2015年正式上线。经过近十年的发展,AWS Lambda在现代计算领域,如微服务架构、分布式系统和无服务器计算中,继续提供关键的功能,包括事件驱动和计划驱动的无服务器代码执行,并不断进行更新。
未来,我们将继续关注AWS Lambda的发展动向,了解它将会提供哪些新的功能和改进。