【问题标题】:AWS CDK create Lambda from imageAWS CDK 从图像创建 Lambda
【发布时间】:2021-08-17 17:55:51
【问题描述】:

我是 AWS 世界的新手。我正在开发一个构建无服务器应用程序的项目,作为其中的一部分,我创建了 4 个运行良好的 lambda。

接下来我尝试使用 CDK 创建部署管道;下面是我想要做的。

  1. 使用包含所有 lambda 代码的代码创建 docker 映像

  2. 从同一图像创建 4 个不同的 lambda,只需覆盖 docker 图像中的 CMD 并提及 lambda 处理程序

我已在本地设置 CDK 并能够创建堆栈,一切正常。

下面是我的代码sn-p

--创建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'

我不确定如何引用创建的图像并定义 lambda。

已解决:以下是解决方案

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))

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-cdk amazon-ecr


    【解决方案1】:

    documentationDockerImageCode.from_ecr(),它不需要范围参数,因此您的self 参数是导致错误的原因。

    另一个问题是DockerImageAsset 不会将图像标记为latest,因为这违反了 AWS 最佳实践。

    实现您正在做的事情的简单方法是使用 DockerImageCode.from_image_asset().

    【讨论】:

    • Thanks.removed the self 并且 CDK 正在上传 Stack 但无法创建 Lambda 并显示以下错误消息。代码 --> asset_img = _asset.DockerImageAsset(self, "galactus_transformer_image", directory=os.path.join(os.getcwd(), "../galactus_transformer")) _lambda.DockerImageFunction(self, id='gt_from_image', function_name="gt_from_image_Fn", code=_lambda.DockerImageCode.from_ecr(repository=asset_img.repository)) 资源处理程序返回消息:“源图像 xxxxxx.dkr.amazonaws.com/aws-cdk/assets:latest 不存在。提供有效的源图像。
    • 正如我在答案中所说,这不起作用,因为DockerImageAsset 不会使用latest 标签。
    • 我删除了最新的 sset_img = _asset.DockerImageAsset(self, "galactus_transformer_image", directory=os.path.join(os.getcwd(), "../galactus_transformer")) _lambda.DockerImageFunction( self, id='gt_from_image', function_name="gt_from_image_Fn", code=_lambda.DockerImageCode.from_ecr(repository=asset_img.repository))
    • 如果您没有在from_ecr() 中指定tag 参数,您可以从文档中看到它只会使用latest 作为默认值。
    • 我终于能够从 DockerImageAsset 图像创建 lambda。下面是代码。 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))
    猜你喜欢
    • 2021-02-03
    • 2022-08-08
    • 2022-07-21
    • 2020-02-04
    • 2021-10-25
    • 1970-01-01
    • 2020-09-22
    • 2020-09-25
    • 2022-07-21
    相关资源
    最近更新 更多