无服务器Flask与AWS Lambda + API网关
项目描述
在AWS Lambda + API网关上无服务器Flask
# flask-zappa
#### 基于AWS Lambda + API网关的无服务器Flask
flask-zappa 让您轻松地将Flask应用程序部署到AWS Lambda + API网关。将其视为为您的Flask应用程序提供的“无服务器”Web托管。
这意味着
不再 需要繁琐的Web服务器配置!
不再 需要支付24/7服务器正常运行时间费用!
不再 需要担心负载均衡/可伸缩性!
不再 需要担心保持服务器在线!
不再 需要担心安全漏洞和补丁!
flask-zappa 处理
将项目打包成Lambda-ready的zip文件并上传到S3
正确设置IAM角色和权限
自动配置API网关路由、方法和集成响应
将API部署到准备就绪的各个阶段
太棒了!
此项目是针对Flask特定集成。如果您对底层的工作原理感兴趣,应查看 `Zappa核心库 <https://github.com/Miserlou/Zappa>`__,它可以用于任何WSGI兼容的Web框架,以及 `django-zappa <https://github.com/Miserlou/django-zappa>`__,它适用于django应用程序。
安装
$ pip install flask-zappa
配置
在部署应用程序之前,您需要定义一些设置。首先,您必须将您的AWS凭证存储在~/.aws/credentials中。
最后,在您的本地设置文件中定义一个ZAPPA_SETTINGS设置,将命名的部署环境映射到已部署的设置和S3存储桶(必须已创建)。这些可以命名为任何您喜欢的名称,但您可能希望有独立的dev、staging和production环境来分离您的数据。
ZAPPA_SETTINGS = {
'production': {
's3_bucket': 'production-bucket',
'settings_file': '~/Projects/MyApp/settings/production_settings.py',
},
'staging': {
's3_bucket': 'staging-bucket',
'settings_file': '~/Projects/MyApp/settings/staging_settings.py',
},
}
请注意,每个环境都定义了一个设置文件的路径。此文件将用作您的服务器端设置文件。具体来说,您将需要定义一个新的SECRET_KEY,以及您的部署DATABASES信息。
关于数据库的说明
由于Zappa需求是从打包的本地环境版本中调用的,而不是从pip中调用,并且因为我们无法确定我们的Zappa处理程序将在哪个平台上执行,我们需要确保我们只使用可移植的包。因此,我们不会使用默认的MySQL引擎,而是需要使用mysql-python-connector。
目前,Zappa只支持RDS上的MySQL和Aurora。
基本用法
初始部署
更新
管理
高级用法
您可以在ZAPPA_SETTINGS中定义其他设置来更改Zappa的行为。请在自己的风险下使用这些设置!
ZAPPA_SETTINGS = {
'dev': {
'aws_region': 'us-east-1', # AWS Region (default US East),
'deploy_delay': 1, # Delay time while deploying, in seconds (default 1)
'domain': 'yourapp.yourdomain.com', # Required if you\'re using a domain
'http_methods': ['GET', 'POST'], # HTTP Methods to route,
'integration_response_codes': [200, 301, 404, 500], # Integration response status codes to route
'method_response_codes': [200, 301, 404, 500], # Method response status codes to route
'parameter_depth': 10, # Size of URL depth to route. Defaults to 5.
'role_name': "MyLambdaRole", # Lambda execution Role
's3_bucket': 'dev-bucket', # Zappa zip bucket,
'settings_file': '~/Projects/MyApp/settings/dev_settings.py', # Server side settings file location,
'touch': False # GET the production URL upon initial deployment (default True)
}
}
待办事项
该项目非常年轻,因此还有很多工作要做。欢迎贡献力量!请在提交补丁之前提交问题,并将您的补丁提交到“dev”分支。
目前需要改进的事情
一切!
测试!
反馈!
真正的文档/网站!