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

如何在基于SAM构建的AWS Lambda运行时获取Docker镜像ID或标签

解决方案:在SAM部署时自动传递Lambda镜像ID/标签至运行时

方法1:利用SAM模板内置变量与环境变量自动注入

SAM支持引用镜像构建后的元数据,无需手动硬编码,可直接从ImageUri中提取标签,或结合ECR API获取镜像ID:

在template.yaml中为Lambda配置环境变量,通过模板函数提取镜像相关信息:

Resources:
  MyLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      ImageUri: !Sub "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/my-lambda-image:latest"
      Environment:
        Variables:
          # 提取镜像标签
          IMAGE_TAG: !Select [1, !Split [":", !GetAtt MyLambdaFunction.ImageUri]]
          # 传递ECR仓库地址,用于后续API调用获取镜像ID
          ECR_REPOSITORY: !Select [0, !Split [":", !GetAtt MyLambdaFunction.ImageUri]]

运行时逻辑:

  • 直接读取环境变量IMAGE_TAG获取标签
  • 若需镜像ID,调用ECR的DescribeImages API,传入仓库地址和标签即可获取ImageId,注意要给Lambda配置ecr:DescribeImages权限

方法2:构建镜像时将标签写入镜像内部

在Dockerfile中添加步骤,构建时把标签写入镜像内的文件,运行时直接读取:

ARG IMAGE_TAG
# 将标签写入镜像内文件
RUN echo $IMAGE_TAG > /app/image_tag.txt

# 运行阶段
FROM your-base-image
COPY --from=builder /app/image_tag.txt /app/

然后在SAM模板的Metadata中自动传递构建参数:

Resources:
  MyLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
    Metadata:
      DockerTag: latest
      DockerContext: ./my-function
      DockerBuildArgs:
        IMAGE_TAG: !Ref DockerTag

运行时只需读取/app/image_tag.txt即可拿到标签,无需依赖外部服务。若要获取镜像ID,需在本地构建后通过docker inspect获取ID并写入文件,再复制到镜像中,适合CI/CD自动化流程。

方法3:借助SAM构建后元数据(需脚本辅助)

执行sam build后,SAM会在.aws-sam/build目录生成包含实际镜像URI的模板文件。可编写简单脚本,在sam build后提取镜像ID,自动更新主模板的环境变量,适合完全自动化的部署场景。


附:类似问题中文翻译

如何从容器内部获取容器对应的镜像ID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:40:15