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

使用AWS CodeCommit与CodeBuild部署Lambda失败:函数未创建

问题:AWS CodePipeline部署Lambda失败且依赖未安装

我通过AWS CodeCommit和AWS CodeBuild部署AWS Lambda函数,流水线执行顺序正常、构建任务成功,但部署阶段出现错误,Lambda函数未按代码定义创建。此外,创建新Lambda函数时,requirements.txt中的Python依赖也未完成安装。

配置文件

buildspec.yml

version: 0.2

env:
  variables:
    S3_BUCKET: deployment

phases:
  install:
    runtime-versions:
      python: 3.11
    commands:
      - pip install aws-sam-cli
  build:
    commands:
      - sam build
  post_build:
    commands:
      - sam package --s3-bucket $S3_BUCKET --output-template-file packaged.yaml
artifacts:
  files:
    - packaged.yaml

template.yml

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
  MyLambdaFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_handler.lambda_handler
      Runtime: python3.11
      CodeUri: s3://deployment/packaged.yaml
      MemorySize: 1024
      Timeout: 100
      Environment:
        Variables:
          PARAM1: "value1"
      Policies:
        - AWSLambdaBasicExecutionRole

错误信息

调用CreateFunction操作时发生错误(InvalidParameterValueException):CodeUri无效。S3错误:指定的键不存在。

解决方案

  • 修正template.yml的CodeUri配置
    原配置中CodeUri直接写死S3路径是错误的。SAM package会自动将CodeUri替换为打包后上传到S3的实际对象路径,因此template.yml里的CodeUri应指向本地代码目录(比如代码在项目根目录就写./):

    MyLambdaFunction:
      Type: 'AWS::Serverless::Function'
      Properties:
        Handler: lambda_handler.lambda_handler
        Runtime: python3.11
        CodeUri: ./  # 修改为本地代码路径
        MemorySize: 1024
        Timeout: 100
        Environment:
          Variables:
            PARAM1: "value1"
        Policies:
          - AWSLambdaBasicExecutionRole
    
  • 确保依赖自动安装
    SAM build会自动读取项目根目录的requirements.txt并将依赖安装到构建产物中,只需确保requirements.txt和Lambda代码文件(如lambda_handler.py)在同一目录下即可。若需验证,可在buildspec.yml的build阶段添加命令:

    - ls .aws-sam/build/MyLambdaFunction/
    

    查看输出是否包含依赖包。

  • 检查权限配置

    • 确认CodeBuild服务角色拥有目标S3桶的读写权限,能正常上传打包后的代码。
    • 确认部署阶段(CloudFormation执行角色)拥有创建Lambda函数、读取S3代码包的权限。
  • 验证packaged.yaml生成
    确保SAM package命令成功生成packaged.yaml,且该文件被正确标记为构建产物输出,保证CodePipeline部署阶段能获取到该文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 14:58:26