用于aws lambda和api网关的无服务器python web服务
zappa的Python项目详细描述
zappa-无服务器python
- 保持服务器温度
- 启用CORS
- 大型项目
- 启用bash completion
- 在API网关上启用安全端点rel="nofollow">在API网关上启用安全端点
- 设置环境变量
- 局部环境变量
- 远程AWS环境变量
- 远程环境变量
- 远程环境变量(通过S3文件)
- API网关上下文变量
- 捕捉未处理的异常
- 使用自定义AWS IAM角色和策略
- AWS X-Ray
- 全球可用的无服务器体系结构
- 提高AWS服务限制
- 将Zappa与Docker一起使用
- 死信队列
- 唯一包ID
- 应用程序负载平衡器事件源
- 端点配置
- 使用本地回购
关于
赶时间?点击查看(现在稍微过时了)来自serverless sf的幻灯片!
zappa使在aws lambda+api网关上构建和部署无服务器、事件驱动的python应用程序(包括但不限于wsgi web应用程序)变得非常容易。把它想象成python应用程序的"无服务器"web托管。这意味着无限扩展,零停机,零维护,零维护-而且只需当前部署成本的一小部分!
如果您有一个python web应用程序(包括django和flask应用程序),那么它就很简单:
$ pip install zappa
$ zappa init
$ zappa deploy
现在你的服务器少了!哇!< /P>< Buff行情>
你说的"无服务器"是什么意思?
好吧,还有一个服务器-但它只有40毫秒的生命周期!在这种情况下,无服务器意味着"没有任何永久性基础设施"。
对于传统的http服务器,服务器24/7在线,在请求进入时逐个处理它们。如果传入请求的队列太大,则某些请求将超时。使用zappa,每个请求都由amazon api网关提供自己的虚拟http"服务器"。aws自动处理水平缩放,因此永远不会有请求超时。然后,每个请求从aws lambda中的内存缓存调用应用程序,并通过python的wsgi接口返回响应。应用程序返回后,"服务器"将关闭。
更好的是,使用Zappa,您只需支付所用服务器时间的毫秒数,因此它比像Linode或Heroku这样的VPS/PaaS主机便宜很多数量级,而且在大多数情况下,它是完全免费的。此外,无需担心负载平衡或再次保持服务器在线。
它非常适合在flask和bottle这样的框架中部署无服务器的微服务,也非常适合在django中托管更大的web应用和cmse。或者,你可以使用任何你喜欢的与wsgi兼容的应用程序!您可能不需要更改现有的应用程序才能使用它,而且您也不会被限制使用它。
Zappa还允许您构建混合事件驱动的应用程序,该应用程序可以扩展到每年的万亿事件,而您不需要额外的努力!您还可以获得免费的SSL证书,全局应用程序部署,API访问管理,自动安全策略生成,预编译的C扩展,自动保持温暖,超大的lambda包以及许多其他独有功能!
最后,zappa是一个超级容易使用的工具。您可以使用一个现成的命令部署应用程序!
太棒了!
安装和配置
开始之前,请确保您运行的是Python2.7或Python3.6,并且您有一个有效的AWS帐户,并且您的AWS凭据文件是prop已安装。
zappa可以通过pip轻松安装,如下所示:
$ pip install zappa
请注意,必须将zappa安装到项目的虚拟环境中。虚拟环境名称不应与Zappa项目名称相同,因为这可能会导致错误。
(如果您使用pyenv并喜欢使用pyenv来管理virtualenv,那么您只需调用pyenv local[您的虚拟名称]即可。conda用户应该在这里评论)
接下来,您需要定义本地和服务器端设置。
运行初始设置/设置
zappa可以使用init
命令自动为您设置部署设置:
$ zappa init
这将自动检测您的应用程序类型(flask/django-pyramid users请参见此处),并帮助您定义部署配置设置。完成初始化后,在定义基本部署设置的项目目录中会有一个名为zappa_settings.json的文件。对于大多数wsgi应用程序,它可能看起来像这样:
{// The name of your stage"dev":{// The name of your S3 bucket"s3_bucket":"lambda",// The modular python path to your WSGI application function.// In Flask and Bottle, this is your 'app' object.// Flask (your_module.py):// app = Flask()// Bottle (your_module.py):// app = bottle.default_app()"app_function":"your_module.app"}}
或者对于django:
{"dev":{// The name of your stage"s3_bucket":"lambda",// The name of your S3 bucket"django_settings":"your_project.settings"// The python path to your Django settings.}}
psst:如果您是第一次使用zappa部署django应用程序,您可能需要阅读edgar roman的《django zappa指南》。
您可以定义任意多个阶段-我们建议您使用dev、staging和production 现在,你准备好部署了! 配置设置后,您可以使用一个命令将应用程序打包并部署到名为"生产"的阶段: 现在你的应用程序是直播!有多酷? 为了解释发生了什么,当您调用 请注意,为执行lambda而创建的默认iam角色和策略应用了一组自由权限。
它们很可能不适合重要应用程序的生产部署。见章节
自定义AWS IAM角色和执行策略了解更多详细信息。 如果您的应用程序已经部署,并且您只需要上传新的python代码,而不需要接触底层路由,那么您可以简单地: 这将创建一个新的归档文件,将其上载到s3并更新lambda函数以使用新代码,但是't触摸API网关路由。 您还可以通过提供要返回的修订数,将部署的代码回滚到以前的版本。例如,要回滚到3个版本以前部署的版本: Zappa可用于轻松地安排定期发生的函数。这提供了一个更好的,免维护的芹菜替代品!
这些函数将与 然后: 现在您的函数将每分钟执行一次! 如果要取消这些操作,只需使用 现在您的计划活动规则被删除。 有关详细信息,请参见示例。 类似于 注意,在这种情况下,您必须提供自己的lambda arn和role arn,因为它们可能不是为您创建的。 您可以使用 如果需要查看部署和事件计划的状态,只需使用 您可以通过调用 默认情况下,这将显示所有日志项。除了http和其他事件之外,任何 您可以使用参数http 类似地,您可以执行相反操作,并且只显示非http事件和日志消息: 如果您不喜欢默认的日志颜色,可以使用 您还可以使用 您可以使用 注意,这使用了cloudwatch日志过滤语法 要在不执行以下操作的情况下结束日志(要在显示请求的日志结束后立即退出),请传递 您可以使用 例如,假设您在一个名为"my_app.py"的文件中有一个基本应用程序,并且您希望在其中调用一个名为"my_function"的函数。部署应用程序后,您可以随时调用该函数: 任何远程打印语句和函数返回的值都将打印到本地控制台。漂亮! 您还可以使用 例如,如果您想在运行在vpc(如无服务器aurora)中的rds数据库上创建第一个超级用户,它就可以派上用场:
$zappa invoke staging"来自django.contrib.auth import get_user_model;user=get_user_model();user.objects.create_superuser('username','email','password')"--raw
为了方便起见,zappa还可以使用 显然,这只适用于正确定义了设置的django项目。 对于有自己参数的命令,也可以将该命令作为字符串传入,如下所示: 需要直接用户输入的命令,如 要获得更多的django集成,请查看zappa-django-utils项目。 (请注意,执行时间超过30秒的命令可能会超时,从而无法返回输出—但该命令可能会继续运行。有关解决办法,请参见此相关问题。 Zappa可以部署到具有自定义SSL证书的自定义域名和子域,让我们对证书进行加密,并使用AWS证书管理器(ACM)证书。 目前,这些证书中最容易使用的是aws证书管理器证书,因为它们是免费的、自更新的,并且需要最少的工作量。 按照下面的说明进行配置后,所有这些方法都使用相同的命令: 从CI/CD系统部署时,可以使用: 跳过确认提示。 亚马逊提供了自己的免费选择,让我们加密称为aws证书管理器(acm)。要与Zappa一起使用此服务: 如果您想在一个域上使用Zappa,该域具有一个免费的Let's Encrypt证书,使用基于自动路由53的DNS身份验证,那么您可以使用这个方便的指南 如果您想在一个域上使用Zappa,该域有一个免费的Let's Encrypt Certificate Using HTTP Authentication(让我们使用HTTP身份验证来加密证书),您可以遵循本指南
但是,现在使用基于路由53的dns身份验证要容易得多,这将允许您使用let's encrypt证书和一个 类似地,您可以根据aws生态系统中发生的事件(如s3上载、dynamodb条目、kinisis流、sns消息和sqs队列)执行函数。 在您的zappa_settings.json文件中,定义您r事件源和要执行的函数。例如,这将执行 然后: 现在你的函数将执行每次新的上传出现在你的桶! 要在应用程序上下文中访问密钥的信息,您需要 同样,对于a简单的通知服务事件: 也可以添加sns消息过滤器 dynamodb和kinisis略有不同,因为它不是基于事件的而是从流中提取的: sqs也从流中提取消息。此时,只有"标准"队列才能触发lambda事件,而不是"fifo"队列。请仔细阅读aws文档,因为lambda在函数成功完成后会代表您调用sqs deletemessage api。 用于配置lex bot的意图触发事件: 事件也可以采用关键字参数: 要获取关键字参数,您需要查看事件字典: 您可以在这里找到更多的事件源示例。
Zappa现在还提供了在完全独立的AWS lambda实例中异步无缝执行函数的能力! 例如,如果您有一个flask api来订购馅饼,那么可以在一个完全独立的lambda实例中无缝地调用 就这样!您的api响应将立即返回,而 当对@task修饰函数或zappa.asynchronous.run命令的调用发生在lambda之外时,例如您的本地开发环境,
函数将立即在本地执行。Zappa异步功能只起作用
在lambda环境中或指定远程调用时
尝试..对这样的异步任务执行块除外: 将导致为同一错误发送两次电子邮件。参见aws的异步重试。若要解决此副作用并使故障处理程序仅执行一次,请将返回值更改为: 默认情况下,此功能使用直接aws lambda调用。相反,您可以使用aws simple notification service作为任务事件源,方法是使用 使用sns还需要在 这将自动创建并订阅代码调用 使用sns也会返回一个messagE ID,以防您需要跟踪调用。 通过将函数传递给zappa.asynchronous.run,您也可以在不使用decorator的情况下使用此功能,如下所示: 默认情况下,zappa将使用lambda的当前函数名和当前aws区域。如果要调用lambda
不同的函数名/区域或从lambda外部调用lambda,必须指定
如果没有使用那些task()参数,那么ec2将在本地执行该函数。这些相同
此功能适用以下限制: 所有这些代码仍然与非lambda环境向后兼容-它只是以阻塞的方式执行并返回结果。 如果在虚拟私有云(vpc)中运行zappa,则需要配置子网以允许lambda与vpc内的服务以及公共互联网通信。最小设置需要两个子网。 在子网A中: 在子网B中: 您可以将lambda放在多个子网中,这些子网的配置方式与subnet-b的配置方式相同,以获得高可用性。 一些有用的资源是本教程和其他教程。PC Internet" rel="nofollow">本AWS文档页 可以捕获异步任务的响应。 Zappa使用dynamodb作为后端。 要捕获响应,必须在 异步响应被分配一个 示例: 您可以在本地设置中定义其他设置
改变扎帕的行为。用这些你自己的风险! 如果您更喜欢yaml而不是json,那么您还可以使用一个 您还可以随时使用 类似地,您可以提供一个 zappa将自动设置应用程序的定期执行,以使lambda函数保持温暖。这可以通过 Zappa现在能够提供和接收由其mime类型检测到的二进制文件。 然而,通常Zappa是为运行应用程序代码而设计的,而不是为静态Web资产服务的。如果您计划在您的web应用程序(css/javascript/images/etc.)中提供自定义静态资产,那么您可能希望使用aws s3和aws cloudfront的组合。 您的web应用程序框架可能会自动处理这个问题。对于烧瓶,有烧瓶-s3,对于django,有django存储 类似地,您可能希望设计应用程序,以便静态二进制上载直接使用S3 您也可以在应用程序中直接处理cors。您的web框架可能会有一个扩展来实现这一点,例如django cors headersdjango cors headers或flask cors。使用这些将使您的代码更易于移植。 aws目前将lambda zip大小限制为50兆字节。如果您的项目大于此值,请在 可以通过将以下内容添加到.bashrc中来启用bash完成: 激活全局python argcomplete--dest=->;文件 该文件的内容应来源于例如~/.bashrc. 您可以使用 通过将 如果使用zappa部署api端点,则可以利用api gateway lambda authorizers来实现基于令牌的身份验证,所需做的就是提供创建所需输出的函数,其余的由扎帕负责。该功能的一个良好开端是aws实验室蓝图示例 如果您想知道如何使用授权者,这里有一些潜在的用例: zappa可以配置为调用代码中的函数来执行授权,或者调用其他一些现有的lambda函数(它允许您在多个lambda之间共享授权器)。通过在 例如,要获取cognito标识,请将其添加到一个 现在可以在这样的烧瓶中使用: 您还可以通过添加: 您还可以使用api网关资源策略。IP白名单示例: 如果您想为部署阶段设置本地环境变量,只需在 然后,您可以在应用程序中使用: 如果您的项目需要知道您部署到的环境类型,您还可以随时获得 如果要使用本机aws lambda环境变量,可以使用 在开发过程中,您可以将zappa定义的变量添加到本地运行的应用程序中,例如,使用以下方法(对于django,为manage.py)。 在zappa之外(通过aws lambda控制台或cli)设置的任何环境变量在运行 注意:如果您依赖于这些变量以及环境变量,并且您拥有相同的键名,那么当它们被注入lambda处理程序时, 在aws为lambda引入本机环境变量(通过控制台和cli)之前,s3远程环境变量被添加到zappa中。在走这条路之前,请检查以上内容是否对您的用例更有意义。 如果要使用远程环境变量来配置应用程序(这对于敏感凭据之类的事情特别有用),可以创建一个文件并将其放置在zappa应用程序可以访问的s3存储桶中。为此,请将指向包含平面json对象的文件的zappa_设置的 例如,为了确保应用程序可以访问数据库凭据而不将其存储在版本控制中,您可以使用连接字符串将文件添加到s3,并使用 super-secret-config.json(上传到我的配置桶): zappa_settings.json: 现在您可以在应用程序中使用: 如果要将API网关上下文变量(http://docs.aws.amazon.com/api gateway/latest/developerguide/api-gateway-mapping-template-reference.html" rel="nofollow">http://docs.aws.amazon.com/apigateway/latest/developerguide/api gateway mapping template reference.html 例如,如果要将$context.identity.cognitoidentityid变量公开为http头cognitoidentityid,将$context.stage公开为apistage,则需要: 默认情况下,如果代码中发生未处理的异常,zappa只会将stacktrace打印到cloudwatch日志中。如果要使用外部报告工具记录这些异常,可以使用 zappa_settings.json: 函数必须接受三个参数:异常、事件和上下文: 你的_module.py 您的应用程序中可能仍然需要类似的异常处理程序,这只是一种捕获发生在zappa/wsgi层的异常的方法(通常是基于事件的调用、配置错误的设置、错误的lambda包和权限问题)。 默认情况下,如果抛出异常,aws lambda将尝试重试基于事件(非api网关,例如cloudwatch)的调用。但是,您可以通过返回true来防止这种情况,如上面的示例所示,因此zappa不会重新引发uncaught异常,从而防止aws lambda重试当前调用。 您可以通过定义
zappa为执行lambda而创建的默认iam策略是非常允许的。
它允许访问
cloudwatch、s3、kinesis、sns、sqs、dynamodb和route53类型的所有资源;lambda:invokefunction
对于所有lambda资源;放置到所有x射线资源;以及所有网络inter所有EC2的面部操作
资源.虽然这允许大多数lambda在没有额外权限的情况下正常工作,但是
通常情况下,对于大多数连续集成管道或
生产部署。相反,您可能需要手动管理IAM策略。 要手动定义lambda执行角色的策略,必须将manage_roles设置为false并定义
您的zappa设置文件中的角色名称或角色。 有关Zappa部署所需的最低策略要求的持续讨论,请参见这里的。
管理这些权利的一个更强大的解决方案可能很快就会实施。 要向默认的zappa执行策略添加权限,请使用 Zappa可以通过配置设置启用对您的功能的支持: 这将在lambda函数上启用它,并允许您使用x射线检测代码。
例如,使用烧瓶: 您可以使用捕获修饰符围绕函数创建子段,或在函数中开始子段("subsegment_name") 请注意,您可以在代码中创建子段,但如果您尝试创建一个段,则会引发异常,因为它是由lambda worker创建的。这也意味着,如果您使用Flask,则不得使用xRay中间件,文档建议您使用 单击查看来自serverlessconf london的幻灯片! 在初始化过程中,您可以选择"全局"部署您的应用程序。这将允许您同时将您的应用程序部署到所有可用的AWS区域,以便提供一致的全局速度、增加的冗余、数据隔离和法律补偿。朗斯您还可以选择仅部署到"主要"位置,即名称中带有 要了解有关这些功能的更多信息,请参见这些幻灯片来自serverlessconf london。 aws为您的函数设置了1000个并发执行的限制。如果您开始违反这些限制,您可能会看到一些错误,如 为了避免这种情况,您可以向Amazon提交a服务通知单,将您的限制提高到您可能需要的数万个并发执行。这是amazon的一个相当常见的做法,旨在防止您意外地创建非常昂贵的bug报告。因此,在提高服务限制之前,请确保您没有任何恶意脚本,这些脚本可能会意外地创建数万个您不想付费的并行执行。 如果Docker是您团队的CI、测试或部署的一部分,您可能需要查看关于使用Zappa和Docker的指南。 如果您想使用aws lambda的死信队列功能,只需添加键 您必须已经创建了相应的sns/sqs主题/队列,并且lambda函数执行角色必须已设置为具有对dlq资源的读取/发布/发送消息访问权限。 为了监视不同的部署,可以在应用程序包根目录的 zappa可用于处理由应用程序负载平衡器(alb)触发的事件。这在某些情况下可能有用: 与api网关一样,zappa可以自动为您提供alb资源。您需要将以下内容添加到您的"Zappa"设置中: apigateway_resource_policy.json: 你在用Zappa吗?让我们知道,我们会在这里列出你的网站! Zappa远远超出了Lambda和API网关的处理范围。因此,这里有相当多的黑客允许它工作。其中一些包括但不限于.. 这个项目还很年轻,所以还有很多工作要做。我们非常欢迎您的贡献! 请在提交修补程序之前提交讨论票。拉取请求应以 如果您正在添加大量新代码,请在您的PR中包括功能测试。对于AWS呼叫,我们使用 请将与您的更改相关的讨论的Github问题或拉取请求URL作为注释包含在代码中(示例)。这对项目的可维护性有很大帮助,因为它允许我们追溯用例并解释决策过程。同样,请确保您满足拉取请求模板中列出的所有要求 请随时处理任何未结的机票,特别是任何标有"需要帮助"标签的机票。如果您陷入困境或想进一步讨论某个问题,请加入我们的Slack频道,在这里您会发现一群聪明有趣的人在努力解决难题。 Zappa不打算遵从PEP8,隔离您的提交,以便用您的linter所做的更改更改更改功能。 要使用git头,您可能无法使用pip install-e。相反,您应该将repo克隆到您的计算机上,然后在本地项目中 如果您或您的公司使用zappa,请考虑尽可能支持项目的持续发展! 您可以通过访问我们的patreon页面成为赞助人。
Zappa目前由这些杰出的个人和公司提供支持: 非常非常感谢! miserlou@gmail.com,让我们一起工作!基本用法
初始部署
$ zappa deploy production
Deploying..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
deploy
时,zappa将自动将您的应用程序和本地虚拟环境打包到lambda兼容的存档中,用版本预编译替换任何依赖项。用于lambda的led,设置函数处理程序和必要的wsgi中间件,将存档上载到s3,创建和管理必要的amazon iam策略和角色,将其注册为新的lambda函数,创建新的api网关资源,为其创建wsgi兼容路由,将其链接到新的ambda函数,最后从s3存储桶中删除归档文件。方便!更新
$ zappa update production
Updating..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
回滚
$ zappa rollback production -n 3
日程安排
app_函数一起打包和部署,并从处理程序自动调用。
只要列出您的函数和表达式,就可以使用zappa廑settings.json文件中的cron或rate语法来安排它们。
筛选http请求,该请求将采用apache通用日志格式。{"production":{..."events":[{"function":"your_module.your_function",// The function to execute"expression":"rate(1 minute)"// When to execute it (in cron or rate format)}],...}}
0
$ pip install zappa
$ zappa init
$ zappa deploy
取消计划
命令即可:
1
$ pip install zappa
$ zappa init
$ zappa deploy
高级调度
exclude
设置并提供要从存档中排除的正则表达式模式列表。默认情况下,zappa将排除boto,因为它已经在lambda执行环境中可用了。
模板
package
,如果您只需要api gateway cloudformation模板,请使用template
命令:
8
$ pip install zappa
$ zappa init
$ zappa deploy
--json
直接获取json输出,并使用--output
指定输出文件。
状态
status
命令即可。
9
$ pip install zappa
$ zappa init
$ zappa deploy
尾随测井
tail
管理命令来查看部署的日志。
0
$ pip install zappa
print
ed到stdout
或stderr
的内容都将显示在日志中。
1
$ pip install zappa
2
$ pip install zappa
--no color
关闭它们。
--因为
来限制尾部的长度,它接受一个简单的持续时间字符串:
3
$ pip install zappa
--filter
筛选日志内容,如下所示:
4
$ pip install zappa
--disable keep open
:
5
$ pip install zappa
远程函数调用
invoke
命令随时直接执行应用程序中的任何函数。
6
$ pip install zappa
--raw
直接调用可解释的Python2.7或Python3.6字符串,如下所示:
7
$ pip install zappa
django管理命令
manage
命令调用远程django'manage.py'命令。例如,要执行基本django状态检查:
8
$ pip install zappa
9
$ pip install zappa
createsuperuser
,应该用使用zappa invoke<;env>;--raw的命令来替换
和SSL认证
0
$ zappa init
1
$ zappa init
使用AWS证书管理器部署到域
sub.your domain.tld
),或请求通配符域(*.yourdomain.tld
)。certificate arn
域设置中设置所需的域。
$zappa certificate
创建并关联使用该证书的api网关分发。部署到具有"让我们加密"证书的域(DNS身份验证)
部署到具有let's encrypt证书的域(http auth)
$zappa certificate
命令。使用您自己的ssl证书部署到域
域
设置-这将避免自定义域和api invoke url之间的基本路径映射出现问题,后者将获得附加在uri中的阶段名证书
、证书密钥
和证书链
设置中
$zappa certificate
上载您的证书并向您的api网关注册自定义域名。响应AWS事件执行
your_module.process_upload_函数
以响应my bucket
s3 bucket中的新对象。注意process_upload_function
必须接受事件
和上下文
参数。
2
$ zappa init
0
$ pip install zappa
$ zappa init
$ zappa deploy
process_upload_函数
如下所示:
4
$ zappa init
5
$ zappa init
6
$ zappa init
7
$ zappa init
8
$ zappa init
9
$ zappa init
{// The name of your stage"dev":{// The name of your S3 bucket"s3_bucket":"lambda",// The modular python path to your WSGI application function.// In Flask and Bottle, this is your 'app' object.// Flask (your_module.py):// app = Flask()// Bottle (your_module.py):// app = bottle.default_app()"app_function":"your_module.app"}}
0
{// The name of your stage"dev":{// The name of your S3 bucket"s3_bucket":"lambda",// The modular python path to your WSGI application function.// In Flask and Bottle, this is your 'app' object.// Flask (your_module.py):// app = Flask()// Bottle (your_module.py):// app = bottle.default_app()"app_function":"your_module.app"}}
1
异步任务执行
bake
函数,方法是使用类似于这样的zappa.asynchronous.task
decorator:{// The name of your stage"dev":{// The name of your S3 bucket"s3_bucket":"lambda",// The modular python path to your WSGI application function.// In Flask and Bottle, this is your 'app' object.// Flask (your_module.py):// app = Flask()// Bottle (your_module.py):// app = bottle.default_app()"app_function":"your_module.app"}}
2
make-pie
函数将在完全不同的lambda实例中执行。捕捉异常
{// The name of your stage"dev":{// The name of your S3 bucket"s3_bucket":"lambda",// The modular python path to your WSGI application function.// In Flask and Bottle, this is your 'app' object.// Flask (your_module.py):// app = Flask()// Bottle (your_module.py):// app = bottle.default_app()"app_function":"your_module.app"}}
3
{// The name of your stage"dev":{// The name of your S3 bucket"s3_bucket":"lambda",// The modular python path to your WSGI application function.// In Flask and Bottle, this is your 'app' object.// Flask (your_module.py):// app = Flask()// Bottle (your_module.py):// app = bottle.default_app()"app_function":"your_module.app"}}
4
任务源
task\u sns
decorator,如下所示:{// The name of your stage"dev":{// The name of your S3 bucket"s3_bucket":"lambda",// The modular python path to your WSGI application function.// In Flask and Bottle, this is your 'app' object.// Flask (your_module.py):// app = Flask()// Bottle (your_module.py):// app = bottle.default_app()"app_function":"your_module.app"}}
5
zappa_设置中设置以下设置:
:{// The name of your stage"dev":{// The name of your S3 bucket"s3_bucket":"lambda",// The modular python path to your WSGI application function.// In Flask and Bottle, this is your 'app' object.// Flask (your_module.py):// app = Flask()// Bottle (your_module.py):// app = bottle.default_app()"app_function":"your_module.app"}}
6
zappa schedule
命令时将使用的sns主题。直接调用
{// The name of your stage"dev":{// The name of your S3 bucket"s3_bucket":"lambda",// The modular python path to your WSGI application function.// In Flask and Bottle, this is your 'app' object.// Flask (your_module.py):// app = Flask()// Bottle (your_module.py):// app = bottle.default_app()"app_function":"your_module.app"}}
7
远程调用
remote_aws_lambda_function_name
和remote_aws_region
参数,以便应用程序知道哪个函数和
要使用的区域。例如,如果我们的批萨制作应用程序的某个部分必须使用ec2实例,但是
希望在自己的lambda实例上调用make_pie()函数,我们将按如下方式执行:{// The name of your stage"dev":{// The name of your S3 bucket"s3_bucket":"lambda",// The modular python path to your WSGI application function.// In Flask and Bottle, this is your 'app' object.// Flask (your_module.py):// app = Flask()// Bottle (your_module.py):// app = bottle.default_app()"app_function":"your_module.app"}}
8
remote_aws_lambda_function_name
和remote_aws_region
参数也可以用于zappa.asynchronous.run()函数。限制
args
和kwargs
必须是json可序列化的。在专有网络中运行任务
响应
zappa_settings
中配置一个async_response_表。这是dynamodb表名。然后,在用
@task
修饰时,传递capture\u response=true
响应id
。这是作为@task
decorator返回的lambdasyncResponse
(或snsasyncResponse
)对象的属性返回的。{// The name of your stage"dev":{// The name of your S3 bucket"s3_bucket":"lambda",// The modular python path to your WSGI application function.// In Flask and Bottle, this is your 'app' object.// Flask (your_module.py):// app = Flask()// Bottle (your_module.py):// app = bottle.default_app()"app_function":"your_module.app"}}
9
高级设置
{"dev":{// The name of your stage"s3_bucket":"lambda",// The name of your S3 bucket"django_settings":"your_project.settings"// The python path to your Django settings.}}
0
yaml设置
zappa廑settings.yml
,如下所示:{"dev":{// The name of your stage"s3_bucket":"lambda",// The name of your S3 bucket"django_settings":"your_project.settings"// The python path to your Django settings.}}
1
-s
参数提供自定义设置文件,例如:{"dev":{// The name of your stage"s3_bucket":"lambda",// The name of your S3 bucket"django_settings":"your_project.settings"// The python path to your Django settings.}}
2
zappa_settings.toml
文件:{"dev":{// The name of your stage"s3_bucket":"lambda",// The name of your S3 bucket"django_settings":"your_project.settings"// The python path to your Django settings.}}
3
高级用法
使服务器保持温暖
Keep_warm
设置禁用。提供静态文件/二进制上载
events
设置中定义的事件响应,从而将
大型项目
zappa_settings.json中设置
slim_handler:true
。在这种情况下,您的fat应用程序包将被替换为一个小的仅处理程序包。然后,处理程序文件在运行时从s3中取出大型项目的其余部分!大型项目的初始负载可能会增加启动开销,但是对于一个温暖的lambda函数,差异应该是最小的。注意,这也会占用应用程序函数的存储空间。请注意,aws当前将目录存储限制为512 MB,因此您的项目必须小于此值。启用bash完成
{"dev":{// The name of your stage"s3_bucket":"lambda",// The name of your S3 bucket"django_settings":"your_project.settings"// The python path to your Django settings.}}
4
register python argcomplete
由argcomplete python包提供。如果此软件包安装在virtualenv中
然后命令必须在那里运行。或者您可以执行:在API网关上启用安全端点
API键
api_key_required
设置为您的api网关的所有路由生成api密钥。过程如下:键值
)x-api-key
的头来访问受限制的端点(例如,使用curl:curl--header"x-api-key:key_value"
)。注意,如果没有x-api-key头,您将收到403。IAM策略
iam_authorization
设置设置为true
可以在api上启用基于iam的(v4签名)授权。然后,您的API将需要签名请求,并且可以通过IAM策略控制访问。未签名的请求将收到403响应,未经授权访问API的请求者也将收到403响应。启用此选项将覆盖授权程序配置(请参见下文)。API网关lambda授权程序
authorizer
设置块中指定arn
或函数名
值来控制行为。zappa廑settings.yaml
:{"dev":{// The name of your stage"s3_bucket":"lambda",// The name of your S3 bucket"django_settings":"your_project.settings"// The python path to your Django settings.}}
5
{"dev":{// The name of your stage"s3_bucket":"lambda",// The name of your S3 bucket"django_settings":"your_project.settings"// The python path to your Django settings.}}
6
Cognoto用户池授权程序
{"dev":{// The name of your stage"s3_bucket":"lambda",// The name of your S3 bucket"django_settings":"your_project.settings"// The python path to your Django settings.}}
7
API网关资源策略
{"dev":{// The name of your stage"s3_bucket":"lambda",// The name of your S3 bucket"django_settings":"your_project.settings"// The python path to your Django settings.}}
8
设置环境变量
局部环境变量
zappa嫒u settings.json中设置即可
{"dev":{// The name of your stage"s3_bucket":"lambda",// The name of your S3 bucket"django_settings":"your_project.settings"// The python path to your Django settings.}}
9
0
$ zappa deploy production
Deploying..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
servertype
(aws lambda)、framework
(zappa)、project
(您的项目名)和stage
(dev、production,等等)变量。远程AWS环境变量
aws_environment_variables
配置设置。这些功能非常有用,因为您可以在运行时通过aws lambda控制台或cli轻松更改它们。它们还可用于存储敏感凭据和利用环境变量的KMS加密。
1
$ zappa deploy production
Deploying..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
远程环境变量
update
时都将保持原样,除非它们也在aws\u environment\variables
中,在这种情况下,远程值将被设置文件中的值覆盖。如果您使用的是kms encrypted aws环境变量,您可以在aws\u kms\u key-arn
设置中设置kms key-arn。在这种情况下,请确保您设置的值已加密。环境变量中的键名将优先。
远程环境变量(通过s3文件)
remote_env
键添加到zappa_设置中,以便每当新lambda实例启动时,对象上的每个键值对都将设置为环境变量和值。remote_env
配置设置将其加载到lambda环境中。
2
$ zappa deploy production
Deploying..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
3
$ zappa deploy production
Deploying..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
4
$ zappa deploy production
Deploying..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
API网关上下文变量
zappa_settings.json中设置映射:
5
$ zappa deploy production
Deploying..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
6
$ zappa deploy production
Deploying..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
捕获未处理的异常
异常处理程序
配置选项。
7
$ zappa deploy production
Deploying..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
8
$ zappa deploy production
Deploying..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
使用自定义AWS IAM角色和策略
自定义aws iam角色和部署策略
配置文件名
设置,它将对应于AWS凭据文件中的配置文件。自定义AWS IAM角色和执行策略
9
$ zappa deploy production
Deploying..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
附加权限
设置:
0
$ zappa update production
Updating..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
AWS X射线
1
$ zappa update production
Updating..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
2
$ zappa update production
Updating..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
xray_recorder.end_subsegment()
。官方的python x-ray文档有更多关于如何在代码中使用它的信息。全球提供的无服务器体系结构
-1
的AWS区域。提高AWS服务限制
clienterror:调用puttargets时发生错误(limitexcedexception).."
或类似的错误。将Zappa与Docker一起使用
死信队列
死信arn
,值为zappa中相应sns主题或sqs队列的完整arnettings.json唯一的包ID
package_info.json
中为每个包提供唯一的uuid。您可以使用此信息或此文件的哈希值来跟踪不同部署之间的错误、监视部署状态以及诸如Sentry和New Relic等服务上的其他此类内容。包裹将包含:
3
$ zappa update production
Updating..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
应用程序负载平衡器事件源
4
$ zappa update production
Updating..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
5
$ zappa update production
Updating..
Your application is now live at: https://7k6anj0k99.execute-api.us-east-1.amazonaws.com/production
Zappa指南
媒体上的Zappa
使用Zappa的站点
相关项目
cookiecutter
支持zappa和s3上传的django项目。黑客
贡献
master为目标,如果合并,则应使zappa处于"可发货"状态。
安慰剂
库,您可以学习在其自述文件中使用。打开拉取请求后,测试套件将由travis ci运行。使用本地回购
pip install/path/to/zappa/repo
或ln-s/path/to/zappa/repo/zappa zappa
。顾客
汞
< BR>推荐PyPI第三方库