You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda冷启动单次执行初始化代码放置位置及预置并发适配方法

冷启动阶段单次执行初始化逻辑的实现

Lambda Python运行时的执行生命周期原生支持冷启动单次执行逻辑:所有写在lambda_handler外的全局作用域代码,只会在实例冷启动的INIT阶段执行一次。实例初始化完成后会被Lambda冻结,后续热启动触发请求时会直接解冻运行handler逻辑,不会重新执行全局域代码,不需要额外加复杂的状态判断,这是最稳定的实现方式。

示例代码:

import boto3

# 全局域的初始化逻辑仅冷启动执行一次
s3_client = boto3.client("s3")  # 初始化SDK客户端
dynamodb_client = boto3.client("dynamodb")
global_config = None
large_model = None

def _do_cold_start_init():
    global global_config, large_model
    # 自定义初始化逻辑:拉取远程配置、加载模型、预热连接等
    global_config = {"env": "prod", "timeout": 30}
    large_model = "模拟大模型加载结果"
    print("冷启动全局初始化完成")

_do_cold_start_init()

def lambda_handler(event, context):
    # 该部分逻辑每次触发请求都会执行
    return {
        "statusCode": 200,
        "client_id": id(s3_client) # 热启动时该值和上次请求一致,可证明客户端被复用
    }

注意事项:

  • 不要把初始化逻辑写到handler函数内部,否则每次触发请求都会重复执行
  • INIT阶段如果初始化代码抛出错误,实例会直接启动失败,不会进入handler处理逻辑
  • 全局域初始化的耗时,在按需冷启动场景会计入请求的冷启动总延迟
仅在预置并发实例执行初始化逻辑的方案

Lambda在实例初始化阶段会注入固定环境变量AWS_LAMBDA_INITIALIZATION_TYPE,可直接通过该变量判断当前实例的启动类型:

  • 值为provisioned-concurrency:当前为预置并发实例
  • 值为on-demand:当前为普通按需启动实例

直接在全局域初始化逻辑中增加判断即可实现预置并发专属初始化,示例代码:

import os
import boto3

# 通用初始化:所有冷启动实例都执行
common_client = boto3.client("s3")
# 预置并发专属初始化标记
provision_init_done = False

def _provision_only_init():
    global provision_init_done
    # 放置仅预置并发需要执行的重逻辑:预热连接池、预加载超大模型、预热下游接口等
    print("执行预置并发专属初始化")
    provision_init_done = True

# 冷启动时判断启动类型,仅预置并发实例执行专属逻辑
if os.getenv("AWS_LAMBDA_INITIALIZATION_TYPE") == "provisioned-concurrency":
    _provision_only_init()

def lambda_handler(event, context):
    return {
        "statusCode": 200,
        "is_provision_instance": provision_init_done
    }

注意事项:

  • 该环境变量在INIT阶段就已完成注入,全局域读取完全可靠,不需要等到handler执行阶段再判断
  • 预置并发实例的INIT流程是Lambda根据配置提前执行的,这部分初始化耗时不会占用实际用户请求的处理时间,适合放置资源占用高、耗时长的初始化逻辑

内容的提问来源于stack exchange,提问作者Saw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:18:22