网站动画广告条怎么做的,正版电子商务网,网站设计技术有哪些,seo北京公司主题 函数代码 函数配置 指标和警报 处理流 安全最佳实践
有关 Lambda 应用程序最佳实践的更多信息#xff0c;请参阅 Serverless Land 中的 Application design。
函数代码 从核心逻辑中分离 Lambda 处理程序。这样您可以创建更容易进行单元测试的函数。在 Node.js 中…主题 函数代码 函数配置 指标和警报 处理流 安全最佳实践
有关 Lambda 应用程序最佳实践的更多信息请参阅 Serverless Land 中的 Application design。
函数代码 从核心逻辑中分离 Lambda 处理程序。这样您可以创建更容易进行单元测试的函数。在 Node.js 中可能如下所示 exports.myHandler function(event, context, callback) { var foo event.foo; var bar event.bar; var result MyLambdaFunction (foo, bar);callback(null, result);
}function MyLambdaFunction (foo, bar) { // MyLambdaFunction logic here}利用执行环境重用来提高函数性能。连接软件开发工具包 (SDK) 客户端和函数处理程序之外的数据库并在 /tmp 目录中本地缓存静态资产。由函数的同一实例处理的后续调用可重用这些资源。这样就可以通过缩短函数运行时间来节省成本。 为了避免调用之间潜在的数据泄露请不要使用执行环境来存储用户数据、事件或其他具有安全影响的信息。如果您的函数依赖于无法存储在处理程序的内存中的可变状态请考虑为每个用户创建单独的函数或单独的函数版本。 使用 keep-alive 指令来维护持久连接。Lambda 会随着时间的推移清除空闲连接。在调用函数时尝试重用空闲连接会导致连接错误。要维护您的持久连接请使用与运行时关联的 keep-alive 指令。有关示例请参阅在 Node.js 中通过 Keep-Alive 重用连接。 使用环境变量将操作参数传递给函数。例如您在写入 Amazon S3 存储桶时不应对要写入的存储桶名称进行硬编码而应将存储桶名称配置为环境变量。 控制函数部署程序包中的依赖关系。AWS Lambda 执行环境中包括若干库例如适用于 Node.js 和 Python 运行时的 AWS 软件开发工具包完整列表位于此处Lambda 运行时。Lambda 会定期更新这些库以支持最新的功能组合和安全更新。这些更新可能会使 Lambda 函数的行为发生细微变化。要完全控制您的函数所用的依赖项请使用部署程序包来打包所有依赖项。 将部署程序包大小精简为只包含运行时必要的部分。这样会减少调用前下载和解压缩部署程序包所需的时间。对于用 Java 或 .NET Core 编写的函数请不要将整个 AWS 软件开发工具包库作为部署程序包的一部分上传而是要根据所需的模块有选择地挑选软件开发工具包中的组件例如 DynamoDB、Simple Storage Service (Amazon S3) 软件开发工具包模块和 Lambda 核心库。 将依赖关系 .jar 文件置于单独的 /lib 目录中可减少 Lambda 解压缩部署程序包用 Java 编写所需的时间。这样比将函数的所有代码置于具有大量 .class 文件的同一 jar 中要快。有关说明请参阅使用 .zip 或 JAR 文件归档部署 Java Lambda 函数 将依赖关系的复杂性降至最低。首选在执行环境启动时可以快速加载的更简单的框架。例如首选更简单的 Java 依赖关系注入 (IoC) 框架如 Dagger 或 Guice而不是更复杂的 Spring Framework。 避免在 Lambda 函数中使用递归代码因为如果使用递归代码函数便会自动调用自身直到满足某些任意条件为止。这可能会导致意想不到的函数调用量和升级成本。如果您不慎执行此操作请立即将函数保留并发设置为 0 来限制对函数的所有调用同时更新代码。 Lambda 函数代码中不要使用非正式的非公有 API。对于 AWS Lambda 托管式运行时Lambda 会定期为 Lambda 的内部 API 应用安全性和功能更新。这些内部 API 更新可能不能向后兼容会导致意外后果例如假设您的函数依赖于这些非公有 API则调用会失败。请参阅 API 参考以查看公开发布的 API 列表。 编写幂等代码。为您的函数编写幂等代码可确保以相同的方式处理重复事件。您的代码应该正确验证事件并优雅地处理重复事件。有关更多信息请参阅如何使我的 Lambda 函数具有幂等性。
函数配置 对您的 Lambda 函数进行性能测试是确保选择最佳内存大小配置的关键环节。增加内存大小会触发函数可用 CPU 的同等水平的增加。函数的内存使用率是根据调用情况确定的可以在 Amazon CloudWatch 中查看。每次调用都将生成一个 REPORT: 条目如下所示 REPORT RequestId: 3604209a-e9a3-11e6-939a-754dd98c7be3 Duration: 12.34 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 18 MB分析 Max Memory Used: 字段能够确定函数是否需要更多内存或函数的内存大小是否过度配置。 要为您的函数查找适合的内存配置我们建议使用开源 AWS Lambda 功率调谐项目。有关更多信息请参阅 GitHub 上的 AWS Lambda 功率调谐。 为了优化函数性能我们还建议部署可以利用高级矢量扩展 2 (AVX2) 的库。这样一来您就可以处理艰巨的工作负载如机器学习推理、媒体处理、高性能计算HPC、科学模拟和财务建模。有关更多信息请参阅使用 AVX2 创建更快的 AWS Lambda 函数。 对您的 Lambda 函数进行加载测试确定最佳超时值。分析函数的运行时间很重要这样更容易确定依赖关系服务是否有问题这些问题可能导致并发函数以超出您的预期的速度增加。如果您的 Lambda 函数进行网络调用的资源无法处理 Lambda 扩缩这就更加重要。 设置 IAM policy 时使用最严格的权限。了解您的 Lambda 函数所需的资源和操作并限制这些权限的执行角色。有关更多信息请参阅Lambda 资源访问权限 熟悉Lambda 配额。在确定运行时资源限制时负载大小、文件描述符和 /tmp 空间通常会被忽略。 删除不再使用的 Lambda 函数。这样未使用的函数就不会不必要地占用有限的部署程序包空间。 如果您使用 Amazon Simple Queue Service 作为事件源请确保该函数的预计调用时间值不超过队列上的可见性超时值。这同样适用于 CreateFunction 和 UpdateFunctionConfiguration。 对于 CreateFunctionAWS Lambda 会使函数创建流程失败。 对于 UpdateFunctionConfiguration它可能会导致该函数的重复调用。
指标和警报 使用 使用 Lambda 函数指标 和 CloudWatch Alarms而不是在您的 Lambda 函数代码中创建和更新指标。追踪 Lambda 函数的运行状况是更加有效的方式这样您就可以在早期开发过程中发现问题。例如您可以根据 Lambda 函数调用的预计持续时间配置警报以解决函数代码引起的瓶颈或延迟。 利用您的日志记录库和 AWS Lambda 指标和维度捕捉应用程序错误例如ERR、ERROR、WARNING 等 使用 AWS Cost Anomaly Detection 来检测您账户中的异常活动。Cost Anomaly Detection 使用机器学习技术来持续监控您的成本和使用情况并尽力减少误报。Cost Anomaly Detection 使用来自 AWS Cost Explorer 的数据该数据最长可能会延迟 24 小时。因此发生使用后最长可能需要 24 小时才会检测到异常。要开始使用 Cost Anomaly Detection您必须首先注册 Cost Explorer。然后访问 Cost Anomaly Detection。
处理流 测试不同批处理和记录的大小这样每个事件源的轮询频率都会根据函数完成任务的速度进行调整。CreateEventSourceMapping BatchSize 参数控制每次调用可向您的函数发送记录的最大数量。批处理大小如果较大通常可以更有效地吸收大量记录的调用开销从而增加吞吐量。 默认情况下Lambda 会在记录可用时尽快调用您的函数。如果 Lambda 从事件源中读取的批处理只有一条记录则 Lambda 将会只向该函数发送一条记录。为避免在记录数量较少的情况下调用该函数您可以配置 batching window批处理时段让事件源缓冲最多五分钟的记录。调用函数前Lambda 会持续从事件源中读取记录直到收集完整批处理、批处理时段到期或批处理达到 6MB 的有效负载时为止。有关更多信息请参阅批处理行为 通过增加分区提高 Kinesis 流处理吞吐量。一个 Kinesis 流由一个或多个分区组成。Lambda 轮询每个分区时最多会使用一个并发调用。例如如果您的流有 100 个活跃分区则最多可以并发运行 100 个 Lambda 函数调用。增加分区数量会直接增加 Lambda 函数并发调用的最大数量还可增加 Kinesis 流处理的吞吐量。如果您增加 Kinesis 流中的分区数量请确保您已为数据选择了合适的分区键请参阅分区键这样相关记录将会位于同一分区中而且也可合理分配您的数据。 在 IteratorAge 上使用 Amazon CloudWatch确定是否正在处理您的 Kinesis 流。例如将 CloudWatch 警报的最大值设置配置为 3000030 秒。
安全最佳实践 监控 AWS Lambda 的使用情况因为它与使用 AWS Security Hub 的安全最佳实践有关。Security Hub 使用安全控件来评估资源配置和安全标准以帮助您遵守各种合规框架。有关使用 Security Hub 评估 Lambda 资源的更多信息请参阅《AWS Security Hub 用户指南》中的 AWS Lambda 控件。