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

如何使用AWS SAM打包单仓库中多个基于Docker镜像的AWS Lambda函数?

多容器化AWS Lambda函数的SAM构建方案

核心思路

利用AWS SAM的多镜像批量构建能力,在同一个SAM模板中定义所有容器化Lambda函数,通过sam build自动完成所有镜像的构建与ECR推送,再配合sam package完成部署包的最终打包。

步骤1:更新SAM模板(template.yml)

在模板中添加第二个容器化Lambda函数,每个函数需明确配置镜像构建规则和启动命令:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

Parameters:
  AccountId:
    Type: String
  AwsRegion:
    Type: String
  DockerImagePrefix:
    Type: String

Resources:
  # 第一个容器化Lambda函数
  LambdaFunction1:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      ImageUri: !Sub "${AccountId}.dkr.ecr.${AwsRegion}.amazonaws.com/${DockerImagePrefix}-lambda1:latest"
      ImageConfig:
        Command: ["lambdas.lambda1.index.handler"]
    Metadata:
      Dockerfile: Dockerfile.lambda1  # 第一个函数专属的Dockerfile路径
      DockerContext: ./lambda1        # 第一个函数的代码目录(Docker构建上下文)

  # 第二个容器化Lambda函数
  LambdaFunction2:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      ImageUri: !Sub "${AccountId}.dkr.ecr.${AwsRegion}.amazonaws.com/${DockerImagePrefix}-lambda2:latest"
      ImageConfig:
        Command: ["lambdas.lambda2.index.handler"]
    Metadata:
      Dockerfile: Dockerfile.lambda2  # 第二个函数专属的Dockerfile路径
      DockerContext: ./lambda2        # 第二个函数的代码目录(Docker构建上下文)

步骤2:修改buildspec.yml

替换原有单一sam package命令,增加ECR登录、SAM批量构建步骤:

version: 0.2

phases:
  pre_build:
    commands:
      # 登录ECR,获取镜像推送权限
      - aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com
  build:
    commands:
      # 批量构建所有容器化Lambda的镜像并推送到ECR
      - sam build --use-container --image-repository ${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${DOCKER_IMAGE_PREFIX}
      # 打包SAM模板并上传到指定S3桶
      - sam package --template template.yml --s3-bucket "$S3_BUCKET" --output-template-file template-export.yml --region ${AWS_REGION}

关键说明

  • sam build --use-container会自动识别模板中每个Lambda函数的Metadata配置,找到对应的Dockerfile和构建上下文,完成镜像构建与ECR推送,无需手动逐个处理。
  • 每个Lambda的ImageUri需保持唯一,建议用函数名作为镜像后缀,避免镜像覆盖。
  • 若两个函数的镜像基础结构相似,可通过共享自定义基础镜像来减少重复构建时间,只需各自指定不同的启动命令即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 12:22:25