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

使用CloudFormation部署Lambda时动态配置CodeUri报错的问题咨询

动态配置Lambda函数CodeUri的CloudFormation报错解决

问题场景

使用AWS::Serverless-2016-10-31转换创建Lambda函数时,尝试通过参数动态指定代码存储的S3桶名,原模板如下:

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'

Parameters:
  LambdaBucketName:
    Type: String
    Description: The name S3 Bucket of the lambda function code


Resources:
  FUNC:
    Type: 'AWS::Serverless::Function'
    Properties:
      FunctionName: 'my-lambda-func'
      Handler: index.handler
      Runtime: nodejs18.x
      CodeUri:
        FunctionCode:
          Bucket: !Ref LambdaBucketName
          Key: my-lambda-func.zip

etc...

部署时触发错误:

ROLLBACK_IN_PROGRESS : 'CodeUri' requires Bucket and Key properties to be specified.

尝试静态S3 URI(如CodeUri: s3://my-bucket/my-lambda-func.zip)可正常部署,但动态引用桶名时遇到格式问题;直接配置CodeUri的Bucket和Key又提示格式错误。

解决方案

方法1:直接配置CodeUri的Bucket和Key属性

AWS::Serverless::Function的CodeUri支持直接接收包含Bucket和Key的对象,不需要嵌套FunctionCode(这是原生AWS::Lambda::Function的属性格式,Serverless Transform不兼容这种嵌套写法)。修正后的代码:

Resources:
  FUNC:
    Type: 'AWS::Serverless::Function'
    Properties:
      FunctionName: 'my-lambda-func'
      Handler: index.handler
      Runtime: nodejs18.x
      CodeUri:
        Bucket: !Ref LambdaBucketName
        Key: my-lambda-func.zip

方法2:使用!Sub拼接S3 URI

通过字符串拼接生成完整的S3路径,这种写法更简洁,也能实现动态桶名配置:

Resources:
  FUNC:
    Type: 'AWS::Serverless::Function'
    Properties:
      FunctionName: 'my-lambda-func'
      Handler: index.handler
      Runtime: nodejs18.x
      CodeUri: !Sub s3://${LambdaBucketName}/my-lambda-func.zip

说明

AWS::Serverless::Function的CodeUri有两种合法格式:

  • 静态/动态拼接的S3 URI字符串(如s3://bucket/key)
  • 包含Bucket和Key字段的对象(无需嵌套FunctionCode)

错误原因是混淆了原生Lambda资源和Serverless Transform资源的属性格式,Serverless Transform对CodeUri的格式要求更简洁,不需要FunctionCode嵌套层。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:31:00