

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# サーバーレス環境にデプロイされたウェブフレームワークの計測
<a name="xray-sdk-python-serverless"></a>

**注記**  
X-Ray SDK/デーモンメンテナンス通知 – 2026 年 2 月 25 日、 AWS X-Ray SDKsデーモンはメンテナンスモードに移行します。 AWS では、X-Ray SDK とデーモンのリリースがセキュリティの問題にのみ対処するように制限されます。サポートタイムラインの詳細については、「[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)」を参照してください。

 AWS X-Ray SDK for Python は、サーバーレスアプリケーションにデプロイされたウェブフレームワークの計測をサポートしています。サーバーレスはクラウドのネイティブアーキテクチャで、運用上の多くの責任を AWSにシフトさせることができるため、俊敏性とイノベーションを強化できます。

サーバーレスアーキテクチャは、サーバーを意識せずにアプリケーションやサービスを構築および実行できるソフトウェアアプリケーションモデルです。サーバーまたはクラスターのプロビジョニング、パッチ適用、オペレーティングシステムのメンテナンス、キャパシティのプロビジョニングといったインフラストラクチャ管理のタスクが不要になります。サーバーレスアプリケーションは、ほぼすべてのタイプのアプリケーションやバックエンドサービス向けに構築でき、高可用性を実現しながら、アプリケーションの実行やスケーリングに必要な作業のすべてをユーザーに代わって行います。

このチュートリアルでは、サーバーレス環境にデプロイされた 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 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 マネジメントコンソール し、[https://console.aws.amazon.com/apigateway/](https://console.aws.amazon.com/apigateway/) で API Gateway コンソールを開きます。

1. 新しく生成された API を探します。`serverless-exam-dev` のようになります。

1. **[Stages]** (ステージ) を選択します。

1. API のデプロイステージの名前を選択します。デフォルトは `dev` です。

1. [**Logs/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://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` という名前の 2 番目のサグメントが続きます。

1. Lambda では、初期化中に `initialization` という名前の 3 番目のサブセグメントが生成されることがあります。

![トレースセグメントビュー](https://docs.aws.amazon.com/ja_jp/xray/latest/devguide/images/serverless-traceView.png)


![サービスグラフビュー](https://docs.aws.amazon.com/ja_jp/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 で計測することで、アプリケーションに機能を追加します。サーバーレスコンピューティングのオプションについては、[AWSのサーバーレス](https://aws.amazon.com/serverless)を参照してください。