本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
分析部署到无服务器环境的 Web 框架
AWS X-Ray SDK for Python 支持对部署在无服务器应用程序中的 Web 框架进行分析。无服务器计算是云原生架构,使您能够将更多的运营职责转移到 AWS,从而提高灵活性和创新能力。
无服务器架构是一种软件应用程序模型,使您无需考虑服务器即可构建和运行应用程序和服务。它消除了基础设施管理任务,例如服务器或集群配置、修补、操作系统维护和容量预置。您能够为几乎任何类型的应用程序或后端服务构建无服务器应用程序,并且您无需处理运行和扩展具有高可用性的应用程序所需的所有操作。
本教程展示如何自动分析部署到无服务器环境的 Web 框架(例如 Flask 或 Django)上的 AWS X-Ray。通过 X-Ray 应用程序分析,您可以查看通过您的 AWS Lambda 函数发出的所有下游调用,从 Amazon API Gateway 开始,以及应用程序发出的传出调用。
X-Ray SDK for Python 支持以下 Python 应用程序框架:
-
Flask 0.8 版或更高版本
-
Django 1.0 版或更高版本
本教程开发部署到 Lambda 并由 API 网关 调用的示例无服务器应用程序。本教程使用 Zappa 自动将应用程序部署到 Lambda 并配置 API 网关 终端节点。
先决条件
步骤 1:创建环境
在此步骤中,您将创建一个使用 virtualenv
托管应用程序的虚拟环境。
-
使用 AWS CLI,为应用程序创建目录。然后,转到新目录。
mkdir
serverless_application
cdserverless_application
-
接下来,在新目录中创建虚拟环境。使用以下命令激活它。
# Create our virtual environment virtualenv
serverless_env
# Activate it sourceserverless_env
/bin/activate -
将 X-Ray、Flask、Zappa 和 Requests 库安装到您的环境中。
# Install X-Ray, Flask, Zappa, and Requests into your environment pip install aws-xray-sdk flask zappa requests
-
将应用程序代码添加到
serverless_application
目录中。对于此示例,我们可以基于 Hello World示例构建。 在
serverless_application
目录中创建名为my_app.py
的文件。然后,使用文本编辑器来添加以下命令。此应用程序将分析 Requests 库,修补 Flask 应用程序的中间件,并打开终端节点'/'
。# Import the X-Ray modules from aws_xray_sdk.ext.flask.middleware import XRayMiddleware from aws_xray_sdk.core import patcher, xray_recorder from flask import Flask import requests # Patch the requests module to enable automatic instrumentation patcher.patch(('requests',)) app = Flask(__name__) # Configure the X-Ray recorder to generate segments with our service name xray_recorder.configure(service='
My First Serverless App
') # Instrument the Flask application XRayMiddleware(app, xray_recorder) @app.route('/') def hello_world(): resp = requests.get("https://aws.amazon.com") return 'Hello, World: %s' % resp.url
步骤 2:创建并部署一个 Zappa 环境
在此步骤中,您将使用 Zappa 自动配置 API 网关 终端节点,然后部署到 Lambda。
-
从
serverless_application
目录中初始化 Zappa。对于此示例,我们使用了默认设置,但如果您有自定义首选项,Zappa 会显示配置说明。zappa init
What do you want to call this environment (default 'dev'):
dev
... What do you want to call your bucket? (default 'zappa-*******'):zappa-*******
... ... It looks like this is a Flask application. What's the modular path to your app's function? This will likely be something like 'your_module.app'. We discovered: my_app.app Where is your app's function? (default 'my_app.app'):my_app.app
... Would you like to deploy this application globally? (default 'n') [y/n/(p)rimary]:n
-
启用 X-Ray。打开
zappa_settings.json
文件并确认它看上去类似以下示例。{ "dev": { "app_function": "my_app.app", "aws_region": "us-west-2", "profile_name": "default", "project_name": "serverless-exam", "runtime": "python2.7", "s3_bucket": "zappa-*********" } }
-
将
"xray_tracing": true
作为条目添加到配置文件中。{ "dev": { "app_function": "my_app.app", "aws_region": "us-west-2", "profile_name": "default", "project_name": "serverless-exam", "runtime": "python2.7", "s3_bucket": "zappa-*********",
"xray_tracing": true
} } -
部署应用程序。这会自动配置 API 网关 终端节点并将您的代码上传到 Lambda。
zappa deploy
... Deploying API Gateway.. Deployment complete!: https://**********.execute-api.us-west-2.amazonaws.com/
dev
步骤 3:对 API 网关 启用 X-Ray 跟踪
在此步骤中,您将与 API 网关 控制台进行交互以启用 X-Ray 跟踪。
-
登录 AWS 管理控制台并通过 https://console.amazonaws.cn/apigateway/
打开 API 网关 控制台。 -
查找您新生成的 API。它应该类似于
serverless-exam-dev
。 -
选择 Stages (阶段)。
-
选择您的部署阶段的名称。默认为
dev
。 -
在 Logs/Tracing (日志/跟踪) 选项卡上,选中 Enable X-Ray Tracing (启用 X-Ray 跟踪) 框。
-
选择 Save Changes (保存更改)。
-
在您的浏览器中访问终端节点。如果您使用了示例
Hello World
应用程序,它应显示以下内容。"Hello, World: https://aws.amazon.com/"
步骤 4:查看创建的跟踪
在此步骤中,您将与 X-Ray 控制台交互,以查看示例应用程序所创建的跟踪。有关跟踪分析的更详细演练,请参阅查看服务映射。
-
登录 AWS 管理控制台并通过以下网址打开 X-Ray 控制台:https://console.amazonaws.cn/xray/home
。 -
查看 API 网关 生成的分段、Lambda 函数和 Lambda 容器。
-
在 Lambda 函数分段下,查看名为
My First Serverless App
的子分段。它后跟另一个名为https://aws.amazon.com
的子分段。 -
在初始化期间,Lambda 可能还会生成名为
initialization
的第三个子分段。


第 5 步:清除
始终终止不再使用的资源,以避免意外的成本累积。正如本教程所示,Zappa 等工具简化了无服务器重新部署。
要从 Lambda、API 网关 和 Amazon S3 中删除应用程序,请通过使用 AWS CLI 从项目目录中运行以下命令。
zappa undeploy
dev
后续步骤
通过添加 AWS 客户端并使用 X-Ray 对其进行分析,为您的应用程序添加更多功能。在无服务器架构