1. Web框架与阿里云函数计算
由于阿里云函数计算拥有HTTP函数的优势,传统的Web框架部署到阿里云函数计算是非常方便的。
对于Bottle和Flask这类的框架,从用户请求到框架本身,可以分为三个过程,分别是Web Server、Wsgi,以及开发者所实现的方法,如下所示。
WSGI Web框架原理简图
针对Bottle和Flask等框架,可以进行如下的操作,以Flask代码为例:
# index.py from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!'
函数计算的配置如图11-59所示。
图11-59 阿里云函数计算配置页面
也就是说,只需要把函数入口写成:文件名.Flask对象的变量名。
同理,当有一个Bottle项目时,也可以用类似的方法:
# index.py import bottle @bottle.route('/hello/<name>') def index(name): return "Hello world" app = bottle.default_app()
此时,函数入口只需要是:文件名.默认App的变量名,即index.app。
正是由于这种设计,该项目的管理系统(基于Flask的项目)的部署非常轻松。
2. 如何进行本地调试
Serverless架构有一个备受争议的问题:如何进行本地调试?
其实在这个项目开发过程中,我们的调试方案是比较简单直接的,虽然不一定适用于所有场景,但是在大部分场景中都值得一试。
对于Web框架的项目,调试方法就是直接把框架在本地启动,然后进行调试。例如在本项目中,同步接口直接通过Bottle的run方法来进行的调试,即在本地启动一个Web服务。
对于非Web框架,调试方法则是在本地构建一个方法,例如要调试对象存储触发器,调试方案是:
import json def handler(event, context): print(event) def test(): event = { "events": [ { "eventName": "ObjectCreated:PutObject", "eventSource": "acs:oss", "eventTime": "2017-04-21T12:46:37.000Z", "eventVersion": "1.0", "oss": { "bucket": { "arn": "acs:oss:cn-shanghai:123456789:bucketname", "name": "testbucket", "ownerIdentity": "123456789", "virtualBucket": "" }, "object": { "deltaSize": 122539, "eTag": "688A7BF4F233DC9C88A80BF985AB7329", "key": "image/a.jpg", "size": 122539 }, "ossSchemaVersion": "1.0", "ruleId": "9adac8e253828f4f7c0466d941fa3db81161****" }, "region": "cn-shanghai", "requestParameters": { "sourceIPAddress": "140.205.***.***" }, "responseElements": { "requestId": "58F9FF2D3DF792092E12044C" }, "userIdentity": { "principalId": "123456789" } } ] } handler(json.dumps(event), None) if __name__ == "__main__": print(test())
这样,我们在实现handler方法的时候,通过不断地运行该文件来进行调试,也可以根据自身的需求对Event等内容进行定制化的调整。
标签:Serverless,积累,经验,框架,Web,Flask,app,__,调试 From: https://www.cnblogs.com/muzinan110/p/17067625.html