宣布用Express.js和Flask解决Monolambdas的故障问题

107 阅读7分钟

无服务器API的故障排除

虽然人们可能会觉得Express.js或Flask是更 "单一 "的无服务器方法,但它实际上是许多不同应用程序的一种非常常见的模式。我们很高兴地宣布,你现在可以在部署Express.js和Flask微服务时使用与传统无服务器框架微服务相同的自动监控和调试功能。

虽然ServerlessFramework Pro以前有开箱即用的自动监控和故障排除工具,但我们缺乏对单λ微服务的支持。使用Express.js、Flask、Lambda API或其他开发框架的开发者无法利用我们提供的许多工具来帮助审查函数调用,按API端点对调用进行排序等。这种情况今天有所改变。

Serverless博客和我们的仪表盘文档中,有很多关于你如何利用Framework Pro的信息,如果你还没有机会使用它。但现在,让我们来看看你现在可以通过monolambda应用程序获得的一些功能。

monolambdas的新功能是什么?

因为monolambda应用会向同一个Amazon CloudWatch日志流输出很多信息,所以调试monolambda应用在历史上是一个巨大的麻烦。为了找到你要找的单个API请求,你必须从其他API请求的数百个不相关的日志中挖掘,以找到你要调试的调用和API端点。有了我们的自动monolambda监控和故障排除工具,这不再是一个问题。

你可以查看你的monolambda应用程序中所有端点的API请求。

Errors Overview

这个起点让你对你的API端点的成功和失败的请求有一个一目了然的了解。如果你想更深入地了解特定的端点,你可以按有关的API路线进行排序。

Endpoint Overview

这方面最棒的是什么?对于Express.js、Flask和Lambda API,所有这些API路由都会自动为你排序。你不需要自己对一个个端点进行检测。对于这个列表之外的框架,如果想获得同样的体验,你可以利用Serverless SDK的setEndpoint功能来获得类似的体验。

当你找到你要找的调用时,你会得到你习惯于从Framework Pro explorer监控中看到的相同信息。

Endpoint Overview

配置你现有的无服务器Monolambda

先决条件

那么,你如何开始使用这些新功能呢?首先,你的框架版本更新到最新版本。如果你用NPM安装它,你可以使用npm update -g serverless 。你需要v1.67.0或更高版本的框架和v3.6.1或更高版本的框架专业插件。

接下来,为了添加自动故障排除,你需要已经创建了一个Framework Pro账户,并在你的serverless.yml 文件中添加orgapp 的值。你可能需要为你的服务创建一个新的app

现有的Express.js和Flask应用程序

如果你已经创建了自己的Express.js或Flask应用,并在之前使用无服务器框架进行了部署,那么你现在需要做的就是再次运行serverless deploy ,并测试你的一些端点。

在该服务的Framework Pro Dashboard中,你应该看到你在monolambda中测试的每个路由的所有日志和故障排除能力。请记住,路由只有在你对它们运行请求后才会开始出现。

两行配置的改变和对你的应用程序代码的零改变应该触发一个新的部署,自动的Monolambda故障排除和监控仪器。

创建一个简单的monolambda应用程序

如果你是第一次用无服务器框架部署monolambda应用,你可以在部署和测试新功能之前,按照下面的步骤来做一个Express.js或Flask应用。

Express.js

假设你已经在全球范围内安装了最新版本的无服务器框架,你可以通过安装一些依赖项来启动你的新Express.js项目。

npm install serverless-http --save
npm install express --save

然后,你可以创建一个index.js 文件,其中包含你的Express.js应用代码。

// index.js
const serverless = require('serverless-http')
const express = require('express')
const app = express()

app.get('/hello/:name', function (req, res) {
  const name = req.params.name
  res.send(`Hello ${name}!`)
})

module.exports.handler = serverless(app)

接下来,你会有一个serverless.yml 文件。

org: myorg
app: helloapp
service: express-api

