跳转到主要内容

无服务器Flask与AWS Lambda + API网关

项目描述

在AWS Lambda + API网关上无服务器Flask

Logo # 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存储桶(必须已创建)。这些可以命名为任何您喜欢的名称,但您可能希望有独立的devstagingproduction环境来分离您的数据。

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”分支。

目前需要改进的事情

  • 一切!

  • 测试!

  • 反馈!

  • 真正的文档/网站!

项目详情


由...