本节我们将为Lambda配置Provisioned Concurrency
,来验证它对冷启动的优化效果。
进入Lambda页面,创建新的函数provisioned-concurrency-test
, Runtime选择Python 3.9
:
更新函数代码如下,并重新进行部署:
import time
print("Initializing function")
time.sleep(2) # 模拟冷启动阶段,花费2s
def lambda_handler(event, context):
# TODO implement
print("Executing the lambda handler")
time.sleep(0.2) # 模拟lambda_handler内部执行,花费0.2s
return
创建新的测试事件,并连续进行两次测试。
第一次测试时,函数需要进行冷启动,所以Init Duration
有2000ms:
第二次测试时,由于Lambda处于热启动状态,所以直接进入lambda_hander
的代码,执行完成:
查看Lambda的CloudWatch Logs:
从日志中也可以看到Init
阶段仅在第一次执行时有输出:
由于在配置Provisioned Concurrency
前必须为lambda创建version或alias,我们先发布一个version:
点击Publish
:
发布完成后,我们当前处于version 1
环境,进入Configuratin -> Provisioned concurrency
:
为当前版本创建10个单位的provisioned concurrency
, 注意Lambda会实时计算出对应的花费。点击保存:
Lambda需要经过几分钟后,预热才能完成:
预热完成后显示如下:
回到CloudWatch Logs页面,发现新增了20个日志流:
里面帮我们完成了初始化的过程: