而对于使用 Serverless 架构的应用,我们只需要关心我们的应用编写和核心业务,无需操心云主机、操作系统、资源分配和 Web 服务器配置等相关问题,无需考虑服务器的规格大小、存储类型、网络带宽、自动扩缩容问题,无需再对服务器进行运维、不断打系统补丁和应用补丁、无需进行数据备份等工作。一切非核心业务都外包给了公共云营运商,让开发人员从复杂的部署和运维环境中脱身出来,专注于业务本身的价值。
用 Zappa 里的一句话说就是 “without any permanent infrastructure”(无需任何永久性基础设施)。
这将创建一个新的 archive,将其上传到 S3 并更新 Lambda function 以使用新代码。
查看部署和事件计划的状态,只需使用命令:
$ zappa status production
查看部署的日志:
$ zappa tail dev
# 过滤 HTTP 请求 $ zappa tail dev --http
# 执行相反操作,并且仅显示非 HTTP 事件和日志消息 $ zappa tail dev --non-http
# 选择时长 $ zappa tail dev --since 4h # 4 hours
回滚操作:通过提供要返回的修订版本数将部署的代码回滚到以前的版本。
# 回滚到3年前部署的版本 $ zappa rollback production -n 3
安排 function 定期执行:修改 zappa_setting.json ,加入如下内容:
{ "dev": { ... "events": [{ // The function to execute "function": "your_module.your_function", // When to execute it (in cron or rate format) "expression": "rate(1 minute)" }], ... } }
然后执行如下操作,我们的 function 就会在每分钟执行一次。
$ zappa schedule dev
# cancal $ zappa unschedule dev
取消部署:如果要删除以前发布的 API Gateway 和 Lambda function,则只需:
“Unable to import module ‘handler’: attempted relative import with no known parent package”:原因是我们期望的依赖在虚拟的环境中没有,需要查看自己虚拟环境中的依赖是否完整。
出现如下报错,可以更换一个 region 信息。
$ zappa deploy dev Calling deploy for stage dev.. Creating demo-dev-ZappaLambdaExecutionRole IAM Role.. Error: Failed to manage IAM roles! You may lack the necessary AWS permissions to automatically manage a Zappa execution role. Exception reported by AWS:An error occurred (InvalidClientTokenId) when calling the CreateRole operation: The security token included in the request is invalid. To fix this, see here: https://github.com/Miserlou/Zappa#custom-aws-iam-roles-and-policies-for-deployment
如果我们在 zappa init 的时候,不使用默认分配的 s3_bucket ,则须注意自己的名称是不允许重名的,否则会报错 botocore.errorfactory.BucketAlreadyExists: An error occurred (BucketAlreadyExists) when calling the CreateBucket operation: The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again. 。