检测部署到无服务器环境的 Web 框架 - Amazon X-Ray
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

检测部署到无服务器环境的 Web 框架

适用于 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 端点。

先决条件

  • Zappa

  • Python - 版本 2.7 或 3.6。

  • Amazon CLI— 验证您的账户 Amazon CLI 是否配置 Amazon Web Services 区域 了以及您将在其中部署应用程序。

  • Pip

  • Virtualenv

步骤 1:创建 环境

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

  1. 使用 Amazon 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 目录中。在这个例子中,我们可以构建 Flash 的 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 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. 登录 Amazon Web Services Management Console 并打开 API Gateway 控制台,网址为 https://console.aws.amazon.com/apigateway/

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

  3. 选择阶段

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

  5. 日志/跟踪选项卡上,选中启用 X-Ray 跟踪复选框。

  6. 选择保存更改

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

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

步骤 4:查看创建的跟踪

在此步骤中,您将与 X-Ray 控制台交互,以查看示例应用程序所创建的跟踪。有关跟踪分析的更详细演练,请参阅查看服务映射

  1. 登录 Amazon Web Services Management Console 并打开 X-Ray 控制台,网址为 https://console.aws.amazon.com/xray/home

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

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

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


        跟踪分段视图。

        服务图视图。

第 5 步:清理

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

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

zappa undeploy dev

后续步骤

通过添加 Amazon 客户端并使用 X-Ray 对其进行检测,为您的应用程序添加更多功能。若要详细了解无服务器计算选项,请前往 Amazon上的无服务器