如何使用 boto3 和 Docker 部署 AWS-Lambda?

use*_*221 1 python amazon-web-services docker boto3 aws-lambda

环境
jupyterlab,Python 3.8。
ubuntu 20.04LTS。
(客户端:macos bigsur / google chrome)。
使用boto3。

情况
我构建了 docker 镜像并将其成功推送到 ECR。
该图像具有 awslambdaric 并包含 aws-lambda-rie。
我可以使用 AWS Lambda 控制台部署该映像。

我想
使用 boto3(=python 代码)将其部署到 lambda。

问题
按照 boto3 手册,部署 lambda 如下:

import boto3
lambdac = boto3.client('lambda')
dic = {
    'FunctionName':'lambda-name',
#    'Runtime':'python3.8',
    'Role':'my-role-arn',
    'Code':{'ImageUri':uri},
}
lambdac.create_function(**dic)
Run Code Online (Sandbox Code Playgroud)

这会出错。
它需要Runtime,所以我添加了runtime(我认为docker容器版本不需要runtime)。
并运行,并返回另一个错误。

InvalidParameterValueException: An error occurred (InvalidParameterValueException) when calling the CreateFunction operation: Runtime and Handler are mandatory parameters for functions created with deployment packages.
Run Code Online (Sandbox Code Playgroud)

这个错误让我想到“不支持 boto3 使用容器部署 lambda 吗?”
因为我没有看到使用 boto3 将容器部署到 lambda 的示例。

问题
boto3不是提供向lambda部署容器吗?
或者有其他boto3功能提供吗?(ecr 客户端或其他...)。
或者python开发环境有没有其他方法将容器部署到lambda?

use*_*221 5

我自己解决了。

create_function 的 kwargs 需要 "PackageType":"Image"

import boto3
lambdac = boto3.client('lambda')
dic = {
    'FunctionName':'lambda-name',
    'Role':'my-role-arn',
    'Code':{'ImageUri':uri},
    'PackageType':'Image'   #add this parameter
}
lambdac.create_function(**dic)
Run Code Online (Sandbox Code Playgroud)