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

使用AWS SAM部署Lambda容器时,指定resolve-image-repos后ImageUri该如何设置?

问题:AWS SAM部署Docker镜像到Lambda报错“Unable to upload artifact None referenced by ImageUri parameter”

我尝试通过AWS SAM将Docker镜像部署为Lambda函数,使用的SAM模板如下:

Resources:
  StrapiFunction:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      Events:
        Strapi:
          Type: Api
          Properties:
            Path: /
            Method: ANY
    Metadata:
      DockerTag: latest
      DockerContext: ./
      Dockerfile: Dockerfile

随后通过CI脚本执行部署命令:

sam deploy  \
    --resolve-s3 \
    --resolve-image-repos \
    --region ${AWS_REGION} \
    --template-file ${SAM_FILE} \
    --stack-name my-cms-${STAGE}-stack \
    --capabilities CAPABILITY_NAMED_IAM

根据AWS官方文档,--resolve-image-repos参数会让SAM自动创建Amazon ECR仓库用于打包部署,但部署时出现错误:

Unable to upload artifact None referenced by ImageUri parameter

由于ECR仓库由SAM自动创建,无法提前知晓其URI且每次部署URI似乎都会变化,请问遗漏了什么?

解决方案
  • 升级SAM CLI到最新版本
    旧版本SAM CLI对--resolve-image-repos的自动处理逻辑存在bug,导致无法正确填充ImageUri。执行以下命令升级:
pip install --upgrade aws-sam-cli

升级后重新执行部署命令,验证是否解决问题。

  • 确认Docker服务正常运行
    SAM构建镜像依赖Docker,CI环境中需确保Docker daemon已启动且当前用户有权限访问。可以在部署前添加检查命令:
docker ps

如果命令报错,说明Docker未正常运行,需先修复CI环境的Docker配置。

  • 在模板中显式添加ImageUri占位符
    虽然SAM自动管理ECR仓库,但显式定义ImageUri参数可避免“None”引用问题。修改模板如下:
Parameters:
  StrapiFunctionECRUri:
    Type: String
    Default: ""

Resources:
  StrapiFunction:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      ImageUri: !Ref StrapiFunctionECRUri
      Events:
        Strapi:
          Type: Api
          Properties:
            Path: /
            Method: ANY
    Metadata:
      DockerTag: latest
      DockerContext: ./
      Dockerfile: Dockerfile

部署时SAM会自动将创建的ECR仓库URI填充到该参数中。

  • 验证Dockerfile和上下文路径
    确认DockerContext: ./指向的目录下存在正确的Dockerfile,且Dockerfile能正常构建镜像。本地先执行docker build -t test-strapi .测试构建流程,排除Dockerfile本身的错误。

  • 检查CI角色权限
    确保执行部署的IAM角色拥有以下权限:

    • ecr:CreateRepository
    • ecr:GetAuthorizationToken
    • ecr:BatchCheckLayerAvailability
    • ecr:GetDownloadUrlForLayer
    • ecr:BatchGetImage
    • ecr:PutImage
    • lambda:CreateFunction
    • lambda:UpdateFunctionCode
      权限不足会导致SAM无法创建ECR仓库或推送镜像,进而引发ImageUri错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:40:44