AWS Lambda 函数的最佳实践

函数代码

  • 从核心逻辑中分离 Lambda 处理程序(入口点)。 这样您可以创建更容易进行单元测试的函数。

  • 利用执行上下文重用来提高函数性能。 确保您的代码检索到的外部化配置或依赖关系在初次执行后在本地存储和引用。限制变量/对象在每次调用时的重新初始化,而是使用静态初始化/构造函数、全局/静态变量以及单例。保持活动状态并重复使用上一次调用中建立的连接(HTTP、数据库等)。

  • 使用 AWS Lambda 环境变量 将操作参数传递到您的函数。 例如,您在写入 Amazon S3 存储桶时,不应对要写入的存储桶名称进行硬编码,而应将存储桶名称配置为环境变量。

  • 控制函数部署程序包中的依赖关系。AWS Lambda 执行环境中包括若干库,例如适用于 Node.js 和 Python 运行时的 AWS 开发工具包(完整列表位于此处:AWS Lambda 运行时)。Lambda 会定期更新这些库,以支持最新的功能组合和安全更新。这些更新可能会使 Lambda 函数的行为发生细微变化。要完全控制您的函数所用的依赖关系,建议在部署程序包中包装所有依赖关系。

  • 将部署程序包大小精简为只包含运行时必要的部分。 这样会减少调用前下载和解压缩部署程序包所需的时间。对于用 Java 或 .NET Core 编写的函数,请不要将整个 AWS 开发工具包库作为部署程序包的一部分上传,而是要根据所需的模块有选择地挑选开发工具包中的组件(例如 DynamoDB、Amazon S3 开发工具包模块和 Lambda 核心库)。

  • 将依赖关系 .jar 文件置于单独的 /lib 目录中,可减少 Lambda 解压缩部署程序包(用 Java 编写)所需的时间。这样比将函数的所有代码置于具有大量 .class 文件的同一 jar 中要快。有关说明,请参阅 Java 中的 AWS Lambda 部署程序包

  • 将依赖关系的复杂性降至最低。 首选执行上下文启动时可以快速加载的更简单的框架。例如,首选更简单的 Java 依赖关系注入 (IoC) 框架,如 Dagger 或 Guice,而不是更复杂的 Spring Framework

  • 避免在 Lambda 函数中使用递归代码,因为如果使用递归代码,函数便会自动调用自身,直到满足某些任意条件为止。这可能会导致意想不到的函数调用量和升级成本。如果您意外地执行此操作,请立即将函数并发执行数限制设置为 0 来限制对函数的所有调用,同时更新代码。

  利用 Lambda 函数的环境变量,您可以将设置动态传递到函数代码和库,而无需对代码进行任何更改。环境变量是您使用 AWS Lambda 控制台、AWS Lambda CLI 或 AWS Lambda 开发工具包作为函数配置的一部分创建并修改的密钥值对。AWS Lambda 随后会使用相应语言所支持的标准 API(如适用于 Node.js 函数的 process.env 将这些密钥值对提供给您的 Lambda 函数代码。

  您可以使用环境变量帮助库了解以下信息:安装文件的目录、存储输出的位置、存储连接和日志记录设置等。通过仅这些设置与应用程序逻辑分隔开,您在需要基于不同设置更改相应函数行为时将无需更新您的函数代码。

  假设您希望某个 Lambda 函数在经历从开发到部署的不同生命周期阶段时做出不同的行为。例如,开发、测试和生产阶段可能包含函数需要连接的数据库,而这些数据库需要不同的连接信息并且使用不同的表名称。您可以创建环境变量来引用相关数据库名称、连接信息或表名称,并根据相应函数正在执行的阶段(例如,开发、测试和生产)设置函数的值,同时您的函数代码将保持不变。

扫描二维码关注公众号,回复: 7155853 查看本文章

猜你喜欢

转载自www.cnblogs.com/cloudrivers/p/11446102.html