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

执行sam package命令报错:CodeUri工件上传失败且S3权限被拒

问题分析与解决方案

看起来你遇到了两个关联的问题:SAM找不到函数代码的位置,以及S3上传权限被拒绝。咱们一步步来解决:

1. 修复CodeUri缺失导致的Artifact None错误

你的template.yml里的HelloWorldFunction资源缺少了CodeUri配置,这是SAM函数资源的必填参数之一,用来指定函数代码所在的本地目录或压缩包路径。SAM在打包时会读取这个路径下的代码,上传到指定的S3桶中。

修改你的template.yml,在Properties块中添加CodeUri:

AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: ./  # 指向index.js所在的本地目录(和template.yml同目录的话用./即可)

2. 排查S3 PutObject AccessDenied错误

虽然你提到IAM用户拥有AmazonS3FullAccess权限,但还是有几个常见原因会导致这个错误:

  • CLI凭证不匹配:确认当前AWS CLI使用的是你配置了权限的IAM用户凭证。运行命令aws configure list查看当前生效的Access Key ID和Region,确保和你预期的一致。
  • S3桶区域不匹配:如果你的S3桶创建在某个特定Region(比如us-west-2),但CLI默认配置的Region不同,可能会导致跨区域访问权限问题。可以在sam package命令中显式指定桶的Region:
    sam package \
      --template-file template.yml \
      --output-template-file package.yml \
      --s3-bucket brian-test-sam \
      --region <你的桶所在区域>
    
  • S3桶策略限制:检查桶的自定义策略,是否存在拒绝该IAM用户执行PutObject操作的规则。默认情况下,IAM的AmazonS3FullAccess权限会覆盖桶策略,但如果桶策略有明确的拒绝规则,会优先生效。

先解决CodeUri的问题,再重新运行sam package命令,很多时候第一个错误修复后,第二个权限问题也会随之消失(因为SAM现在有了正确的文件要上传)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:08:27