provider:
  name: aws
  runtime: nodejs12.x

functions:
  app:
    handler: index.handler
    events:
      - http: ANY /
      - http: 'ANY {proxy+}'

这将为app 函数设置一个Amazon API Gateway代理端点,这将允许任何自定义路由由你的Express.js应用程序处理。你可以通过创建一个单一的函数app ,其处理程序为index.handler ,指向我们刚刚在index.js 文件中创建的handler 函数。

你还需要确保orgapp 的值包含在文件中,并引用你的Framework Pro账户。

从那里,只要运行serverless deploy ,你应该得到一个新的端点来进行测试。

New Endpoint

从那里,只要在你的浏览器中加载端点并测试hello/name

New Endpoint

在你测试完端点后,你应该看到它出现在Framework ProDashboard的该服务的资源管理器下。

New Endpoint

在那里,你可以添加新的路由,对它们进行测试,并对你的应用程序的其余部分进行监控和故障排除

Flask

让我们用一个简单的Flask应用程序尝试同样的事情。首先,我假设你已经安装了Python 3,以及之前更新的无服务器框架版本和Node/NPM。

首先,运行echo Flask > requirements.txt ,创建一个requirements.txt 文件,在部署到AWS时,你可以用它来安装Flask和其他依赖项。

然后,创建一个app.py 文件,其中包含你的Flask路由。

# app.py

from flask import Flask
app = Flask(__name__)

@app.route('/hello/<name>')
def hello(name):
    return 'Hello ' + name + '!'

接下来,创建一个serverless.yml 文件,你可以用它来部署该应用程序。它将有一个使用wsgi_handler.handler 配置的单一函数作为处理程序,因为我们将使用serverless-wsgi 插件来部署我们的Flask应用程序。它还将需要我们先前配置的相同的HTTP事件。

org: myorg
app: helloapp
service: flask-api

provider:
  name: aws
  runtime: python3.7

functions:
  app:
    handler: wsgi_handler.handler
    events:
      - http: ANY /
      - http: 'ANY {proxy+}'

custom:
  wsgi:
    app: app.app
    pythonBin: python3 # Some systems with Python3 may require this
    packRequirements: false
  pythonRequirements:
    dockerizePip: non-linux

plugins:
  - serverless-wsgi
  - serverless-python-requirements

如果你与Express.js应用程序相比,你还会注意到我们有一个额外的customplugins 部分。这些是为了让我们能够配置我们需要的插件,用serverless-python-requirements 来部署Python依赖,用serverless-wsgi 来部署Python monolambda 应用程序。

确保用你自己的Framework Pro配置更新apporg 的名称。

从这里开始,我们需要用安装这些插件。

npm install serverless-wsgi --save 
npm install serverless-python-requirements --save

在我们安装了这些插件之后,我们可以用serverless deploy !来部署我们的应用程序。你可能还需要安装Docker,以便使用serverless-python-requirements

在你的服务部署完毕后,你应该看到一个新的端点可以使用。

New Endpoint Flask

然后,你可以在你的浏览器中测试这个端点,看看hello/name 路线是如何工作的。

New Endpoint Flask Test

然后,你会看到新的端点出现在Framework Pro仪表板上,并带有你使用的路由。

Explorer Flask

现在,你可以添加新的Flask路由,对它们进行测试,并继续监控和排除你的应用程序的故障

下一步是什么?

如果你刚刚开始使用Flask或Express.js,或者你不确定如何让它与AWS Lambda上的无服务器框架一起工作,你可以看看这些关于用它们创建自己的应用程序的指南。

如果你想看一个更全面的应用实例,你可以看一个 "调查服务 "的例子,它包含了一些实体,如客户、调查和对调查的回应。然后,它将这些实体,存储在DynamoDB中,并使它们可以通过不同的API路线访问。我同时用Express.js和Node.js以及Python3和Flask创建了这个服务。