我想了解内存和计算能力对 AWS Lambda 成本产生了哪些影响。
概述
Lambda 开发人员可以使用内存来控制函数的性能。分配给 Lambda 函数的内存量在 128 MB 到 10,240 MB 之间。Lambda 控制台将新函数默认为 128 MB,许多开发人员为函数选择 128 MB。
但是,最好是仅为简单的 Lambda 函数选择 128 MB。例如,将事件转换和路由到其他 AWS 服务的函数。如果函数执行下列任何操作,则应分配更大的内存:
- 导入库。
- 导入 Lambda 层。
- 与从 Amazon Simple Storage Service(Amazon S3)加载的数据进行交互。
- 与从 Amazon Elastic File System(Amazon EFS)加载的数据进行交互。
解决方法
Lambda 函数定价
Lambda 费用以您函数的请求数量和代码运行所需的持续时间为基础。Lambda 每次为响应事件通知而调用时都会计入一个请求。例如,来自 Amazon Simple Notification Service(SNS)或 Amazon EventBridge。此外,每次启动 Lambda 响应调用时都会计入一个请求。例如,来自 Amazon API Gateway,或使用 AWS SDK,包括来自 Lambda 控制台的测试调用。
持续时间从您的代码开始运行到返回或停止的时间计算,四舍五入到最接近的 1 毫秒。有关详细信息,请参阅 AWS Lambda 定价。价格取决于您分配给函数的内存。内存量还决定了函数可用的虚拟 CPU 量。添加更多内存会按比例增加 CPU 量,从而增加可用的计算能力。如果函数是 CPU 绑定、网络绑定或内存绑定的,更改内存设置可以提高性能。内存的增加会使函数可用的 CPU 相应增加。
内存能力对 Lambda 成本的影响
Lambda 服务按函数消耗的总千兆字节秒量收费。如果总持续时间保持不变,内存的增加会影响总体成本。千兆字节秒是总内存(以千兆字节为单位)和持续时间(以秒为单位)的乘积。然而,如果增加可用内存,持续时间会减少。因此,总成本增加可以忽略不计,甚至有所下降。
例如,计算素数的函数的 1000 次调用在不同内存级别具有以下平均持续时间:
| | |
---|
内存 | 持续时间 | 成本 |
128 MB | 11.722 秒 | 0.024628 美元 |
512 MB | 6.678 秒 | 0.028035 美元 |
1024 MB | 3.194 秒 | 0.026830 美元 |
1536 MB | 1.465 秒 | 0.02463 美元 |
在此示例中,在 128 MB 时,平均需要 11.722 秒才能完成函数,1000 次调用的成本为 0.024628 美元。内存增加到 1536 MB 时,平均持续时间降至 1.465 秒,因此成本为 0.024638 美元。对于千分之一美分的成本差异,该函数的性能提高了 10 倍。
如果使用的内存接近配置的最大值,请使用 Amazon CloudWatch 监控函数并设置警报。这有助于识别内存绑定函数。对于 CPU 绑定和 IO 绑定函数,请监控持续时间以提供更多见解。在这些情况下,增加内存有助于解决计算或网络瓶颈。有关详细信息,请参阅监控和可观测性。