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

如何在CloudFormation YAML中获取Lambda最新版本并解决CloudFront引用报错

回答你的CloudFormation Lambda版本相关问题

针对你提出的两个问题,我来一步步帮你解决:

1. 如何在CloudFormation YAML中获取Lambda函数的最新版本?

CloudFormation不会自动为Lambda函数生成版本,除非你显式声明一个AWS::Lambda::Version资源。这个资源会绑定到你的Lambda函数,每次函数代码或配置更新时,它会自动创建一个新的版本(也就是当前的最新版本)。

给你一个实际的YAML配置示例:

Resources:
  # 首先定义你的Lambda函数
  BasicAuthLambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Runtime: nodejs18.x
      Handler: index.handler
      Code:
        S3Bucket: your-lambda-code-bucket
        S3Key: auth-function.zip
      Role: !GetAtt LambdaExecutionRole.Arn

  # 声明Lambda版本资源,自动关联最新的函数状态
  BasicAuthLambdaFunctionLatestVersion:
    Type: AWS::Lambda::Version
    Properties:
      FunctionName: !Ref BasicAuthLambdaFunction
      Description: "Auto-generated latest version of BasicAuthLambda"

之后你就可以通过!Ref BasicAuthLambdaFunctionLatestVersion或者!GetAtt BasicAuthLambdaFunctionLatestVersion.Arn来获取这个最新版本的ARN了。

2. CloudFront Edge Lambda引用报错的解决方法

你遇到的报错是CloudFront的硬性要求导致的:Edge Lambda必须引用带具体版本号的ARN,不能直接用函数本身的ARN或者$LATEST版本。这是因为CloudFront需要固定的函数版本来保证边缘节点部署的稳定性,避免函数代码更新时导致边缘服务出现不可预期的变化。

解决方法就是用上文提到的AWS::Lambda::Version资源,把CloudFront配置里的Lambda ARN改成引用这个版本资源的ARN:

GGGCloudFrontDistribution:
  Type: AWS::CloudFront::Distribution
  Properties:
    DistributionConfig:
      # 其他分发配置(比如 Origins、DefaultCacheBehavior 等)...
      LambdaFunctionAssociations:
        - EventType: viewer-request
          LambdaFunctionARN: !Ref BasicAuthLambdaFunctionLatestVersion

这样就能满足CloudFront的版本要求,不会再抛出那个报错了。

另外补充一点:当你更新Lambda函数的代码或配置时,CloudFormation会自动创建一个新的AWS::Lambda::Version资源,对应的ARN会带上新的版本号,CloudFront也会自动同步这个引用(前提是你在模板里用的是版本资源的引用,而非硬编码的ARN)。

内容的提问来源于stack exchange,提问作者Daniel Birowsky Popeski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:31:57