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

如何在SAM模板中动态传递CodeUri以适配版本可变的JAR构件

解决方案

方案1:通过模板参数传递JAR版本号拼接本地路径

如果你的JAR包是部署时从本地路径上传,直接新增版本号参数动态拼接CodeUri即可:

  1. 在模板的Parameters段新增版本号参数:
Parameters:
  # 原有参数保持不变
  JarVersion:
    Type: String
    Description: JAR包的版本号,随构建动态传入
  1. 修改Lambda的CodeUri配置,用!Sub函数动态拼接路径:
CodeUri: !Sub target/abc-${JarVersion}-prod.jar
  1. 部署时传入动态版本号即可,示例部署命令:
sam deploy --parameter-overrides JarVersion=1.2.3-prod Environment=prod # 其他参数按需传入

方案2:从S3拉取构件的正确配置(解决NoSuchKey错误)

你之前拆分Bucket、Key传参报错,是因为AWS::Serverless::Function的CodeUri字段不支持直接拆分Bucket/Key属性,需要改用Code字段配置S3源:

  1. 先在Parameters段新增S3相关参数:
Parameters:
  # 原有参数保持不变
  LambdaCodeBucket:
    Type: String
    Description: 存储JAR包的S3桶名
  LambdaCodeKey:
    Type: String
    Description: JAR包在S3中的完整Key
  1. 替换原有的CodeUri配置为Code字段:
# 删掉原来的CodeUri行,新增如下配置
Code:
  S3Bucket: !Ref LambdaCodeBucket
  S3Key: !Ref LambdaCodeKey
  1. NoSuchKey错误排查点:
  • 确认传入的S3Key是完整路径,包含前缀(比如如果JAR存在桶的build/目录下,Key要写build/abc-1.2.3-prod.jar)
  • 确认S3桶和CloudFormation栈在同一个AWS区域
  • 确认部署使用的IAM角色拥有对应S3桶的s3:GetObject权限

优化方案(推荐)

如果你使用SAM CLI进行构建部署,直接执行sam build命令,工具会自动识别target目录下的JAR包并更新CodeUri,无需手动维护版本号参数,部署时直接执行sam deploy即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:09:04