带aws lambda+api网关的无服务器django
django-zappa的Python项目详细描述
<;img src="http://i.imgur.com/oepnhjn.jpg"alt="扎帕岩石!"/>;
<;/p>;
\django zappa-无服务器django
[![django cc](https://img.shields.io/badge/django-cc-ee66dd.svg)(https://github.com/codingjoe/django-cc)
[![构建状态](https://travis ci.org/miserlou/django zappa.svg)(https://travis-ci.org/miserlou/django-zappa)
[![覆盖范围](https://img.shields.io/covertalls/miserlou/django zappa.svg)(https://covertalls.io/github/miserlou/django-zappa)
[![需求状态](https://requires.io/github/miserlou/django-zappa/requirements.svg?branch=master)(https://requires.io/github/miserelou/django-zappa/requirements/?分支=主)
[![松弛](https://img.shields.io/badge/chat-slack-ff69b4.svg)](https://slackautoinviter.herokuapp.com/)
**django zappa**使在aws lambda+api网关上部署django应用程序变得非常容易。把它想象成django应用程序的"无服务器"web主机。
这意味着:
***不再是**乏味的web服务器配置!
***不再支付**24/7服务器正常运行时间!
***不再**担心负载平衡/可伸缩性!
***不要再担心让服务器保持在线!
***不要再担心安全漏洞和补丁!
**django zappa**处理:
*将项目打包到lambda ready zip文件并将其上载到s3
*正确设置iam角色和权限
*自动配置api网关路由、方法和集成响应
*将api网关请求转换为valid wsgi,并返回与api网关兼容的http响应
*将您的应用程序部署到不同的准备阶段(dev、staging、prod)
_
[请参见此处的实际操作!](https://zappa.gun.io/)你也可以观看**[如何使用django zappa的屏幕广播](https://www.youtube.com/watch?v=plurbpn0xc8&feature=youtu.be)**。
如果你有兴趣了解这是如何在幕后工作的,你应该看看**[zappa核心库](https://github.com/miserelou/zappa)**,它可以被任何与wsgi兼容的web框架使用。
\WS-Credentials文件](https://blogs.a ws.amazon.com/security/post/tx3d6u6wsfgok2h/a-new-and-standardized-way-to-manage-credentials-in-the-aws-sdks)已正确安装。
**django设置,您需要在已安装的应用程序中添加"django_zappa",以便将zappa命令添加到管理脚本中。
``python
installed_apps=[
…
'django_zappa',
]
```
最后,在本地设置中定义zappa_设置将命名部署环境映射到已部署设置和S3存储桶(必须已创建)的文件。这些可以命名为任何您喜欢的名称,但是您可能希望有独立的开发、登台和生产环境来分离您的数据。
`` python
zappa\u settings={
'生产':{
's3\u bucket':'生产bucket',
'设置文件':'~/projects/myapp/settings/production_settings.py',
},
‘暂存’:{
‘s3_bucket’:‘暂存bucket’,
‘设置_file’:'~/projects/myapp/settings/staging_settings.py',
},
}
````
请注意,每个环境都定义了设置文件的路径。此文件将用作您的服务器端设置文件。具体来说,您需要定义[新的密钥](https://gist.github.com/miserlou/a9cbe22d06cbabc07f21)以及部署数据库信息。Zappa现在通过[lambda包](https://github.com/miserlou/lambda包)支持mysql-python和pyscopg2。sage
请访问:https://7k6anjok99.execute api.us-east-1.amazonaws.com/production
,现在您的应用程序是**live!**有多酷?!
njok99.execute api.us-east-1.amazonaws.com/production
例如,要回滚到3个版本以前部署的版本:
$python manage.py rollback production 3
$python manage.py调用生产检查
系统检查未发现任何问题(0已静音)。
\
您可以在zappa_设置中定义其他设置来更改zappa的行为。用这些你自己的风险!
``` python
zappa撸settings={
'dev':{
'aws撸region':'us-east-1',aws region(默认为us east),
'domain':'yourapp.yourdomain.com',如果您使用域,则需要使用http撸methods'['get','post','http方法进行路由,
'i集成"响应代码":[200,301,404,500],"要路由的集成响应状态代码
"内存大小":512,"lambda函数内存(MB)"
"超时":30,"lambda函数超时(秒)"
"方法响应代码":[200,301,404,500],"方法响应"要路由的状态代码
"参数深度":10,要路由的URL深度大小。默认值为8。
"角色名称":"mylambdarole";"lambda执行角色"
"s3存储桶":"开发存储桶";"zappa压缩存储桶"
"设置存储文件":"~/projects/myapp/settings/dev存储设置.py","服务器端设置文件位置"
"触摸":false,"获取产品"初始部署时的url(默认为true)
"使用预编译的包":true,如果可能,请使用已为aws lambda预编译的c扩展包
"vpc配置":{lambda函数的可选vpc配置
"子网":["子网-12345678"]注意:并非所有可用区域都支持lambda!
"securitygroupid":["sg-12345678"]
}
}
}
}
`````
保持服务器的温度
lambda有一个限制,即不经常调用的函数需要更长的启动时间,有时最多需要10秒。但是,定期调用的函数会被缓存并快速启动,通常不到50ms。为了确保您的服务器保持在缓存状态,您可以[手动配置](http://stackoverflow.com/a/27382253)zappa函数的计划任务,该任务将通过每5分钟打一次电话。目前没有办法通过api来配置它,所以您必须手动设置它。当此功能通过api可用时,django zappa将自动配置此功能。通过同样的机制添加对LetsEncrypt的支持是很好的。
\.aws.amazon.com/api gateway/latest/developerguide/how to cors.html)通过API网关控制台启用CORS。不要忘记在进行更改后重新部署您的api!
todo
我们非常欢迎您的贡献!请在提交修补程序之前提交票证,并将修补程序提交到"开发"分支。
现在需要工作的事情:
*测试!
*反馈!
*真正的文档/网站!