如何使用CodeDeploy将S3中的Zip包部署到Lambda(非SAM环境)
解决CodeDeploy部署Lambda代码不更新的问题
核心问题原因
CodeDeploy部署Lambda时,不支持直接使用Zip包作为构件,必须提供解压后的目录结构,且appspec.yml必须放在该目录的根路径,和Lambda代码文件同级。
具体解决步骤
1. 调整CodeBuild的构件输出配置
修改buildspec.yml,将生成的Lambda Zip包解压到指定目录,并把appspec.yml复制到该目录根路径,确保CodeBuild输出的是完整的目录结构:
phases: build: commands: # 假设你的构建过程生成了lambda-code.zip - unzip lambda-code.zip -d ./deploy # 将appspec.yml复制到部署目录根路径 - cp appspec.yml ./deploy/ artifacts: files: - '**/*' base-directory: './deploy'
2. 配置CodeDeploy应用与部署组
- 创建CodeDeploy应用时,应用类型选择
Lambda - 部署组关联目标Lambda函数,部署配置可使用默认的
LambdaAllAtOnce(或根据需求选择灰度部署配置)
3. 校验appspec.yml的正确性
确保appspec.yml的资源配置正确,示例如下:
version: 0.0 Resources: - MyLambdaFunction: Type: AWS::Lambda::Function Properties: Name: "你的Lambda函数名称" # 若使用别名部署则配置Alias,否则可省略 Alias: "prod" CurrentVersion: "$LATEST" Hooks: # 可选:自定义流量切换前后的脚本 - BeforeAllowTraffic: - Location: scripts/before-traffic.sh Timeout: 300 - AfterAllowTraffic: - Location: scripts/after-traffic.sh Timeout: 300
关于视频内容的解释
你看到的视频中没有提及Zip包,是因为视频里的构建过程直接输出了未打包的代码目录,CodeDeploy可以直接识别根目录下的代码文件,因此能正常更新Lambda代码。
内容的提问来源于stack exchange,提问作者Atronix
相关产品推荐
相关产品推荐

