

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 檢測部署在無伺服器環境中的 Web 框架
<a name="xray-sdk-python-serverless"></a>

**注意**  
X-Ray 開發套件/協助程式維護通知 – 在 2026 年 2 月 25 日， AWS X-Ray SDKs/協助程式將進入維護模式，其中 AWS 將限制 X-Ray 開發套件和協助程式版本，以僅解決安全問題。如需支援時間表的詳細資訊，請參閱 [X-Ray SDK 和協助程式支援時間表](xray-sdk-daemon-timeline.md)。建議您遷移至 OpenTelemetry。如需遷移至 OpenTelemetry 的詳細資訊，請參閱[從 X-Ray 檢測遷移至 OpenTelemetry 檢測](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html)。

適用於 Python 的 AWS X-Ray 開發套件支援檢測部署在無伺服器應用程式中的 Web 架構。無伺服器解決方案是雲端原生架構，能讓您將更多的操作責任轉移到 AWS，提高您的敏捷度和創新能力。

無伺服器架構是一種軟體應用程式模型，可讓您建置和執行應用程式和服務，而完全不用考慮伺服器。這種做法可免除基礎設施管理工作，例如伺服器或叢集佈建、修補、作業系統維護和容量佈建。您可以為幾乎任何應用程式類型或後端服務建立無伺服器解決方案，並為您包辦執行和擴展高可用性應用程式所需的一切工作。

本教學課程說明如何自動 AWS X-Ray 檢測部署到無伺服器環境的 Web 架構，例如 Flask 或 Django。應用程式的 X-Ray 檢測可讓您檢視從 Amazon API Gateway 透過 AWS 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.aws.amazon.com/xray/latest/devguide/xray-sdk-python.html) – 2.7 或 3.6 版。
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) – 確認您的 AWS CLI 已使用 AWS 區域 您要部署應用程式的 帳戶設定。
+ [Pip](https://pypi.org/project/pip/)
+ [Virtualenv](https://virtualenv.pypa.io/en/latest/)

## 步驟 1：建立環境
<a name="xray-sdk-python-serverless-environment"></a>

在此步驟中，您將建立使用 `virtualenv` 來主控應用程式的虛擬環境。

1. 使用 AWS 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` 目錄。在這個範例中，我們可以建置出 Flasks 的 [Hello World](https://flask.palletsprojects.com/en/3.0.x/quickstart/) 範例。

   在 `serverless_application` 目錄中，建立名為 `my_app.py` 的檔案。然後，使用文字編輯器來新增下列命令。這個應用程式會檢測請求程式庫、修補 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. 登入 AWS 管理主控台 並開啟 API Gateway 主控台，網址為 https：//[https://console.aws.amazon.com/apigateway/](https://console.aws.amazon.com/apigateway/)。

1. 尋找新產生的 API。該項目看起來應該會類似 `serverless-exam-dev`。

1. 選擇 **Stages** (階段)。

1. 選擇您的部署階段名稱。預設值為 `dev`。

1. 在 **Logs/Tracing (日誌/追蹤)** 標籤中，選取 **Enable X-Ray Tracing (啟用 X-Ray 追蹤)** 方塊。

1. 選擇 **Save Changes** (儲存變更)。

1. 在您的瀏覽器中存取端點。如果您使用的是 `Hello World` 應用程式範例，這時應該顯示如下。

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

## 步驟 4：檢視已建立的追蹤
<a name="xray-sdk-python-serverless-trace"></a>

在此步驟中，您將與 X-Ray 主控台互動，以檢視範例應用程式建立的追蹤。如需追蹤分析的詳細演練，請參閱[檢視服務映射](https://docs.aws.amazon.com/xray/latest/devguide/xray-console.html#xray-console-servicemap)。

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/xray/home](https://console.aws.amazon.com/xray/home) 的 X-Ray 主控台。

1. 檢視 API Gateway、Lambda 函數和 Lambda 容器所產生的區段。

1. 在 Lambda 函數區段下，檢視名為 的子區段`My First Serverless App`。它的後面是一個名為 `https://aws.amazon.com` 的第二個子區段。

1. 在初始化期間，Lambda 也可能產生名為 的第三個子區段`initialization`。

![追蹤區段檢視。](http://docs.aws.amazon.com/zh_tw/xray/latest/devguide/images/serverless-traceView.png)


![服務圖表檢視。](http://docs.aws.amazon.com/zh_tw/xray/latest/devguide/images/serverless-serviceView.png)


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

務必終止您不再使用的資源，避免累積超出預期的費用。在此教學示範中，像是 Zappa 等工具會簡化無伺服器解決方案的重新部署。

若要從 Lambda、API Gateway 和 Amazon S3 中移除您的應用程式，請使用 在專案目錄中執行下列命令 AWS CLI。

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

## 後續步驟
<a name="xray-sdk-python-serverless-next"></a>

透過新增 AWS 用戶端並使用 X-Ray 檢測，將更多功能新增至您的應用程式。進一步了解 Serverless [on 的無 AWS](https://aws.amazon.com/serverless)伺服器運算選項。