Skip to main content

使用简单的装饰器保持 lambdas 温暖并监控冷启动

项目描述

PyPI 版本 执照:麻省理工学院 构建状态

lambda-warmer-py:照顾 aws lambda 冷启动

lambda-warmer-py软件包包含一个装饰器,可以轻松地最大程度地减少 aws lambda 冷启动的拖累。只是 ...

  1. 将您的 lambda 包装在@lambdawarmer.warmer装饰器中并
  2. 每 5 分钟 ping 一次你的 lambda

你会减少你的冷启动。

配置选项也可用...

  • 允许保持许多并发lambdas 温暖
  • 发送CloudWatch 指标 ,按 lambda 函数名称跟踪冷启动和热启动的数量

升温逻辑是js 的 python 改编* , lambda-warmer. 在他的网站上阅读有关此方法的背景的更多信息,并此处阅读 有关 lambda 优化的一些最佳实践。

* 除了支持 CloudWatch Metrics 之外,在参数化方面还有一些小的差异。请参阅配置

安装

pip install lambda-warmer-py

使用 lambda 加热器

基础知识

将 lambda warmer 合并到您现有的 lambdas 中只需要添加一个装饰器。

import lambdawarmer


@lambdawarmer.warmer
def your_lambda_function(event, context):
    pass

同步升温

为了利用并发选项,包将多次调用您的 lambda。这意味着部署的 lambda 将需要以下权限

- Effect: Allow
  Action: lambda:InvokeFunction
  Resource: [your-lambdas-arn]

启用 ColdStart/WarmStart CloudWatch 指标

为了让 lambda warmer 跟踪冷启动和热启动指标,lambda 执行角色需要将指标数据发送到 CloudWatch 的权限。所需的政策行动是

- Effect: Allow
  Action: cloudwatch:PutMetricData

加热你的 lambdas

创建一个CloudWatch 规则,定期直接调用您的 lambda 并将以下 json 作为事件传递

{
    "warmer": true,
    "concurrency": (int, defaults to 1)
}

可以通过覆盖装饰器中的参数来更改warmer和名称。详见 配置concurrencywarmer

配置

lambda 加热器是通过@warmer装饰器的函数参数配置的。它需要以下...

flag (string, default = 'warmer')

用于指示它是热身事件的字段的名称。

concurrency (string, default = 'concurrency')

用于设置要调用和保持温暖的并发 lambda 数量的字段名称。

delay (int, default = 75)

并发热身调用应休眠的毫秒数。这有助于避免在并发目标上交付不足。

send_metric (bool, default = False)

是否将在每次调用时发送冷/热启动次数的 CloudWatch 指标。指标名称是ColdStartWarmStart,记录在LambdaWarmer命名空间下,可以通过 lambda 函数名称进行过滤。

示例:温暖的配置覆盖

使用替代事件和延迟配置很简单。

@lambdawarmer.warmer(flag='am_i_a_warmer', concurrency='how_many_lambdas', delay=150)
def your_lambda_function(event, context):
    pass

此实现将期望以下形式的事件

{"am_i_a_warmer": true, "how_many_lambdas": (int)}

并且所有并发执行将延迟 150 毫秒。

示例:发送指标

如果您想跟踪有关暖/冷启动次数的指标,请在装饰器中激活该功能。

@lambdawarmer.warmer(send_metric=True)
def your_lambda_function(event, context):
    pass

注意:从该实现中排除但可以在js版本中找到的配置选项是

  • test:在单元测试中使用模拟/伪造而不是标记调用来处理测试
  • log: 导入的 python 包的日志级别应该通过 stdliblogging模块处理。
  • correlationId. correlation_id自从我们在 python 中以来,这已被制成蛇形外壳,并且始终aws_request_id按照原始lambda-warmer包中的建议设置为当前 lambda 的字段。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

内置分布

lambda_warmer_py-0.6.0-py3-none-any.whl (7.9 kB 查看哈希

已上传 py3