Provisioned Concurrency实验

本节我们将为Lambda配置Provisioned Concurrency,来验证它对冷启动的优化效果。


进入Lambda页面,创建新的函数provisioned-concurrency-test, Runtime选择Python 3.9:

image-20220407220142660

更新函数代码如下,并重新进行部署:

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:

image-20220407220517362

第二次测试时,由于Lambda处于热启动状态,所以直接进入lambda_hander的代码,执行完成:

image-20220407222902488

查看Lambda的CloudWatch Logs:

image-20220407222932154

从日志中也可以看到Init阶段仅在第一次执行时有输出:

image-20220407222848127

配置Provisioned Concurrency

由于在配置Provisioned Concurrency前必须为lambda创建version或alias,我们先发布一个version:

image-20220407220636100

点击Publish

image-20220407220646158

发布完成后,我们当前处于version 1环境,进入Configuratin -> Provisioned concurrency

image-20220407220711337

为当前版本创建10个单位的provisioned concurrency, 注意Lambda会实时计算出对应的花费。点击保存:

image-20220407220728271

Lambda需要经过几分钟后,预热才能完成:

image-20220407220745743

预热完成后显示如下:

image-20220407222105825

回到CloudWatch Logs页面,发现新增了20个日志流:

image-20220407223531820

里面帮我们完成了初始化的过程:

image-20220407223551824