

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

# Amazon ECS Express Mode 服務的故障診斷
<a name="express-service-troubleshooting"></a>

本節可協助您識別並解決部署和管理快速模式服務時的常見問題。

## 部署問題
<a name="express-service-deployment-issues"></a>

### 服務卡在 ACTIVE 或 DRAINING 狀態
<a name="express-service-service-stuck-provisioning"></a>

**徵狀：**DescribeServiceRevisions 顯示資源仍在佈建或取消佈建。DescribeServices 顯示部署未穩定

**可能的原因和解決方案：**
+ **IAM 許可不足** - 確認任務執行角色和基礎設施角色具有必要的許可，如其各自的受管政策所示。

  ```
  # Check if the role has the required managed policy
  aws iam list-attached-role-policies --role-name ecsTaskExecutionRole
  ```
+ **映像提取失敗** - 確保容器映像存在且可存取。

  ```
  # Test image pull manually
  docker pull 123456789012.dkr.ecr.us-west-2.amazonaws.com/my-app:latest
  ```
+ **網路連線問題** - 檢查子網路是否具有 AWS 服務的網際網路存取或 Amazon VPC 端點。
+ **資源限制** - 確認您的帳戶有足夠的 Fargate 容量，且尚未達到服務配額。

**診斷步驟：**

1. 使用 DescribeExpressGatewayService 取得 DescribeServiceRevisions 遵循的目前服務修訂，以便 ServiceRevision 取得佈建或取消佈建的狀態

1. 檢查 Amazon ECS 主控台中的服務事件，以取得詳細的錯誤訊息。

1. 檢查容器連接埠是否已正確設定

1. 檢查 Amazon ECS 和 Fargate AWS 的服務配額。

### 任務啟動失敗
<a name="express-service-task-startup-failures"></a>

**症狀：**任務無法啟動或在啟動後立即停止。

**常見原因：**
+ **應用程式錯誤** - 容器應用程式因組態或執行時間錯誤而結束。
+ **運作狀態檢查失敗** - 應用程式不會回應預期連接埠或路徑上的運作狀態檢查。
+ **資源限制** - 應用程式的 CPU 或記憶體配置不足。
+ **缺少環境變數或秘密** - 應用程式無法使用必要的組態。

**解決步驟：**

1. 檢查 CloudWatch Logs 中的應用程式日誌，從 DescribeServiceRevisions 取得日誌群組名稱：

   ```
   aws logs describe-log-streams --log-group-name /ecs/express-service-my-app
   aws logs get-log-events --log-group-name /ecs/express-service-my-app --log-stream-name stream-name
   ```

1. 確認運作狀態檢查路徑傳回 HTTP 200 狀態。

1. 在本機測試容器映像，以確保正確啟動。

1. 視需要檢閱和調整 CPU 和記憶體配置。

## 連線問題
<a name="express-service-connectivity-issues"></a>

### 應用程式無法透過負載平衡器連線
<a name="express-service-application-unreachable"></a>

**症狀：**應用程式 URL 會傳回逾時或連線錯誤。

**故障診斷步驟：**

1. 驗證您的資源已完成佈建

1. 確認任務正在執行且運作狀態良好：

   ```
   aws ecs describe-services --cluster my-cluster --services my-express-service
   ```

1. 檢查 Application Load Balancer 目標群組運作狀態：

   ```
   aws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:region:account:targetgroup/name/id
   ```

1. 確保應用程式正在接聽容器內的正確連接埠。

## 效能問題
<a name="express-service-performance-issues"></a>

### 回應時間緩慢
<a name="express-service-slow-response-times"></a>

**症狀：**應用程式回應比預期慢。

**診斷方法：**

1. 監控 CPU 和記憶體使用率：

   ```
   # Check CloudWatch metrics for the service
   aws cloudwatch get-metric-statistics \
       --namespace AWS/ECS \
       --metric-name CPUUtilization \
       --dimensions Name=ServiceName,Value=my-express-service Name=ClusterName,Value=my-cluster \
       --start-time 2024-01-01T00:00:00Z \
       --end-time 2024-01-01T01:00:00Z \
       --period 300 \
       --statistics Average
   ```

1. 檢閱應用程式日誌是否有錯誤或效能警告。

1. 檢查自動擴展是否適當地回應載入。

1. 分析請求分佈的負載平衡器指標。

**最佳化策略：**
+ 如果資源受限，請增加 CPU 或記憶體配置。
+ 調整自動擴展閾值以提早擴展。
+ 最佳化應用程式程式碼和資料庫查詢。

### 自動擴展無法如預期運作
<a name="express-service-scaling-issues"></a>

**徵狀：**服務在高負載期間不會縱向擴展，或在低負載期間不會縱向擴展。

**故障診斷步驟：**

1. 檢查自動擴展政策及其組態：

   ```
   aws application-autoscaling describe-scaling-policies \
       --service-namespace ecs \
       --resource-id service/my-cluster/my-express-service
   ```

1. 檢閱 CloudWatch 指標，以確保符合擴展觸發條件。

1. 確認服務具有擴展的許可 （檢查 IAM 角色）。

1. 檢查任何擴展活動及其結果。

## 監控和偵錯工具
<a name="express-service-monitoring-debugging"></a>

### 使用 CloudWatch Container Insights
<a name="express-service-cloudwatch-insights"></a>

啟用 Container Insights 進行全面監控：

```
aws ecs put-account-setting --name containerInsights --value enabled
```

Container Insights 提供：
+ CPU、記憶體、磁碟和網路指標
+ 效能監控儀表板
+ 日誌相互關聯和分析
+ 異常偵測