本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amazon ECS 上运行 X-Ray 守护进程
在 Amazon ECS ECS 中,创建运行 X-Ray 守护程序的 Docker 映像,将其上传到 Docker 映像存储库,然后部署到 Amazon ECS 群集。您可以在任务定义文件中使用端口映射和网络模式设置,允许您的应用程序与守护程序容器通信。
使用官方 Docker 映像
X-Ray 提供了 Docker 容器映像,您可以与您的应用程序一起部署这
$ docker pull amazon/aws-xray-daemon
例 任务定义
{ "name": "xray-daemon", "image": "amazon/aws-xray-daemon", "cpu": 32, "memoryReservation": 256, "portMappings" : [
{ "hostPort": 0, "containerPort": 2000, "protocol": "udp" }
] }
创建和构建 Docker 镜像
对于自定义配置,您可能需要定义自己的 Docker 映像。
为任务角色添加托管策略,授予守护程序将跟踪数据上传到 X-Ray 的权限。有关更多信息,请参阅 授予守护程序向 X-Ray 发送数据的权限。
使用以下 Dockerfile 之一来创建运行守护程序的映像。
例 Dockerfile — Amazon Linux
FROM amazonlinux RUN yum install -y unzip RUN curl -o daemon.zip https://s3.us-east-2.amazonaws.com/aws-xray-assets.us-east-2/xray-daemon/aws-xray-daemon-linux-3.x.zip RUN unzip daemon.zip && cp xray /usr/bin/xray ENTRYPOINT ["/usr/bin/xray", "-t", "0.0.0.0:2000", "-b", "0.0.0.0:2000"] EXPOSE 2000/udp EXPOSE 2000/tcp
Flags-t
和-b
需要指定绑定地址来监听多容器环境的环回。
例 Dockerfile — Ubuntu
对于 Debian 衍生物,您还需要安装证书颁发机构 (CA) 证书,以避免下载安装程序时遇到问题。
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y --force-yes --no-install-recommends apt-transport-https curl ca-certificates wget && apt-get clean && apt-get autoremove && rm -rf /var/lib/apt/lists/*
RUN wget https://s3.us-east-2.amazonaws.com/aws-xray-assets.us-east-2/xray-daemon/aws-xray-daemon-3.x.deb
RUN dpkg -i aws-xray-daemon-3.x.deb
ENTRYPOINT ["/usr/bin/xray", "--bind=0.0.0.0:2000", "--bind-tcp=0.0.0.0:2000"]
EXPOSE 2000/udp
EXPOSE 2000/tcp
在您的任务定义中,配置取决于您使用的联网模式。桥式联网是默认模式,可在您的默认 VPC 中使用。在桥接网络中,设置AWS_XRAY_DAEMON_ADDRESS
环境变量告诉 X-Ray SDK 要引用哪个容器端口并设置主机端口。例如,您可以发布 UDP 端口 2000,并创建您的应用程序容器与守护程序容器之间的链接。
例 任务定义
{ "name": "xray-daemon", "image": "123456789012.dkr.ecr.us-east-2.amazonaws.com/xray-daemon", "cpu": 32, "memoryReservation": 256, "portMappings" : [
{ "hostPort": 0, "containerPort": 2000, "protocol": "udp" }
] }, { "name": "scorekeep-api", "image": "123456789012.dkr.ecr.us-east-2.amazonaws.com/scorekeep-api", "cpu": 192, "memoryReservation": 512, "environment": [ { "name" : "AWS_REGION", "value" : "us-east-2" }, { "name" : "NOTIFICATION_TOPIC", "value" : "arn:aws:sns:us-east-2:123456789012:scorekeep-notifications" },{ "name" : "AWS_XRAY_DAEMON_ADDRESS", "value" : "xray-daemon:2000" }
], "portMappings" : [ { "hostPort": 5000, "containerPort": 5000 } ],"links": [ "xray-daemon" ] }
如果您在 VPC 的私有子网中运行集群,可以使用 awsvpc
网络模式将弹性网络接口 (ENI) 附加到您的容器。这样可以避免使用链接。省略端口映射、链接和 AWS_XRAY_DAEMON_ADDRESS
环境变量中的主机端口。
例 VPC 任务定义
{ "family": "scorekeep",
"networkMode":"awsvpc",
"containerDefinitions": [ { "name": "xray-daemon", "image": "123456789012.dkr.ecr.us-east-2.amazonaws.com/xray-daemon", "cpu": 32, "memoryReservation": 256, "portMappings" : [ { "containerPort": 2000, "protocol": "udp" } ] }, { "name": "scorekeep-api", "image": "123456789012.dkr.ecr.us-east-2.amazonaws.com/scorekeep-api", "cpu": 192, "memoryReservation": 512, "environment": [ { "name" : "AWS_REGION", "value" : "us-east-2" }, { "name" : "NOTIFICATION_TOPIC", "value" : "arn:aws:sns:us-east-2:123456789012:scorekeep-notifications" } ], "portMappings" : [ { "containerPort": 5000 } ] } ] }
在 Amazon ECS 控制台中配置命令行选项
命令行选项将覆盖映像配置文件中的任何冲突值。命令行选项通常用于本地测试,但为了方便设置环境变量或控制启动过程,也可以使用命令行选项。
通过添加命令行选项,您正在更新 DockerCMD
传递给容器。有关更多信息,请参阅 Docker 运行参考
设置命令行选项
打开位于 https://console.aws.amazon.com/redshift/
的 Amazon ECS 控制台。 -
从导航栏中,选择包含您的任务定义的区域。
-
在导航窗格中,选择 Task Definitions。
-
在 Task Definitions 页面上,选择要修订的任务定义左侧的框,然后选择 Create new revision。
-
在存储库的创建任务定义的新修订页面上,选择容器。
-
在环境部分中,将逗号分隔的命令行选项列表添加到命令字段中返回的子位置类型。
-
选择 Update (更新)。
-
验证信息并选择 Create。
以下示例演示如何为RoleARN
选项。这些区域有:RoleARN
选项采用指定的 IAM 角色上传分段到不同账户。
--role-arn, arn:aws:iam::
123456789012
:role/xray-cross-account
要了解有关 X-Ray 中可用的命令行选项的更多信息,请参阅配置Amazon X-Ray守护程序.