我已经使用zappa在AWS中部署了api (Django应用程序)。我正面临着冷启动的问题。启动应用程序(代码将近25 MB )需要花费近7-8秒的时间来克服这个问题?
在zappa settings.json,我保留了settings.json,但是没有用。我编写了lambda函数来使用调度cloudwatch事件来触发api,它正在触发(我可以在zappa日志中看到),但问题没有解决。
我的处理程序的示例代码是:
import json
def lambda_handler(event, context):
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}我的zappa配置如下:
{
"dev": {
"aws_region": "ap-south-1",
"django_settings": "api.settings",
"profile_name": "default",
"project_name": "api-public",
"runtime": "python3.6",
"s3_bucket": "api-public",
"slim_handler": true,
"vpc_config" : {
"SubnetIds": [ "subnet-052347e86b94b75d3" ], // use the private subnet
"SecurityGroupIds": [ "sg-0ba3a644d413a2b00","sg-0db0b6de5b14cda33"]
},
"xray_tracing": true,// Optional, enable AWS X-Ray tracing on your lambda function.
"memory_size": 1024, // Lambda function memory in MB. Default 512.
"log_level": "DEBUG", // Set the Zappa log level. Can be one of CRITICAL, ERROR, WARNING, INFO and DEBUG. Default: DEBUG
"keep_warm": true, // Create CloudWatch events to keep the server warm. Default true. To remove, set to false and then `unschedule`.
"timeout_seconds": 300,
"keep_warm_expression": "rate(3 minutes)", // How often to execute the keep-warm, in cron and rate format. Default 4 minutes.
"exclude": [
".git/*",
".gitignore",
"boto3*",
"*botocore*",
"django-debug-toolbar*",
"sqlparse*",
"zappa_settings.json",
"README.md"
],
"lambda_description": "zappa deployment public", // However you want to describe your project for the AWS console. Default "Zappa Deployment".
"extra_permissions": [{ // Attach any extra permissions to this policy. Default None
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": ["arn:aws:lambda:ap-east-1:940180048916:function:api-public-dev"],// AWS Service ARN
}],
}
}发布于 2020-11-13 01:33:24
如果您需要保持Django应用程序的温暖,那么您使用AWS Lambda函数的方式是错误的。(相信我,个人经历)
AWS Lambda函数的创建是为了将轻量级函数部署到世界各地。你的Django应用程序是一个重(最)的功能。
AWS是专为那些生命周期仅为秒数的应用程序设计的。对于Lambda函数来说,25 MB本身是一个巨大的负载。
考虑使用轻量级框架作为Flask,而不是。不要克服Lambda函数。它们不是用来做这个的。
而是使用AWS ECS。
发布于 2019-04-18 10:25:34
你能包括你的Zappa配置吗?下面是一个如何在设置文件上下文中使用keep_warm的示例,其中包括更多的设置:
{
"production": {
"aws_region": "us-east-1",
"django_settings": "config.zappa",
"profile_name": "zappa",
"project_name": "mydomain",
"runtime": "python3.6",
"s3_bucket": "zappa-mydomain",
"certificate_arn": "arn:aws:acm:us-east-1:272727272727:certificate/eeeeeeee-dddd-cccc-bbbb-aaaaaaaaaaaa",
"domain": "mydomain.com",
"exclude": [
".git/*",
".gitignore",
"boto3*",
"*botocore*",
"django-debug-toolbar*",
"sqlparse*",
"zappa_settings.json",
"README.md"
],
"keep_warm": true,
"timeout_seconds": 300
}
}祝好运!
发布于 2019-07-10 08:15:44
从技术上讲,如果我们能够接受这是AWS lambda函数限制之一这一事实,这就不是一个问题。
这里的主要问题是,我们强迫自己使用lambda,因为这个限制(延迟)显然不适合需求。
如果我们用lambda来处理这个案子的话,
我建议使用EC2作为您的web (API),并在此基础上进行自动缩放和负载平衡,而不是通过lambda通常的工作方式和花费大量的钱。
在这种方法中,API返回的响应要快得多,因为您的api是清醒的,等待任何请求--比在lambda上使用它要便宜得多,因为lambda每GB收取0.00001667美元的计算时间,假设您的Lambda醒着10分钟:)
希望这会有帮助!)
干杯!猴
https://stackoverflow.com/questions/55742741
复制相似问题