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

AWS CDK 通过Docker镜像创建Lambda函数TypeError报错解决方案

AWS CDK 使用Docker镜像构建多Lambda函数部署问题及解决方案

背景

我是AWS生态的新手,正在开发一款无服务器应用,目前已完成4个可正常运行的Lambda函数开发。接下来计划通过CDK搭建部署流水线,需实现以下需求:

  • 构建包含所有Lambda代码的Docker镜像
  • 基于同一个镜像创建4个不同的Lambda函数,仅通过覆盖Docker镜像的CMD参数指定对应的Lambda handler

我已在本地完成CDK环境搭建,可正常创建栈。

初始代码片段

创建Docker镜像代码

asset_img = aws_ecr_assets.DockerImageAsset(
    self,
    "test_image",
    directory=os.path.join(os.getcwd(), "../mysrc")
)

从Docker镜像创建Lambda的代码

aws_lambda.DockerImageFunction(
   self,
   function_name="gt_from_image",
   code=_lambda.DockerImageCode.from_ecr(
       self,
       repository=asset_img.repository,
       tag="latest")
)

报错信息

运行时收到如下报错:
TypeError: from_ecr() got multiple values for argument 'repository'

问题原因

  1. DockerImageCode.from_ecr 方法不需要传入CDK栈实例self作为第一个参数,多余传入的self会被识别为repository参数的第一个取值,和后续显式声明的repository参数冲突,因此触发参数重复报错
  2. DockerImageAsset 构建的镜像默认不会使用latest作为标签,而是以source_hash作为镜像标签,硬编码latest会导致部署时找不到对应镜像

最终解决代码

asset_img = _asset.DockerImageAsset(self, "test_image", directory=os.path.join(os.getcwd(), "../gt"))
_lambda.DockerImageFunction(self, id='gt_from_image', function_name="gt_from_image_Fn",
                                    code=_lambda.DockerImageCode.from_ecr(
                                        repository=asset_img.repository,
                                        tag=asset_img.source_hash))

多Lambda函数扩展实现

如果要基于同一个镜像创建4个不同handler的Lambda,只需要在DockerImageCode.from_ecr配置中新增cmd参数覆盖镜像默认CMD即可,示例如下:

# 第一个Lambda,指定对应handler
_lambda.DockerImageFunction(self, id='lambda_fn1', function_name="fn1",
    code=_lambda.DockerImageCode.from_ecr(
        repository=asset_img.repository,
        tag=asset_img.source_hash,
        cmd=["app.handler1"]
    )
)
# 第二个Lambda,指定不同handler
_lambda.DockerImageFunction(self, id='lambda_fn2', function_name="fn2",
    code=_lambda.DockerImageCode.from_ecr(
        repository=asset_img.repository,
        tag=asset_img.source_hash,
        cmd=["app.handler2"]
    )
)
# 剩余两个函数按相同逻辑修改id、函数名、cmd参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:30:02