资源处理程序返回消息:“解压缩后的大小必须小于 262144000 字节 AWS Lambda 和 CDK,没有 serverless.yaml 文件
Resource handler returned message: "Unzipped size must be smaller than 262144000 bytes AWS Lambda and CDK, no serverless.yaml file
我正在尝试获取与 AWS CDK 一起使用的 Lambda 函数。我在 python 中实现了 lambda 函数,并希望在我的 Lambda 代码中包含外部库。目前这是我的 CDK 代码:
import aws_cdk as core
from aws_cdk import (
Stack,
aws_lambda as _lambda,
aws_apigateway as apigw,
)
class SportsTeamGeneratorStack(Stack):
def __init__(self, scope: Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
my_lambda = _lambda.Function(self, 'HelloHandler',
runtime=_lambda.Runtime.PYTHON_3_8,
code=_lambda.Code.from_asset("lambda",
bundling= core.BundlingOptions(
image=_lambda.Runtime.PYTHON_3_8.bundling_image,
command=[
"bash", "-c",
"pip install --no-cache -r requirements.txt -t /asset-output && cp -au . /asset-output"
],
),
),
handler='hello.handler',
)
apigw.LambdaRestApi(
self, 'Endpoint',
handler=my_lambda,
)
这是我的 Lambda 代码:
import json
import pandas
def handler(event, context):
print('request: {}'.format(json.dumps(event)))
return {
'statusCode': 200,
'headers': {
'Content-Type': 'text/plain'
},
'body': 'Hello, CDK! You have hit {}\n'.format(event['path'])
}
cdk 代码位于名为 sports_team_generator 的目录中,lambda 代码位于名为“lambda”的目录中的 hello.py 文件中。在“lambda”目录中,我还有我的 requirements.txt 文件,其中包含以下内容:
aws-cdk-lib==2.19.0
constructs>=10.0.0,<11.0.0
pytz==2022.1
requests==2.27.1
sportsipy==0.6.0
numpy==1.22.3
pandas==1.4.2
pyquery >= 1.4.0
我目前正在尝试避免使用 ECR 上传 docker 图像,然后将这些图像 link 上传到控制台中的 lambda 函数,因为我想通过 CDK 完成所有操作。我觉得好像 lambda 本身很小,并且不知道为什么它可能会超过大小要求。似乎 requirements.txt 导致了问题,我不确定是否有一些解决方法。最好我会修复此错误,尽管如果不可能,我可以开放创建 docker 图像并上传到 ECR,并且如果可能的话,通过 cdk link 将该 ECR 实例发送到 lambda 函数。如果有人有 solution/suggestions 请告诉我。
恐怕您唯一的选择是从容器中部署 lambda,请参阅 https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html
从 zip 解压缩的最大部署包大小为 250 MB。 Lambda 层也无济于事,因为所有层的组合部署包大小需要低于 250 MB。
但是,容器图像代码包大小限制为 10 GB。因此,如果您不能将 lambda 的包大小降低到 250 MB 以下,那么容器就是您的最佳选择。如何注册容器并将其用于 lambda 部署的指南位于 https://docs.aws.amazon.com/lambda/latest/dg/images-create.html and https://aws.amazon.com/blogs/aws/new-for-aws-lambda-container-image-support/
我正在尝试获取与 AWS CDK 一起使用的 Lambda 函数。我在 python 中实现了 lambda 函数,并希望在我的 Lambda 代码中包含外部库。目前这是我的 CDK 代码:
import aws_cdk as core
from aws_cdk import (
Stack,
aws_lambda as _lambda,
aws_apigateway as apigw,
)
class SportsTeamGeneratorStack(Stack):
def __init__(self, scope: Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
my_lambda = _lambda.Function(self, 'HelloHandler',
runtime=_lambda.Runtime.PYTHON_3_8,
code=_lambda.Code.from_asset("lambda",
bundling= core.BundlingOptions(
image=_lambda.Runtime.PYTHON_3_8.bundling_image,
command=[
"bash", "-c",
"pip install --no-cache -r requirements.txt -t /asset-output && cp -au . /asset-output"
],
),
),
handler='hello.handler',
)
apigw.LambdaRestApi(
self, 'Endpoint',
handler=my_lambda,
)
这是我的 Lambda 代码:
import json
import pandas
def handler(event, context):
print('request: {}'.format(json.dumps(event)))
return {
'statusCode': 200,
'headers': {
'Content-Type': 'text/plain'
},
'body': 'Hello, CDK! You have hit {}\n'.format(event['path'])
}
cdk 代码位于名为 sports_team_generator 的目录中,lambda 代码位于名为“lambda”的目录中的 hello.py 文件中。在“lambda”目录中,我还有我的 requirements.txt 文件,其中包含以下内容:
aws-cdk-lib==2.19.0
constructs>=10.0.0,<11.0.0
pytz==2022.1
requests==2.27.1
sportsipy==0.6.0
numpy==1.22.3
pandas==1.4.2
pyquery >= 1.4.0
我目前正在尝试避免使用 ECR 上传 docker 图像,然后将这些图像 link 上传到控制台中的 lambda 函数,因为我想通过 CDK 完成所有操作。我觉得好像 lambda 本身很小,并且不知道为什么它可能会超过大小要求。似乎 requirements.txt 导致了问题,我不确定是否有一些解决方法。最好我会修复此错误,尽管如果不可能,我可以开放创建 docker 图像并上传到 ECR,并且如果可能的话,通过 cdk link 将该 ECR 实例发送到 lambda 函数。如果有人有 solution/suggestions 请告诉我。
恐怕您唯一的选择是从容器中部署 lambda,请参阅 https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html
从 zip 解压缩的最大部署包大小为 250 MB。 Lambda 层也无济于事,因为所有层的组合部署包大小需要低于 250 MB。
但是,容器图像代码包大小限制为 10 GB。因此,如果您不能将 lambda 的包大小降低到 250 MB 以下,那么容器就是您的最佳选择。如何注册容器并将其用于 lambda 部署的指南位于 https://docs.aws.amazon.com/lambda/latest/dg/images-create.html and https://aws.amazon.com/blogs/aws/new-for-aws-lambda-container-image-support/