サーバーレス環境にデプロイされたウェブフレームワークの計測 - AWS X-Ray

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

サーバーレス環境にデプロイされたウェブフレームワークの計測

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

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

このチュートリアルでは、サーバーレス環境にデプロイされている Flask や Django などのウェブフレームワーク AWS X-Ray で を自動的に計測する方法を示します。アプリケーションの X-Ray インストルメンテーションを使用すると、Amazon API Gateway から関数を介して行われたすべてのダウンストリーム呼び出しと AWS Lambda 、アプリケーションが行う送信呼び出しを表示できます。

X-Ray SDK for Python では、次の Python アプリケーションフレームワークをサポートしています。

  • Flask バージョン 0.8 以降

  • Django バージョン 1.0 以降

このチュートリアルでは、Lambda にデプロイされ、API Gateway から呼び出されるサーバーレスアプリケーションのサンプルを作成します。このチュートリアルでは、Zappa を使用して、アプリケーションを Lambda に自動的にデプロイし、API Gateway のエンドポイントを設定します。

前提条件

  • Zappa

  • Python – バージョン 2.7 または 3.6。

  • AWS CLI – AWS CLI が、アプリケーションをデプロイする アカウントと AWS リージョン で設定されていることを確認します。

  • Pip

  • Virtualenv

ステップ 1: 環境を作成する

このステップでは、virtualenv を使用して仮想環境を作成し、アプリケーションをホスティングします。

  1. を使用して AWS CLI、アプリケーションのディレクトリを作成します。その新しいディレクトリに変更します。

    mkdir serverless_application cd serverless_application
  2. 次に、新しいディレクトリ内に仮想環境を作成します。アクティベートするには以下のコマンドを使用します。

    # Create our virtual environment virtualenv serverless_env # Activate it source serverless_env/bin/activate
  3. X-Ray、Flask、Zappa およびリクエストライブラリをその環境にインストールします。

    # Install X-Ray, Flask, Zappa, and Requests into your environment pip install aws-xray-sdk flask zappa requests
  4. アプリケーションコードを serverless_application ディレクトリに追加します。この例では、Flasks の Hello World の例を基にします。

    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 環境の作成とデプロイ

このステップでは、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
  2. 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-*********" } }
  3. 設定ファイルのエントリとして "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 } }
  4. アプリケーションをデプロイします。これにより、API Gateway エンドポイントが設定され、コードは Lambda に更新されます。

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

ステップ 3: API Gateway 用 X-Ray トレースを有効にする

このステップでは、API Gateway コンソールを使用して、X-Ray トレースを有効にします。

  1. にサインイン AWS Management Console し、https://console.aws.amazon.com/apigateway/ で API Gateway コンソールを開きます。

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

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

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

  5. [Logs/Tracing] タブで、[X-Ray トレースを有効にする] チェックボックスをオンにします。

  6. [変更の保存] をクリックします。

  7. ブラウザでエンドポイントにアクセスします。サンプルの Hello World アプリケーションを使用した場合は、次のように表示されます。

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

ステップ 4: 作成したトレースを表示する

このステップでは、X-Ray コンソールを使用して、サンプルアプリケーションで作成されたトレースを表示します。トレース解析の詳細なチュートリアルについては、「サービスマップの表示」を参照してください。

  1. にサインイン AWS Management Console し、https://console.aws.amazon.com/xray/home で X-Ray コンソールを開きます。

  2. API Gateway、Lambda 関数、Lambda コンテナによって生成されたセグメントを表示します。

  3. Lambda 関数のセグメントで、My First Serverless App という名前のサブセグメントを表示します。次に、https://aws.amazon.com という名前の 2 番目のサグメントが続きます。

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


        トレースセグメントビュー

        サービスグラフビュー

ステップ 5:クリーンアップ

不要なコストがかからないように、使用しなくなったリソースは必ず終了して​​ください。このチュートリアルで示されているように、Zappa のようなツールを使用することで、サーバーレスの再デプロイを効率化することができます。

Lambda、API Gateway、Amazon S3 からアプリケーションを削除するには、 AWS CLIを使用して、プロジェクトディレクトリで次のコマンドを実行します。

zappa undeploy dev

次のステップ

AWS クライアントを追加し、X-Ray で計測することで、アプリケーションに機能を追加します。サーバーレスコンピューティングのオプションについては、AWSのサーバーレスを参照してください。