

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 检测部署到无服务器环境的 Web 框架
<a name="xray-sdk-python-serverless"></a>

**注意**  
X-Ray SDK/Daemon 维护通知 — 2026 年 2 月 25 日， Amazon X-Ray SDKs/Daemon 将进入维护模式，在该模式下，X-Ray SDK 和 Daemon 的发布 Amazon 将仅限于解决安全问题。有关支持时间表的更多信息，请参阅 [X-Ray SDK 和 Daemon Support 时间表](xray-sdk-daemon-timeline.md)。我们建议迁移到 OpenTelemetry。有关迁移到的更多信息 OpenTelemetry，请参阅[从 X-Ray 仪器迁移到 OpenTelemetry 仪器](https://docs.amazonaws.cn/xray/latest/devguide/xray-sdk-migration.html)。

适用于 Python 的 Amazon X-Ray SDK 支持对部署在无服务器应用程序中的网络框架进行检测。无服务器是云端原生架构，可让您将更多的运营职责切换到 Amazon，帮助您提升灵活性和创新。

无服务器架构是一种软件应用程序模式，让您无需考虑服务器的问题即可构建和运行应用程序和服务。为您省去基础设施管理任务，例如，服务器或集群预配、修补、操作系统维护，以及容量预配。几乎可以为任何类型的应用程序或后端服务构建无服务器解决方案，即可为您处理好运行和缩放高可用性应用程序所需要的一切。

本教程向您展示了如何在部署到无服务器 Amazon X-Ray 环境的 Web 框架（例如 Flask 或 Django）上自动进行检测。应用程序的 X-Ray 检测允许您查看所有下游调用，从 Amazon API Gateway 到您的 Amazon Lambda 函数，以及您的应用程序发出的传出调用。

适用于 Python 的 X-Ray 开发工具包支持以下 Python 应用程序框架：
+ FLASK 版本 0.8 或更高版本
+ Django 版本 1.0 或更高版本

本教程开发了一款示例无服务器应用程序部署到 Lambda，由 API Gateway 调用。本教程使用 Zappa 自动将应用程序部署到 Lambda 并配置 API Gateway 端点。

## 先决条件
<a name="xray-sdk-python-serverless-prereqs"></a>
+ [Zappa](https://github.com/Miserlou/Zappa)
+ [Python](https://docs.amazonaws.cn/xray/latest/devguide/xray-sdk-python.html) - 版本 2.7 或 3.6。
+ [Amazon CLI](https://docs.amazonaws.cn/cli/latest/userguide/cli-chap-configure.html)— 验证您的账户 Amazon CLI 是否配置 Amazon Web Services 区域 了以及您将在其中部署应用程序。
+ [Pip](https://pypi.org/project/pip/)
+ [Virtualenv](https://virtualenv.pypa.io/en/latest/)

## 步骤 1：创建 环境
<a name="xray-sdk-python-serverless-environment"></a>

在此步骤中，您将创建一个使用 `virtualenv` 托管应用程序的虚拟环境。

1. 使用 Amazon CLI，为应用程序创建目录。然后切换到新目录。

   ```
   mkdir {{serverless_application}}
   cd {{serverless_application}}
   ```

1. 接下来，在新目录中创建一个虚拟环境。请使用以下命令激活虚拟环境。

   ```
   # Create our virtual environment
   virtualenv {{serverless_env}}
   
   # Activate it
   source {{serverless_env}}/bin/activate
   ```

1. 将 X-Ray、Flask、Zappa 和请求库安装到您的环境中。

   ```
   # Install X-Ray, Flask, Zappa, and Requests into your environment
   pip install aws-xray-sdk flask zappa requests
   ```

1. 将应用程序代码添加到 `serverless_application` 目录中。在这个例子中，我们可以构建 Flash 的 [Hello World](https://flask.palletsprojects.com/en/3.0.x/quickstart/) 示例。

   在 `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 环境
<a name="xray-sdk-python-serverless-zappa"></a>

在此步骤中，您将使用 Zappa 自动配置 API Gateway 端点，然后部署到 Lambda。

1. 在 `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}}
   ```

1. 启用 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-*********"
       }
   }
   ```

1. 将 `"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
       }
   }
   ```

1. 部署 应用程序。这会自动配置 API Gateway 端点并将您的代码上传到 Lambda。

   ```
   zappa deploy
   ```

   ```
   ...
   Deploying API Gateway..
   Deployment complete!: https://**********.execute-api.us-west-2.amazonaws.com/{{dev}}
   ```

## 步骤 3：为 API Gateway 启用 X-Ray 跟踪
<a name="xray-sdk-python-serverless-xray"></a>

在此步骤中，您将与 API Gateway 控制台进行交互以启用 X-Ray 跟踪。

1. 登录 Amazon Web Services 管理控制台 并打开 API Gateway 控制台，网址为[https://console.aws.amazon.com/apigateway/](https://console.amazonaws.cn/apigateway/)。

1. 找到新生成的 API。它应该类似于 `serverless-exam-dev`。

1. 选择**阶段**。

1. 选择部署阶段的名称。默认值为 `dev`。

1. 在**日志/跟踪**选项卡上，选中**启用 X-Ray 跟踪**复选框。

1. 选择**保存更改**。

1. 在浏览器中访问端点。如果您使用了示例 `Hello World` 应用程序，它应显示以下内容。

   ```
   "Hello, World: https://aws.amazon.com/"
   ```

## 步骤 4：查看创建的跟踪
<a name="xray-sdk-python-serverless-trace"></a>

在此步骤中，您将与 X-Ray 控制台交互，以查看示例应用程序所创建的跟踪。有关跟踪分析的更详细演练，请参阅[查看服务映射](https://docs.amazonaws.cn/xray/latest/devguide/xray-console.html#xray-console-servicemap)。

1. 登录 Amazon Web Services 管理控制台 并在[https://console.aws.amazon.com/xray/家](https://console.amazonaws.cn/xray/home)中打开 X-Ray 控制台。

1. 查看 API Gateway、Lambda 函数和 Lambda 容器生成的分段。

1. 在 Lambda 函数分段下，查看名为 `My First Serverless App` 的子分段。紧随其后的是名为 `https://aws.amazon.com` 的第二个子段。

1. 在初始化期间，Lambda 可能还会生成名为 `initialization` 的第三个子分段。

![跟踪分段视图。](http://docs.amazonaws.cn/xray/latest/devguide/images/serverless-traceView.png)


![服务图视图。](http://docs.amazonaws.cn/xray/latest/devguide/images/serverless-serviceView.png)


## 第 5 步：清理
<a name="xray-sdk-python-serverless-cleanup"></a>

始终终止不再使用的资源，以避免意外的成本累积。正如本教程所演示的那样，Zappa 此类工具可以简化无服务器部署。

要从 Lambda、API Gateway 和 Amazon S3中删除应用程序，请通过使用 Amazon CLI从项目目录中运行以下命令。

```
zappa undeploy {{dev}}
```

## 后续步骤
<a name="xray-sdk-python-serverless-next"></a>

通过添加 Amazon 客户端并使用 X-Ray 对其进行检测，为您的应用程序添加更多功能。若要详细了解无服务器计算选项，请前往 [Amazon上的无服务器](https://www.amazonaws.cn/serverless)。