

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

# Scorekeep サンプルアプリケーションの開始方法
<a name="scorekeep-tutorial"></a>

**注記**  
X-Ray SDK/デーモンメンテナンス通知 – 2026 年 2 月 25 日、 AWS X-Ray SDKsデーモンはメンテナンスモードに移行します。 AWS では、X-Ray SDK とデーモンのリリースがセキュリティの問題にのみ対処するように制限されます。サポートタイムラインの詳細については、「[X-Ray SDK とデーモンのサポートタイムライン](xray-sdk-daemon-timeline.md)」を参照してください。OpenTelemetry に移行することをお勧めします。OpenTelemetry への移行の詳細については、「[X-Ray による計装から OpenTelemetry による計装への移行](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html)」を参照してください。

このチュートリアルでは、[Scorekeep サンプルアプリケーションの](xray-scorekeep.md) `xray-gettingstarted` ブランチを使用します。このブランチは、 CloudFormation を使用して、Amazon ECS でサンプルアプリケーションと X-Ray デーモンを実行するリソースを作成および設定します。アプリケーションは Spring フレームワークを使用して JSON ウェブ API を実装し、 AWS SDK for Java を使用してデータを Amazon DynamoDB に保持します。アプリケーションのサーブレットフィルターは、アプリケーションによって処理されるすべての受信リクエストを計測し、 AWS SDK クライアントのリクエストハンドラーは DynamoDB へのダウンストリーム呼び出しを計測します。

このチュートリアルは、 AWS マネジメントコンソール または を使用して実行できます AWS CLI。

