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

如何使用boto3更新CloudFront事件触发Lambda@Edge配置

boto3更新CloudFront Lambda@Edge关联实现方法

boto3原生支持修改CloudFront分发的事件关联配置,Lambda@Edge的绑定关系属于CloudFront缓存行为的配置项,不存在独立的修改接口,按以下流程操作即可:

  • 第一步:拉取目标分发的当前配置与版本校验ETag
    CloudFront所有更新操作都必须携带当前配置对应的ETag做版本校验,否则会触发冲突报错,先调用get_distribution_config接口获取必要信息:
    import boto3
    
    cf = boto3.client('cloudfront')
    DISTRIBUTION_ID = "替换为你的CloudFront分发ID"
    
    # 获取配置与ETag
    current_config = cf.get_distribution_config(Id=DISTRIBUTION_ID)
    dist_config = current_config['DistributionConfig']
    etag = current_config['ETag']
    
  • 第二步:修改缓存行为中的Lambda关联配置
    你可以根据需要修改默认缓存行为或自定义路径缓存行为下的LambdaFunctionAssociations字段,维护模式通常绑定viewer-request事件:
    # 维护模式开启时的关联配置
    maintain_mode_assoc = {
        "Quantity": 1,
        "Items": [
            {
                # 注意必须填带版本号的Lambda@Edge ARN,不能使用$LATEST
                "LambdaFunctionARN": "替换为你的Lambda@Edge对应版本ARN",
                "EventType": "viewer-request",
                "IncludeBody": False
            }
        ]
    }
    
    # 绑定到默认缓存行为;要切回主站时把Quantity设为0、Items置为空列表即可
    dist_config["DefaultCacheBehavior"]["LambdaFunctionAssociations"] = maintain_mode_assoc
    
    注意:Lambda@Edge不支持指向$LATEST版本的ARN,必须使用发布后生成的指定版本ARN,否则配置提交会校验失败
  • 第三步:提交更新配置
    调用update_distribution接口提交修改后的配置,传入之前获取的ETag:
    cf.update_distribution(
        DistributionConfig=dist_config,
        Id=DISTRIBUTION_ID,
        IfMatch=etag
    )
    
    提交后CloudFront会进入部署状态,通常5-10分钟完成生效,你可以轮询get_distribution接口返回的Status字段,当值从InProgress变为Deployed即代表配置已全部分发完成。
更高效的维护模式切换方案

如果不想每次切换都等待CloudFront分发部署,可以选择不需要修改CloudFront配置的实现方式:

  • 固定绑定Lambda@Edge到viewer-request事件,在Lambda逻辑中增加开关判断:把维护模式的开关值存在SSM参数存储或者DynamoDB中,Lambda每次触发时先读取开关状态,开关开启则直接返回维护页HTML,开关关闭则透传请求到S3源站。这种方式切换只需要修改参数值,数秒即可生效,完全不需要调整CloudFront配置。
  • 轻量场景下可以替换为CloudFront Functions实现维护页返回,CloudFront Functions的部署更新速度远快于Lambda@Edge,且成本更低,适合这类简单的请求拦截、固定内容返回场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:48:28