

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Scorekeep 範例應用程式入門
<a name="scorekeep-tutorial"></a>

**注意**  
X-Ray 開發套件/協助程式維護通知 – 在 2026 年 2 月 25 日， AWS X-Ray SDKs/協助程式將進入維護模式，其中 AWS 將限制 X-Ray 開發套件和協助程式版本，以僅解決安全問題。如需支援時間軸的詳細資訊，請參閱 [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 Web API 和 適用於 Java 的 AWS SDK ，將資料保留至 Amazon DynamoDB。應用程式中的 servlet 篩選條件會檢測應用程式提供的所有傳入請求，而 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](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 2.7.9 版或更新版本，並使用上一個步驟中的使用者[設定 CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)。 AWS CLI 使用 使用者設定 時，請確定已設定 區域。如果未設定區域，您將需要附加`--region AWS-REGION`到每個 CLI 命令。

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. 在 **Specify template (指定範本)** 區段中，選擇 **Upload a template file (上傳範本檔案)**。

1. 選取**選擇檔案**，導覽至複製 git 儲存庫時建立的`xray-scorekeep/cloudformation`資料夾，然後選擇`cf-resources.yaml`檔案。

1. 選擇 **Next** (下一步) 繼續。

1. 在**堆疊名稱**文字方塊`scorekeep`中輸入 ，然後選擇頁面底部的**下一步**以繼續。請注意，本教學課程的其餘部分假設堆疊名為 `scorekeep`。

1. 捲動至**設定堆疊選項**頁面底部，然後選擇**下一步**以繼續。

1. 捲動至**檢閱**頁面底部，選擇確認 CloudFormation 可以使用自訂名稱建立 IAM 資源的核取方塊，然後選擇**建立堆疊**。

1. 現在正在建立 CloudFormation 堆疊。堆疊狀態會`CREATE_IN_PROGRESS`維持大約五分鐘，然後再變更為 `CREATE_COMPLETE`。狀態會定期重新整理，或者您可以重新整理頁面。

------
#### [ 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`，這大約需要五分鐘。使用下列 AWS CLI 命令來檢查狀態：

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

------

## 產生追蹤資料
<a name="xray-gettingstarted-generate-traces"></a>

範例應用程式包含前端 Web 應用程式。使用 Web 應用程式產生 API 的流量，並將追蹤資料傳送至 X-Ray。首先，使用 AWS 管理主控台 或 擷取 Web 應用程式 URL AWS CLI：

------
#### [ AWS 管理主控台 ]

**使用 尋找應用程式 URL AWS 管理主控台**

1. 開啟 [ CloudFormation 主控台](https://console.aws.amazon.com/cloudformation/)

1. 從清單中選擇`scorekeep`堆疊。

1. 選擇`scorekeep`堆疊頁面上**的輸出**索引標籤，然後選擇 `LoadBalancerUrl` URL 連結以開啟 Web 應用程式。

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

**使用 尋找應用程式 URL AWS CLI**

1. 使用下列命令來顯示 Web 應用程式的 URL：

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

1. 複製此 URL 並在瀏覽器中開啟 ，以顯示 Scorekeep Web 應用程式。

------

**使用 Web 應用程式產生追蹤資料**

1. 選擇 **Create (建立)** 來產生使用者及工作階段。

1. 輸入 **game name (遊戲名稱)**、將 **Rules (規則)** 設為 **Tic Tac Toe (井字遊戲)**，然後選擇 **Create (建立)**。

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 從應用程式傳送的追蹤資料產生的服務圖表。請務必視需要調整追蹤映射的期間，以確保它在您第一次啟動 Web 應用程式後會顯示所有追蹤。  
![\[X-Ray 追蹤映射期間\]](http://docs.aws.amazon.com/zh_tw/xray/latest/devguide/images/xray-console-time-period-15-minutes.png)

追蹤映射會顯示 Web 應用程式用戶端、在 Amazon ECS 中執行的 API，以及應用程式使用的每個 DynamoDB 資料表。每個向應用程式發出的請求都會在命中 API 時受到追蹤、產生向下游服務發出的請求並完成，其數量上限為可設定的每秒請求數量上限。

您可以在服務圖表中選擇任何節點來檢視產生流量至該節點的請求追蹤。目前，Amazon SNS 節點為黃色。向下切入來了解原因。

![\[X-Ray 主控台追蹤映射頁面\]](http://docs.aws.amazon.com/zh_tw/xray/latest/devguide/images/scorekeep-gettingstarted-servicemap-before-ECS.png)


**尋找錯誤原因**

1. 選擇名為 **SNS** 的節點。節點詳細資訊面板隨即顯示。

1. 選擇 **View traces (檢視追蹤)** 以存取 **Trace overview (追蹤概觀)** 畫面。

1. 從 **Trace list (追蹤清單)** 中選擇追蹤。此追蹤不具有方法或 URL，因為它是在啟動期間，而非回應傳入請求時記錄。  
![\[從 Trace list (追蹤清單) 選擇追蹤\]](http://docs.aws.amazon.com/zh_tw/xray/latest/devguide/images/scorekeep-gettingstarted-tracelist-sns.png)

1. 選擇頁面底部的 Amazon SNS 區段中的錯誤狀態圖示，以開啟 SNS 子區段的**例外**狀況頁面。  
![\[選擇錯誤狀態圖示以開啟 Amazon SNS 子區段的例外狀況頁面\]](http://docs.aws.amazon.com/zh_tw/xray/latest/devguide/images/scorekeep-gettingstarted-timeline-sns-ecs.png)

1. X-Ray SDK 會自動擷取經 AWS 檢測的 SDK 用戶端擲回的例外狀況，並記錄堆疊追蹤。  
![\[顯示擷取到的異常及記錄堆疊追蹤的 Exceptions (異常) 標籤\]](http://docs.aws.amazon.com/zh_tw/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 從應用程式傳送的追蹤資料產生的服務圖表。請務必視需要調整追蹤映射的期間，以確保它在您第一次啟動 Web 應用程式後會顯示所有追蹤。  
![\[CloudWatch 追蹤映射期間\]](http://docs.aws.amazon.com/zh_tw/xray/latest/devguide/images/cw-console-service-map-time-period-15-minutes.png)

追蹤映射會顯示 Web 應用程式用戶端、在 Amazon EC2 中執行的 API，以及應用程式使用的每個 DynamoDB 資料表。每個向應用程式發出的請求都會在命中 API 時受到追蹤、產生向下游服務發出的請求並完成，其數量上限為可設定的每秒請求數量上限。

您可以在服務圖表中選擇任何節點來檢視產生流量至該節點的請求追蹤。目前，Amazon SNS 節點為橘色。向下切入來了解原因。

![\[X-Ray 主控台追蹤映射頁面\]](http://docs.aws.amazon.com/zh_tw/xray/latest/devguide/images/scorekeep-gettingstarted-cw-servicemap-before-ECS.png)


**尋找錯誤原因**

1. 選擇名為 **SNS** 的節點。SNS 節點詳細資訊面板會顯示在地圖下方。

1. 選擇**檢視追蹤**以存取**追蹤**頁面。

1. 新增頁面底部，從追蹤清單中選擇**追蹤**。此追蹤不具有方法或 URL，因為它是在啟動期間，而非回應傳入請求時記錄。  
![\[從 Trace list (追蹤清單) 選擇追蹤\]](http://docs.aws.amazon.com/zh_tw/xray/latest/devguide/images/scorekeep-gettingstarted-cw-tracelist-sns-ecs.png)

1. 選擇區段時間軸底部的 Amazon SNS 子區段，然後選擇 SNS 子區段的**例外狀況**索引標籤，以檢視例外狀況詳細資訊。  
![\[檢視 Amazon SNS 子區段的例外狀況索引標籤\]](http://docs.aws.amazon.com/zh_tw/xray/latest/devguide/images/scorekeep-gettingstarted-cw-timeline-sns-ecs.png)

------

原因指出在 `WebConfig` 類別中對 `createSubscription` 發出的呼叫內所提供的電子郵件地址無效。在下一節中，我們將修正此問題。

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

Scorekeep 使用 Amazon SNS 在使用者完成遊戲時傳送通知。當應用程式啟動時，它會嘗試為 CloudFormation 堆疊參數中定義的電子郵件地址建立訂閱。該呼叫目前失敗。設定通知電子郵件以啟用通知，並解決追蹤映射中反白顯示的失敗。

------
#### [ AWS 管理主控台 ]

**使用 設定 Amazon SNS 通知 AWS 管理主控台**

1. 開啟 [ CloudFormation 主控台](https://console.aws.amazon.com/cloudformation/)

1. 選擇清單中`scorekeep`堆疊名稱旁的選項按鈕，然後選擇**更新**。

1. 確定已選擇**使用目前的範本**，然後在**更新堆疊**頁面上按一下**下一步**。

1. 在清單中尋找**電子郵件**參數，並以有效的電子郵件地址取代預設值。  
![\[更新電子郵件組態\]](http://docs.aws.amazon.com/zh_tw/xray/latest/devguide/images/scorekeep-cf-email-update.png)

1. 向下捲動到頁面底部並選擇 **Next** (下一步)。

1. 捲動至**檢閱**頁面底部，選擇確認 CloudFormation 可以使用自訂名稱建立 IAM 資源的核取方塊，然後選擇**更新堆疊**。

1. CloudFormation 堆疊現在正在更新。堆疊狀態會`UPDATE_IN_PROGRESS`維持大約五分鐘，然後再變更為 `UPDATE_COMPLETE`。狀態會定期重新整理，或者您可以重新整理頁面。

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

**使用 設定 Amazon SNS 通知 AWS CLI**

1. 導覽至您先前建立的`xray-scorekeep/cloudformation/`資料夾，然後在文字編輯器中開啟 `cf-resources.yaml` 檔案。

1. 在**電子郵件**參數中尋找`Default`值，並將其從 *UPDATE\$1ME* 變更為有效的電子郵件地址。

   ```
   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 主題訂閱。檢查您的電子郵件以確認訂閱，在您完成遊戲時查看更新。開啟追蹤映射，以確認對 SNS 的呼叫不再失敗。

## 探索範例應用程式
<a name="xray-gettingstarted-sample"></a>

範例應用程式是 Java 中的 HTTP Web API，設定為使用適用於 Java 的 X-Ray 開發套件。當您使用 CloudFormation 範本部署應用程式時，它會建立在 ECS 上執行 Scorekeep 所需的 DynamoDB 資料表、Amazon ECS 叢集和其他服務。ECS 的任務定義檔案是透過 CloudFormation 建立。此檔案定義 ECS 叢集中每個任務使用的容器映像。這些影像是從官方 X-Ray 公有 ECR 取得。scorekeep API 容器映像使用 Gradle 編譯 API。Scorekeep 前端容器的容器映像會使用 nginx 代理伺服器為前端提供服務。此伺服器會將請求路由至以 /api 開頭的路徑至 API。

為了檢測傳入 HTTP 請求，應用程式會新增軟體開發套件提供的 `TracingFilter`。

**Example src/main/java/scorekeep/WebConfig.java - servlet 篩選條件**  

```
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、方法、回應狀態、開始時間及結束時間。

應用程式也會使用 對 DynamoDB 進行下游呼叫 適用於 Java 的 AWS SDK。為了檢測這些呼叫，應用程式只會將 AWS SDK 相關的子模組做為相依性，而適用於 Java 的 X-Ray 開發套件會自動檢測所有 AWS SDK 用戶端。

應用程式使用 `Docker`建置執行個體上的原始程式碼，並使用 `Gradle Docker Image`和 `Scorekeep API Dockerfile` 檔案來執行 Gradle 在其 產生的可執行 JAR`ENTRYPOINT`。

**Example 使用 Docker 透過 Gradle Docker Image 建置**  

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

**Example Dockerfile ENTRYPOINT**  

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

`build.gradle` 檔案會在編譯期間，透過將其宣告為依存項目，來從 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
      ...
```

適用於 Java 的 X-Ray 開發套件提供名為 的類別`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` 的檔案載入抽樣規則。抽樣規則會判斷軟體開發套件記錄傳入請求區段的速率。

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

抽樣規則檔案會定義四個自訂抽樣規則及預設規則。針對每個傳入請求，軟體開發套件會依照定義規則的順序評估自訂規則。軟體開發套件會套用第一個與請求方法、路徑及服務名稱相符的規則。針對 Scorekeep，第一個規則會透過以 1.0 的速率每秒套用一個請求的單一固定目標，或是在滿足固定目標之後套用 100% 的請求，來追補所有 POST 請求 (資源建立呼叫)。

其他三個自訂規則會在沒有指向工作階段、遊戲和狀態讀取 (GET 請求) 固定目標的情況下套用 5% 的速率 這會將前端為了確保內容處於最新狀態，每幾秒鐘自動發出定期呼叫的追蹤數量降至最低。針對所有其他請求，檔案會定義每秒單一請求的預設速率及 10% 的速率。

範例應用程式也會示範如何使用進階功能 (例如手動軟體開發套件用戶端檢測、建立額外子區段及傳出 HTTP 呼叫)。如需詳細資訊，請參閱[AWS X-Ray 範例應用程式](xray-scorekeep.md)。

## 選用：最低權限政策
<a name="xray-gettingstarted-security"></a>

 Scorekeep ECS 容器使用完整存取政策存取資源，例如 `AmazonSNSFullAccess`和 `AmazonDynamoDBFullAccess`。使用完整存取政策不是生產應用程式的最佳實務。下列範例會更新 DynamoDB IAM 政策，以改善應用程式的安全性。若要進一步了解 IAM 政策中的安全最佳實務，請參閱 [AWS X-Ray 的身分和存取管理](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 Resource Name (ARN)。複製這個值。

1. 將 ARN 插入下列 IAM 政策，將 `AWS_REGION`和 `AWS_ACCOUNT_ID`值取代為您的特定區域和帳戶 ID。此新政策僅允許指定的動作，而非允許任何動作`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 應用程式資源：

**注意**  
如果您使用本教學課程的上一節建立並連接自訂政策，您必須先從 移除政策，`scorekeepRole`才能刪除 CloudFormation 堆疊。

------
#### [ 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 堆疊不再存在，這大約需要五分鐘的時間。使用下列 AWS CLI 命令來檢查狀態：

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

------

## 後續步驟
<a name="xray-gettingstarted-nextsteps"></a>

在下一章 中進一步了解 X-Ray[AWS X-Ray 概念](xray-concepts.md)。

若要檢測您自己的應用程式，請進一步了解適用於 Java 的 X-Ray 開發套件或其他其中一個 X-Ray SDKs：
+ **適用於 Java 的 X-Ray 開發套件** – [AWS X-Ray 適用於 Java 的 SDK](xray-sdk-java.md)
+ **適用於 Node.js 的 X-Ray 開發套件** – [AWS 適用於 Node.js 的 X-Ray 開發套件](xray-sdk-nodejs.md)
+ **適用於 .NET 的 X-Ray 開發套件** – [AWS X-Ray 適用於 .NET 的 SDK](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)。