

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

# 在 Amazon ECS 上运行 X-Ray 进程守护程序
在 Amazon ECS 上

**注意**  
X-Ray SDK/Daemon 维护通知 — 2026 年 2 月 25 日， Amazon X-Ray SDKs/Daemon 将进入维护模式，在该模式下，X-Ray SDK 和 Daemon 的发布 Amazon 将仅限于解决安全问题。有关支持时间表的更多信息，请参阅 [X-Ray SDK 和 Daemon Support 时间表](xray-sdk-daemon-timeline.md)。我们建议迁移到 OpenTelemetry。有关迁移到的更多信息 OpenTelemetry，请参阅[从 X-Ray 仪器迁移到 OpenTelemetry 仪器](https://docs.amazonaws.cn/xray/latest/devguide/xray-sdk-migration.html)。

在 Amazon ECS 上，创建运行 X-Ray 进程守护程序的 Docker 映像，将其上传到 Docker 映像存储库，然后部署到 Amazon ECS 集群。您可以在任务定义文件中使用端口映射和网络模式设置，允许您的应用程序与进程守护程序容器通信。

## 使用官方 Docker 映像


X-Ray 在 Amazon ECR 上提供了 Docker[ 容器映像](https://gallery.ecr.aws/xray/aws-xray-daemon)，您可以与您的应用程序一起部署该映像。有关更多信息，请参阅[下载进程守护程序](xray-daemon.md#xray-daemon-downloading)。

**Example 任务定义**  

```
    {
      "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 发送数据的权限](xray-daemon.md#xray-daemon-permissions)。

使用以下 Dockerfile 之一来创建运行进程守护程序的映像。

**Example 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
```

**注意**  
需要 `-t` 和 `-b` 来指定绑定地址侦听多容器环境的环回。

**Example 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 开发工具包引用哪个容器端口并设置主机端口。例如，可以发布 UDP 端口 2000，并创建您的应用程序容器与进程守护程序容器之间的链接。

**Example 任务定义**  

```
    {
      "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` 网络模式](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/task-networking.html)将弹性网络接口 (ENI) 附加到您的容器。这样可以避免使用链接。省略端口映射、链接和 `AWS_XRAY_DAEMON_ADDRESS` 环境变量中的主机端口。

**Example 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 控制台中配置命令行选项


命令行选项将覆盖映像配置文件中的任何冲突值。命令行选项通常用于本地测试，但为了方便设置环境变量或控制启动过程，也可以使用命令行选项。

添加命令行选项会更新传递到该容器的 Docker `CMD`。有关更多信息，请参阅 [Docker 运行参考](https://docs.docker.com/engine/reference/run/#overriding-dockerfile-image-defaults)。

**设置命令行选项**

1. 打开 Amazon ECS 经典控制台，网址为[https://console.aws.amazon.com/ecs/](https://console.amazonaws.cn/ecs/)。

1. 从导航栏中，选择包含您的任务定义的区域。

1. 在导航窗格中，选择 **Task Definitions**。

1. 在 **Task Definitions** 页面上，选择要修订的任务定义左侧的框，然后选择 **Create new revision**。

1. 在**创建任务定义新修订**页面上，选择该容器。

1. 在**环境**部分，将用逗号分隔的命令行选项列表添加到**命令**字段。

1. 选择**更新**。

1. 验证信息并选择 **Create**。

以下示例演示了如何为 `RoleARN` 选项编写以逗号分隔的命令行选项。`RoleARN` 选项采用指定的 IAM 角色将分段上传到其他账户。

**Example**  

```
--role-arn, arn:aws:iam::123456789012:role/xray-cross-account
```

要了解有关 X-Ray 中可用命令行选项的更多信息，请参阅[配置 Amazon X-Ray 守护程序](xray-daemon-configuration.md)。