Aws lambda AWS Chalice:多个python文件中的路由

Aws lambda AWS Chalice:多个python文件中的路由,aws-lambda,chalice,Aws Lambda,Chalice,我要开始AWS Lambda,我爱上了Chalice。据我所知,它与Flask的想法相同,但使用的是“无服务器”的所有请求。我想用几个lambda脚本文件组成一个复杂的结构。我找不到这样的例子 ,它说从0.4版开始添加了我想要的东西。在本例中,它展示了如何提取“chalicelib”文件夹 按照这个逻辑,可以在“chalicelib”中创建几个文件夹,好像每个文件夹代表我的应用程序的一个模块,在文件夹中,每个文件都是一条带有一段源代码的路径 我想知道这是否一个可行的解决方案: app/ ├──

我要开始AWS Lambda,我爱上了Chalice。据我所知,它与Flask的想法相同,但使用的是“无服务器”的所有请求。我想用几个lambda脚本文件组成一个复杂的结构。我找不到这样的例子

,它说从0.4版开始添加了我想要的东西。在本例中,它展示了如何提取“chalicelib”文件夹

按照这个逻辑,可以在“chalicelib”中创建几个文件夹,好像每个文件夹代表我的应用程序的一个模块,在文件夹中,每个文件都是一条带有一段源代码的路径


我想知道这是否一个可行的解决方案:

app/
├── requirements.txt
├── app.py
└── chalicelib
    ├── __init__.py
    ├── users
    │   ├── __init__.py
    │   ├── route.py
    │   └── controller.py
    └── teams
        ├── __init__.py
        ├── parameters.py
        └── controller.py
app.py:

import chalicelib
from . import users, teams
from . import route
from app import app
from . import controller

@app.route("/users/test")
def test():
    return controller.test()
chalicelib>\uuuu init.py:

import chalicelib
from . import users, teams
from . import route
from app import app
from . import controller

@app.route("/users/test")
def test():
    return controller.test()
chalicelib>用户>\uuuu init\uuuu.py:

import chalicelib
from . import users, teams
from . import route
from app import app
from . import controller

@app.route("/users/test")
def test():
    return controller.test()
chalicelib>users>route.py:

import chalicelib
from . import users, teams
from . import route
from app import app
from . import controller

@app.route("/users/test")
def test():
    return controller.test()

您需要将变量导入每个init文件,直到到达所需的文件。 例如:

app/
|__ app.py
|__ config.py
|__ app
   |__ mod_cad
      |__ controllers.py
      |__ models.py
   |__ mod_home
      |__ controllers.py
   |__ static
      |__ ...
   |__ templates
      |__ ...
   |__ __init__.py
然后:

以及:


圣杯有一个特点叫做。这些设计在概念上类似于烧瓶中的蓝图。蓝图用于将应用程序组织成逻辑组件。使用蓝图,您可以在app.py之外的模块中定义资源和装饰器。然后在主app.py文件中注册蓝图。蓝图支持应用程序对象上可用的任何装饰器。使用蓝图,您可以在多个文件中定义路线。

在Chalice 1.12.0中,您需要在app.py中调用imports,如下所示:

from chalice import Chalice
from chalicelib.users.controller import createUser

app = Chalice(app_name='MyApp')

@app.route('/users', content_types=['application/json'], methods=['POST'], api_key_required=True, cors=True)
def userPost():
    data = app.current_request.json_body
    response = createUser(data)
    return response
在chalicelib/users/controller.py中的其他文件中:

def createUser(userData):
    ...{logic here}...
    return response

是的,您需要记住将路由导入app.py,它应该work@swigganicks你能查一下我的更新吗?这段代码运行成功,但我怀疑当到达一个6个模块,大约30条路由时,是否会混淆或重载lambda的成本计算。对于Chalice,这种结构似乎不正确。它不是一个“普通”服务器,它与lambda一起工作。这个答案是基于Flask而不是Chalice!您的文件结构有问题。blueprint是更好的逻辑调制解决方案Blueprints是chalice存储实验特性的地方。阅读文档,它会告诉你蓝图可以做到这一点,但它并没有得到广泛的支持。我已经和chalice的首席架构师谈过了,要导入其他文件,您需要添加文件夹“chalicelib”,该文件夹中的所有内容都会在项目编译时读取。该文件夹是放置其他文件的位置。