**Topics**
+ [前提条件](#xray-gettingstarted-prereqs)
+ [CloudFormation を使用した Scorekeep アプリケーションのインストール](#xray-gettingstarted-deploy)
+ [トレースデータの生成](#xray-gettingstarted-generate-traces)
+ [でトレースマップを表示する AWS マネジメントコンソール](#xray-gettingstarted-console)
+ [Amazon SNS 通知の設定](#xray-gettingstarted-notifications)
+ [サンプルアプリケーションの詳細](#xray-gettingstarted-sample)
+ [オプション: 最小特権ポリシー](#xray-gettingstarted-security)
+ [クリーンアップ](#xray-gettingstarted-cleanup)
+ [次の手順](#xray-gettingstarted-nextsteps)

## 前提条件
<a name="xray-gettingstarted-prereqs"></a>

このチュートリアルでは CloudFormation 、 を使用して、サンプルアプリケーションと X-Ray デーモンを実行するリソースを作成および設定します。チュートリアルでインストールと実行をする前提条件として以下が必要です。

1. アクセス許可が限定された IAM ユーザーを使用する場合は、[IAM コンソール](https://console.aws.amazon.com/iam)に次のユーザーポリシーを追加してください。
   + `AWSCloudFormationFullAccess` – CloudFormation にアクセスして使用
   + `AmazonS3FullAccess` – を使用してテンプレートファイルを CloudFormation にアップロードするには AWS マネジメントコンソール
   + `IAMFullAccess` – Amazon ECS インスタンスロールと Amazon EC2 インスタンスロールを作成
   + `AmazonEC2FullAccess` – Amazon EC2 リソースを作成
   + `AmazonDynamoDBFullAccess` – DynamoDB テーブルを作成
   + `AmazonECS_FullAccess` – Amazon ECS リソースを作成
   + `AmazonSNSFullAccess` – Amazon SNS トピックを作成
   + `AWSXrayReadOnlyAccess` - X-Ray コンソールでトレースマップとトレースを表示するアクセス許可

1. を使用してチュートリアルを実行するには AWS CLI、[CLI バージョン 2.7.9 以降をインストール](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)し、前のステップの ユーザーを使用して [CLI を設定します](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)。ユーザー AWS CLI で を設定するときは、リージョンが設定されていることを確認してください。リージョンが設定されていない場合は、すべての CLI コマンドに `--region AWS-REGION` を追加する必要があります。

1. サンプルアプリケーションリポジトリを複製ために、[Git](https://github.com/git-guides/install-git) がインストールされていることを確認してください。

1. 次のコード例を使用して、Scorekeep リポジトリの `xray-gettingstarted` ブランチをクローンします。

   ```
   git clone https://github.com/aws-samples/eb-java-scorekeep.git xray-scorekeep -b xray-gettingstarted
   ```

## CloudFormation を使用した Scorekeep アプリケーションのインストール
<a name="xray-gettingstarted-deploy"></a>

------
#### [ AWS マネジメントコンソール ]

**を使用してサンプルアプリケーションをインストールする AWS マネジメントコンソール**

1. [CloudFormation コンソール](https://console.aws.amazon.com/cloudformation/)を開きます。

1. **[スタックの作成]** を選択し、ドロップダウンメニューから **[新しいリソースを使用]** を選択します。

1. **[テンプレートの指定]** セクションで、**[テンプレートファイルのアップロード]** を選択します。

1. **[ファイルの選択]** を選択し、git リポジトリをクローンしたときに作成された `xray-scorekeep/cloudformation` フォルダーに移動して、`cf-resources.yaml` ファイルを選択します。

1. **[次へ]** を選択して続行します。

1. **[スタック名]** テキストボックスに `scorekeep` と入力し、ページ下部の **[次へ]** を選択して続行します。このチュートリアルのこれ以降の部分ではスタックの名前を `scorekeep` とします。

1. **[スタックオプションの設定]** ページの一番下までスクロールし、**[次へ]** を選択して続行します。

1. **[レビュー]** ページの一番下までスクロールし、[CloudFormation によってカスタム名がついた IAM リソースが作成される場合があることを承認します] チェックボックスをオンにし、**[スタックの作成]** を選択します。

1. CloudFormation スタックが作成中になります。スタックのステータスは約 5 分間 `CREATE_COMPLETE` で、その後 `CREATE_IN_PROGRESS` に変わります。ステータスは定期的に更新されます。ページを更新して再表示することもできます。

------
#### [ AWS CLI ]

**を使用してサンプルアプリケーションをインストールする AWS CLI**

1. このチュートリアルの前の部分でクローンを作成した `xray-scorekeep` リポジトリの `cloudformation` フォルダーに移動します。

   ```
   cd xray-scorekeep/cloudformation/
   ```

1. 次の AWS CLI コマンドを入力して CloudFormation スタックを作成します。

   ```
   aws cloudformation create-stack --stack-name scorekeep --capabilities "CAPABILITY_NAMED_IAM" --template-body file://cf-resources.yaml
   ```

1. CloudFormation スタックのステータスが `CREATE_COMPLETE` になるまで約 5 分待ってください。ステータスを確認するには、次の AWS CLI コマンドを使用します。

   ```
   aws cloudformation describe-stacks --stack-name scorekeep --query "Stacks[0].StackStatus"
   ```

------

## トレースデータの生成
<a name="xray-gettingstarted-generate-traces"></a>

サンプルアプリケーションには、フロントエンドのウェブアプリケーションが含まれています。ウェブアプリケーションを使用して API へのトラフィックを生成し、トレースデータを X-Ray に送信します。まず、 AWS マネジメントコンソール または AWS CLIを使用してウェブアプリの URL を取得します。

------
#### [ AWS マネジメントコンソール ]

**を使用してアプリケーション URL を検索する AWS マネジメントコンソール**

1. [CloudFormation コンソール](https://console.aws.amazon.com/cloudformation/)を開きます。

1. リストから `scorekeep` スタックを選択します。

1. `scorekeep` スタックページの [**出力**] タブを選択し、`LoadBalancerUrl` URL リンクを選択してウェブアプリケーションを開きます。

------
#### [ AWS CLI ]

**を使用してアプリケーション URL を検索する AWS CLI**

1. 次のコマンドを使用して、ウェブアプリケーションの URL を表示します。

   ```
   aws cloudformation describe-stacks --stack-name scorekeep --query "Stacks[0].Outputs[0].OutputValue"
   ```

1. この URL をコピーしてブラウザで開き、Scorekeep ウェブアプリケーションを表示します。

------

**ウェブアプリケーションを使用してトレースデータを生成する**

1. [**Create**] を選択して、ユーザーとセッションを作成します。

1. **[ゲーム名]** を入力し、**[ルール]** を **[Tic Tac Toe]** に設定したら、**[作成]** を選択して、ゲームを作成します。

1. [**Play**] を選択してゲームを開始します。

1. ゲームの状態を移行および変更するには、タイルを選択します。

これらの各ステップで、API への HTTP リクエスト、および DynamoDB へのダウンストリーム呼び出しが生成され、ユーザー、セッション、ゲーム、移動、および状態データが読み書きされます。

## でトレースマップを表示する AWS マネジメントコンソール
<a name="xray-gettingstarted-console"></a>

X-Ray コンソールと CloudWatch コンソールで、サンプルアプリケーションによって生成されたトレースマップとトレースを確認できます。

------
#### [ X-Ray console ]

**X-Ray コンソールを使用する**

1. [X-Ray コンソール](https://console.aws.amazon.com/xray/home#/service-map)のトレースマップページを開きます。

1. コンソールには、X-Ray によってアプリケーションから送信されたトレースデータから生成されたサービスグラフの表現が表示されます。ウェブアプリケーションを最初に起動した時点からのすべてのトレースが表示されるように、必要に応じてトレースマップの期間を調整してください。  
![\[X-Ray トレースマップの期間\]](http://docs.aws.amazon.com/ja_jp/xray/latest/devguide/images/xray-console-time-period-15-minutes.png)

トレースマップに表示されるのは、ウェブアプリケーションクライアント、Amazon ECS で実行されている API、アプリケーションで使用される各 DynamoDB テーブルです。アプリケーションに対するすべてのリクエストは、1 秒あたりのリクエストの設定可能な最大数まで、API にヒットした際にトレースされ、ダウンストリームサービスへのリクエストを生成して、完了します。

サービスグラフの任意のノードを選択すると、そのノードに対してトラフィックを生成したリクエストのトレースを表示できます。現在、Amazon SNS ノードは黄色になっています。理由を調べるために掘り下げます。

![\[X-Ray コンソールのトレースマップページ\]](http://docs.aws.amazon.com/ja_jp/xray/latest/devguide/images/scorekeep-gettingstarted-servicemap-before-ECS.png)


**エラーの原因を見つけるには**

1. [**SNS**] という名前のノードを選択します。ノードの詳細パネルが表示されます。

1. [**トレースの表示**] を選択して、[**トレースの概要**] 画面にアクセスします。

1. [**Trace のリスト**] からトレースを選択します。受信リクエストに応答するのではなく起動時に記録されているため、トレースには、メソッドまたは URL はありません。  
![\[トレースリストからトレースを選択する\]](http://docs.aws.amazon.com/ja_jp/xray/latest/devguide/images/scorekeep-gettingstarted-tracelist-sns.png)

1. ページ下部の Amazon SNS セグメント内のエラーステータスアイコンを選択し、SNS サブセグメントの **[例外]** ページを開きます。  
![\[エラー状態のアイコンを選択して、Amazon SNS サブセグメントの [例外] ページを開きます。\]](http://docs.aws.amazon.com/ja_jp/xray/latest/devguide/images/scorekeep-gettingstarted-timeline-sns-ecs.png)

1. X-Ray SDK は、計測された AWS SDK クライアントによってスローされた例外を自動的にキャプチャし、スタックトレースを記録します。  
![\[キャプチャされた例外と記録されたスタックトレースを示す [例外] タブ\]](http://docs.aws.amazon.com/ja_jp/xray/latest/devguide/images/scorekeep-gettingstarted-exception.png)

------
#### [ CloudWatch console ]

**CloudWatch コンソールを使用する**

1. CloudWatch コンソールの [X-Ray トレースマップ](https://console.aws.amazon.com/cloudwatch/home#xray:service-map/map)ページを開きます。

1. コンソールには、X-Ray によってアプリケーションから送信されたトレースデータから生成されたサービスグラフの表現が表示されます。ウェブアプリケーションを最初に起動した時点からのすべてのトレースが表示されるように、必要に応じてトレースマップの期間を調整してください。  
![\[CloudWatch トレースマップの期間\]](http://docs.aws.amazon.com/ja_jp/xray/latest/devguide/images/cw-console-service-map-time-period-15-minutes.png)

トレースマップに表示されるのは、ウェブアプリケーションクライアント、Amazon EC2 で実行されている API、アプリケーションで使用される各 DynamoDB テーブルです。アプリケーションに対するすべてのリクエストは、1 秒あたりのリクエストの設定可能な最大数まで、API にヒットした際にトレースされ、ダウンストリームサービスへのリクエストを生成して、完了します。

サービスグラフの任意のノードを選択すると、そのノードに対してトラフィックを生成したリクエストのトレースを表示できます。現在、Amazon SNS ノードはオレンジ色になっています。理由を調べるために掘り下げます。

![\[X-Ray コンソールのトレースマップページ\]](http://docs.aws.amazon.com/ja_jp/xray/latest/devguide/images/scorekeep-gettingstarted-cw-servicemap-before-ECS.png)


**エラーの原因を見つけるには**

1. [**SNS**] という名前のノードを選択します。SNS ノードの詳細パネルがマップの下に表示されます。

1. **[トレースを表示]** を選択して **[トレース]** ページにアクセスします。

1. ページの下部で、**[トレース]** リストからトレースを選択します。受信リクエストに応答するのではなく起動時に記録されているため、トレースには、メソッドまたは URL はありません。  
![\[トレースリストからトレースを選択する\]](http://docs.aws.amazon.com/ja_jp/xray/latest/devguide/images/scorekeep-gettingstarted-cw-tracelist-sns-ecs.png)

1. セグメントタイムラインの下部にある Amazon SNS サブセグメントを選択し、SNS サブセグメントの **[例外]** タブを選択すると、例外の詳細が表示されます。  
![\[Amazon SNS サブセグメントの [例外] タブを表示\]](http://docs.aws.amazon.com/ja_jp/xray/latest/devguide/images/scorekeep-gettingstarted-cw-timeline-sns-ecs.png)

------

この原因は、`WebConfig` クラスで行われた `createSubscription` の呼び出しで指定された E メールアドレスが無効であることを意味します。次のセクションで、これを修正します。

## Amazon SNS 通知の設定
<a name="xray-gettingstarted-notifications"></a>

Scorekeep では、ユーザーがゲームを達成すると、Amazon SNS で通知が送信されます。アプリケーション起動時、CloudFormation のスタックパラメータで定義された E メールアドレスのサブスクリプションが作成されます。現在その呼び出しに失敗しています。通知を有効にするように通知 E メールを設定し、トレースマップで強調表示されている障害を解決します。

------
#### [ AWS マネジメントコンソール ]

**を使用して Amazon SNS 通知を設定するには AWS マネジメントコンソール**

1. [CloudFormation コンソール](https://console.aws.amazon.com/cloudformation/)を開きます。

1. リストの `scorekeep` スタック名の横にあるラジオボタンを選択して、**[更新]** を選択します。

1. **[現在のテンプレートの使用]** が選択されていることを確認し、**[スタックの更新]** ページで **[次へ]** をクリックします。

1. リストから **[E メール]** パラメータを探し、デフォルト値を有効な E メールアドレスに置き換えます。  
![\[E メール設定を更新する\]](http://docs.aws.amazon.com/ja_jp/xray/latest/devguide/images/scorekeep-cf-email-update.png)

1. ページの下部にスクロールし、[**次へ**] を選択します。

1. **[レビュー]** ページの一番下までスクロールし、[CloudFormation によってカスタム名がついた IAM リソースが作成される場合があることを承認します] チェックボックスをオンにし、**[スタックの更新]** を選択します。

1. CloudFormation スタックが更新中になります。スタックのステータスは約 5 分間 `UPDATE_COMPLETE` で、その後 `UPDATE_IN_PROGRESS` に変わります。ステータスは定期的に更新されます。ページを更新して再表示することもできます。

------
#### [ AWS CLI ]

**を使用して Amazon SNS 通知を設定するには AWS CLI**

1. 以前に作成した `xray-scorekeep/cloudformation/` フォルダーに移動し、`cf-resources.yaml` ファイルをテキストエディタで開きます。

1. **[E メール]** パラメータ内の `Default` 値を検索し、*UPDATE\$1ME* から有効な E メールアドレスに変更します。

   ```
   Parameters:
     Email:
       Type: String
       Default: UPDATE_ME # <- change to a valid abc@def.xyz email address
   ```

1. `cloudformation` フォルダから、次の AWS CLI コマンドを使用して CloudFormation スタックを更新します。

   ```
   aws cloudformation update-stack --stack-name scorekeep --capabilities "CAPABILITY_NAMED_IAM" --template-body file://cf-resources.yaml
   ```

1. CloudFormation スタックのステータスが `UPDATE_COMPLETE` になるまで数分待ってください。ステータスを確認するには、次の AWS CLI コマンドを使用します。

   ```
   aws cloudformation describe-stacks --stack-name scorekeep --query "Stacks[0].StackStatus"
   ```

------

更新が完了すると、Scorekeep が再起動し、SNS トピックへのサブスクリプションが作成されます。E メールとサブスクリプションを確認して、ゲーム達成時にアップデートの有無を確認します。トレースマップを開いて、SNS への呼び出しが失敗しなくなったことを確認します。

## サンプルアプリケーションの詳細
<a name="xray-gettingstarted-sample"></a>

サンプルアプリケーションは、X-Ray SDK for Java を使用するように設定された Java の HTTP ウェブ API です。CloudFormation テンプレートを使用してアプリケーションをデプロイすると、ECS で Scorekeep を実行するために必要な DynamoDB テーブル、Amazon ECS クラスター、およびその他のサービスが作成されます。ECS のタスク定義ファイルは、CloudFormation によって作成されます。このファイルは ECS クラスター内のタスクごとに使用されるコンテナイメージを定義します。これらのイメージは、公式の X-Ray パブリック ECR から取得されます。Scorekeep API コンテナイメージには Gradle でコンパイルされた API が含まれています。Scorekeep フロントエンドコンテナのコンテナイメージは、nginx プロキシサーバーを使用するフロントエンドに対応します。このサーバーは /api で始まるパスにリクエストをルーティングして API に送信します。

受信 HTTP リクエストを測定するには、アプリケーションで SDK によって提供された `TracingFilter` を追加します。

**Example src/main/java/scorekeep/WebConfig.java - サーブレットフィルタ**  

```
import javax.servlet.Filter;
import [com.amazonaws.xray.javax.servlet.AWSXRayServletFilter](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/javax/servlet/AWSXRayServletFilter.html);
...

@Configuration
public class WebConfig {

  @Bean
  public Filter TracingFilter() {
    return new AWSXRayServletFilter("Scorekeep");
  }
...
```

このフィルタは、アプリケーションが処理するすべての受信リクエストに関するトレースデータを送信します。リクエスト URL、メソッド、レスポンスステータス、開始時間、終了時間が含まれます。

また、アプリケーションは AWS SDK for Javaを使用して DynamoDB に対するダウンストリーム呼び出しを行います。これらの呼び出しを計測するために、アプリケーションは単に AWS SDK 関連のサブモジュールを依存関係として受け取り、X-Ray SDK for Java はすべての AWS SDK クライアントを自動的に計測します。

アプリケーションは `Docker` を使用して、インスタンス上で `Gradle Docker Image` と `Scorekeep API Dockerfile` ファイルを使用するソースコードを構築し、Gradle の `ENTRYPOINT` で生成する実行可能 JAR を実行します。

**Example Docker を使用して Gradle Docker イメージ経由で構築する**  

```
docker run --rm -v /PATH/TO/SCOREKEEP_REPO/home/gradle/project -w /home/gradle/project gradle:4.3 gradle build
```

**Example Dockerファイル ENTRYPOINT**  

```
ENTRYPOINT [ "sh", "-c", "java -Dserver.port=5000 -jar scorekeep-api-1.0.0.jar" ]
```

SDK サブモジュールを依存関係として宣言することで、コンパイル中に `build.gradle` ファイルによって SDK サブモジュールが Maven からダウンロードされます。

**Example build.gradle -- 依存関係**  

```
...
dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile('org.springframework.boot:spring-boot-starter-test')
    compile('com.amazonaws:aws-java-sdk-dynamodb')
    compile("com.amazonaws:aws-xray-recorder-sdk-core")
    compile("com.amazonaws:aws-xray-recorder-sdk-aws-sdk")
    compile("com.amazonaws:aws-xray-recorder-sdk-aws-sdk-instrumentor")
    ...
}
dependencyManagement {
    imports {
        mavenBom("com.amazonaws:aws-java-sdk-bom:1.11.67")
        mavenBom("com.amazonaws:aws-xray-recorder-sdk-bom:2.11.0")
    }
}
```

コア、 AWS SDK、および AWS SDK Instrumentor サブモジュールは、 AWS SDK で行われたダウンストリーム呼び出しを自動的に計測するために必要なすべてです。

未加工のセグメントデータを X-Ray API に中継するには、X-Ray デーモンが UDP ポート 2000 でトラフィックを受信する必要があります。そのため、アプリケーションでは、ECS で Scorekeep アプリケーションとともに*サイドカーコンテナ*としてデプロイされるコンテナでX-Ray デーモンを実行します。詳細については、[X-Ray デーモン](xray-daemon.md)のトピックを参照してください。

**Example ECS タスク定義内の X-Ray デーモンコンテナ定義**  

```
...
Resources:
  ScorekeepTaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties: 
      ContainerDefinitions: 
      ...
      
      - Cpu: '256'
        Essential: true
        Image: amazon/aws-xray-daemon
        MemoryReservation: '128'
        Name: xray-daemon
        PortMappings: 
          - ContainerPort: '2000'
            HostPort: '2000'
            Protocol: udp
      ...
```

X-Ray SDK for Java は、`AWSXRay` という名前のクラスを提供します。これはコードを計測するために使用する `TracingHandler` というグローバルレコーダーを提供します。グローバルレコーダーを設定して、受信 HTTP 呼び出しのセグメントを作成する `AWSXRayServletFilter` をカスタマイズできます。サンプルには、プラグインとサンプリングルールでグローバルレコーダーを設定する `WebConfig` クラスの静的ブロックが含まれています。

**Example src/main/java/scorekeep/WebConfig.java - レコーダー**  

```
import com.amazonaws.xray.AWSXRay;
import com.amazonaws.xray.AWSXRayRecorderBuilder;
import com.amazonaws.xray.javax.servlet.AWSXRayServletFilter;
import com.amazonaws.xray.plugins.ECSPlugin;
import com.amazonaws.xray.plugins.EC2Plugin;
import com.amazonaws.xray.strategy.sampling.LocalizedSamplingStrategy;
...

@Configuration
public class WebConfig {
  ...
  
  static {
    AWSXRayRecorderBuilder builder = AWSXRayRecorderBuilder.standard().withPlugin(new ECSPlugin()).withPlugin(new EC2Plugin());

    URL ruleFile = WebConfig.class.getResource("/sampling-rules.json");
    builder.withSamplingStrategy(new LocalizedSamplingStrategy(ruleFile));

    AWSXRay.setGlobalRecorder(builder.build());
    ...
    
  }
}
```

この例では、ビルダーを使用して `sampling-rules.json` という名前のファイルからサンプリングルールをロードします。サンプリングルールは、SDK が受信リクエストのセグメントを記録するレートを決定します。

**Example src/main/java/resources/sampling-rules.json**  

```
{
  "version": 1,
  "rules": [
    {
      "description": "Resource creation.",
      "service_name": "*",
      "http_method": "POST",
      "url_path": "/api/*",
      "fixed_target": 1,
      "rate": 1.0
    },
    {
      "description": "Session polling.",
      "service_name": "*",
      "http_method": "GET",
      "url_path": "/api/session/*",
      "fixed_target": 0,
      "rate": 0.05
    },
    {
      "description": "Game polling.",
      "service_name": "*",
      "http_method": "GET",
      "url_path": "/api/game/*/*",
      "fixed_target": 0,
      "rate": 0.05
    },
    {
      "description": "State polling.",
      "service_name": "*",
      "http_method": "GET",
      "url_path": "/api/state/*/*/*",
      "fixed_target": 0,
      "rate": 0.05
    }
  ],
  "default": {
    "fixed_target": 1,
    "rate": 0.1
  }
}
```

サンプリングルールファイルでは、4 つのカスタムサンプリングルールおよびデフォルトルールが定義されます。各受信リクエスト用に、SDK は定義された順にカスタムルールを適用します。SDK は、リクエストのメソッド、パス、サービス名に一致する最初のルールを適用します。Scorekeep の場合、最初のルールは、1 秒あたり 1 リクエストの固定ターゲット、および固定ターゲットが満たされた後の 1.0 または 100% のリクエストのレートを適用して、すべての POST リクエスト (リソース作成呼び出し) をキャッチします。

他の 3 つのカスタムルールでは、固定ターゲットなしで、セッション、ゲーム、および状態の読み取り (GET リクエスト) に 5% のレートを適用します。これにより、フロントエンドが、コンテンツが最新であることを確認するために数秒ごとに自動的に行う周期的呼び出しのトレース数を最小限に抑えることができます。他のすべてのリクエストの場合は、ファイルは、1 秒あたり 1 リクエストのデフォルトレートおよび 10% のレートを定義します。

また、サンプルアプリケーションでは、手動 SDK クライアント計測、追加サブセグメントの作成、HTTP 呼び出しの出力など、高度な機能の使用方法も説明します。詳細については、「[AWS X-Ray サンプルアプリケーション](xray-scorekeep.md)」を参照してください。

## オプション: 最小特権ポリシー
<a name="xray-gettingstarted-security"></a>

 Scorekeep ECS コンテナは、`AmazonSNSFullAccess` や `AmazonDynamoDBFullAccess` などのフルアクセスポリシーを使用してリソースにアクセスします。フルアクセスポリシーの使用は、本稼働アプリケーションではベストプラクティスではありません。次の例では、DynamoDB IAM ポリシーを更新してアプリケーションのセキュリティを向上させます。IAM ポリシーのセキュリティのベストプラクティスの詳細については、[AWS 「X-Ray の Identity and Access Management](security-iam.md)」を参照してください。

**Example cf-resources.yaml テンプレート ECSTaskRole 定義**  

```
ECSTaskRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"		 	 	 
        Statement: 
          - 
            Effect: "Allow"
            Principal: 
              Service: 
                - "ecs-tasks.amazonaws.com"
            Action: 
              - "sts:AssumeRole"
      ManagedPolicyArns:
        - "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess"
        - "arn:aws:iam::aws:policy/AmazonSNSFullAccess"
        - "arn:aws:iam::aws:policy/AWSXrayFullAccess"
      RoleName: "scorekeepRole"
```

ポリシーを更新するには、最初に DynamoDB リソースの ARN を特定します。次に、カスタム IAM ポリシーで ARN を使用します。最後に、そのポリシーをインスタンスプロファイルに適用します。

**DynamoDB リソースの ARN を識別するには :**

1. [DynamoDB コンソール](https://console.aws.amazon.com/dynamodbv2)を開きます。

1. 左側のナビゲーションバーから [**テーブル**] を選択します。

1. `scorekeep-*` のいずれかを選択すると、テーブルの詳細ページが表示されます。

1. **[概要]** タブで **[追加情報]** を選択してセクションを展開し、Amazon リソースネーム (ARN) を表示します。この値をコピーします。

1. `AWS_REGION` および `AWS_ACCOUNT_ID` の値を特定のリージョンとアカウント ID に置き換えて、ARN を次の IAM ポリシーに挿入します。この新しいポリシーは、すべてのアクションを許可する `AmazonDynamoDBFullAccess` ポリシーではなく、指定されたアクションのみ許可します。  
**Example**  

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ScorekeepDynamoDB",
               "Effect": "Allow",
               "Action": [
                   "dynamodb:PutItem",
                   "dynamodb:UpdateItem",
                   "dynamodb:DeleteItem",
                   "dynamodb:GetItem",
                   "dynamodb:Scan",
                   "dynamodb:Query"
               ],
               "Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/scorekeep-*"
           }
       ]
   }
   ```

------

   アプリケーションが作成するテーブルは、一貫した命名規則に従います。`scorekeep-*` 形式を使用して、すべての Scorekeep テーブルを指定できます。

**IAM ポリシーを変更する**

1. IAM コンソールから [Scorekeep タスクロール (scorekeepRole)](https://console.aws.amazon.com/iamv2/home#/roles/details/scorekeepRole) を開きます。

1. `AmazonDynamoDBFullAccess` ポリシーの横にあるチェックボックスを選択して **[削除]** を選択し、このポリシーを削除します。

1. [**アクセス許可の追加**]、[**ポリシーのアタッチ**]、[**ポリシーの作成**] の順に選択します。

1. [**JSON**] タブを選択し、上で作成したポリシーを貼り付けます。

1. ページ下部の **[次へ: タグ]** を選択します。

1. ページ下部の **[次へ: 確認]** を選択します。

1. **[名前]** に、ポリシーの名前を割り当てます。

1. ページの下部の **[ポリシーの作成]** を選択します。

1. 新しく作成したポリシーを `scorekeepRole` ロールにアタッチします。アタッチしたポリシーが適用されるまで数分かかることがあります。

新しいポリシーを `scorekeepRole` ロールにアタッチした場合は、CloudFormation スタックを削除する前にデタッチする必要があります。このアタッチしたポリシーによってスタックの削除がブロックされるためです。ポリシーを削除すると、ポリシーを自動的にデタッチできます。

**カスタム IAM ポリシーを削除する**

1. [[IAM コンソール]](https://console.aws.amazon.com/iam) を開きます。

1. 左側のナビゲーションバーから [**ポリシー**] を選択します。

1. このセクションで先ほど作成したカスタムポリシー名を検索し、ポリシー名の横にあるラジオボタンを選択して強調表示します。

1. **[アクション]** ドロップダウンを選択してから、**[削除]** を選択します。

1. カスタムポリシーの名前を入力して [**削除**] を選択し、削除を確定します。これにより、ポリシーが `scorekeepRole` ロールから自動的にデタッチされます。

## クリーンアップ
<a name="xray-gettingstarted-cleanup"></a>

Scorekeep アプリケーションのリソースを削除するには、次の手順を従います。

**注記**  
このチュートリアルの前のセクションでカスタムポリシーを作成してアタッチした場合は、CloudFormation スタックを削除する前に、`scorekeepRole` からポリシーを削除する必要があります。

------
#### [ AWS マネジメントコンソール ]

**を使用してサンプルアプリケーションを削除する AWS マネジメントコンソール**

1. [CloudFormation コンソール](https://console.aws.amazon.com/cloudformation/)を開きます。

1. リストの `scorekeep` スタック名の横にあるラジオボタンを選択して、**[削除]** を選択します。

1. CloudFormation スタックが削除中になります。スタックのステータスは、すべてのリソースが削除されるまで数分間 `DELETE_IN_PROGRESS` になります。ステータスは定期的に更新されます。ページを更新して再表示することもできます。

------
#### [ AWS CLI ]

**を使用してサンプルアプリケーションを削除する AWS CLI**

1. 次の AWS CLI コマンドを入力して CloudFormation スタックを削除します。

   ```
   aws cloudformation delete-stack --stack-name scorekeep
   ```

1. CloudFormation スタックが存在しなくなるまで約 5 分待ってください。ステータスを確認するには、次の AWS CLI コマンドを使用します。

   ```
   aws cloudformation describe-stacks --stack-name scorekeep --query "Stacks[0].StackStatus"
   ```

------

## 次の手順
<a name="xray-gettingstarted-nextsteps"></a>

次の章「[AWS X-Ray の概念](xray-concepts.md)」で X-Ray の詳細をご覧ください。。

独自のアプリケーションを測定するには、X-Ray SDK for Javaまたは他の X-Ray SDK のいずれかの詳細をご覧ください。
+ **X-Ray SDK for Java** – [AWS X-Ray SDK for Java](xray-sdk-java.md)
+ **X-Ray SDK for Node.js** – [AWS Node.js 用 X-Ray SDK](xray-sdk-nodejs.md)
+ **X-Ray SDK for .NET** – [AWS X-Ray SDK for .NET](xray-sdk-dotnet.md)

X-Ray デーモンをローカルまたは で実行するには AWS、「」を参照してください[AWS X-Ray デーモン](xray-daemon.md)。

サンプルアプリケーションを GitHub に投稿するには、[eb-java-scorekeep](https://github.com/awslabs/eb-java-scorekeep/tree/xray-gettingstarted)を参照してください。