Amazon ECS で X-Ray デーモンを実行する - AWS X-Ray

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

Amazon ECS で X-Ray デーモンを実行する

Amazon 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 イメージの定義が必要になる場合があります。

注記

Scorekeep サンプルアプリケーションでは、Amazon ECS で X-Ray デーモンを使用する方法を示しています。詳細については、「Amazon ECS アプリケーションの作成」を参照してください。

タスクロールに管理ポリシーを追加して、デーモンにトレースデータを X-Ray にアップロードするアクセス許可を与えます。詳細については、「X-Ray にデータを送信するアクセス権限をデーモンに付与する」を参照してください。

次のいずれかの Dockerfiles を使用して、デーモンを実行するイメージを作成します。

例 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 が必要です。

例 Dockerfile – Ubuntu

Debian から派生した OS では、認証機関 (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 で使用できます。ブリッジネットワークで、X-Ray SDK に参照先のコンテナポートを指示し、ホストポートを設定するように AWS_XRAY_DAEMON_ADDRESS 環境変数を設定します。たとえば、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 ネットワークモードを使用して、Elastic Network Interface (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 コンソールでのコマンドラインオプションの構成

コマンドラインオプションは、イメージの設定ファイル内の競合する値を上書きします。コマンドラインオプションは、一般的にローカルテストに使用されますが、環境変数を設定する際の便宜上、または起動プロセスを制御するために使用することもできます。

コマンドラインオプションを追加することで、コンテナに渡される Docker CMD が更新されます。詳細については、Docker run reference を参照してください。

コマンドラインオプションを設定するには

  1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。

  2. ナビゲーションバーから、タスク定義を含むリージョンを選択します。

  3. ナビゲーションペインで、[Task Definitions] を選択します。

  4. [Task Definitions] ページで、変更するタスク定義の左側にあるボックスをオンにし、[Create new revision] を選択します。

  5. [Create new revision of Task Definition (タスク定義の新しいリビジョンを作成)] ページで、コンテナを選択します。

  6. [ENVIRONMENT (環境)] セクションで、コマンドラインオプションのカンマ区切りリストを [Command (コマンド)] フィールドに追加します。

  7. [Update (更新)] を選択します。

  8. 情報を確認し、[Create] を選択します。

次の例は、RoleARN オプションのコマンドラインオプションをカンマで区切って記述する方法を示しています。RoleARN オプションは、セグメントを別のアカウントにアップロードするために、指定された IAM ロールを引き受けます。

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

X-Ray で使用可能なコマンドラインオプションの詳細については、「AWS X-Ray デーモンの設定」を参照してください。