

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

# CloudWatch 警示如何偵測 Amazon ECS 部署失敗
<a name="deployment-alarm-failure"></a>

您可以設定 Amazon ECS，以便在其偵測到指定的 CloudWatch 警示已進入 `ALARM` 狀態時，將部署設定為失敗。

您可以選擇性地設定組態，將失敗的部署復原至上次完成的部署。

下列`create-service` AWS CLI 範例顯示當部署警示與復原選項搭配使用時，如何建立 Linux 服務。

```
aws ecs create-service \
     --service-name MyService \
     --deployment-controller type=ECS \
     --desired-count 3 \
     --deployment-configuration "alarms={alarmNames=[alarm1Name,alarm2Name],enable=true,rollback=true}" \
     --task-definition sample-fargate:1 \
     --launch-type FARGATE \
     --platform-family LINUX \
     --platform-version 1.4.0 \
     --network-configuration "awsvpcConfiguration={subnets=[subnet-12344321],securityGroups=[sg-12344321],assignPublicIp=ENABLED}"
```

當您對服務使用 Amazon CloudWatch 警示方式時，請考量下列事項。
+ 在生產流量轉移後，藍色與綠色服務修訂版同時執行的持續時間。Amazon ECS 會根據與部署相關聯的警示組態來計算此時段。您無法設定此值。
+ `deploymentConfiguration` 請求參數現在包含 `alarms` 資料類型。您可以指定警示名稱、是否使用該方法，以及是否在警示指出部署失敗時初始化復原。如需詳細資訊，請參閱《Amazon Elastic Container Service API 參考》**中的 [CreateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html)。
+ `DescribeServices` 回應可提供部署狀態洞察，`rolloutState` 和 `rolloutStateReason`。當啟動新的部署時，推展狀態從 `IN_PROGRESS` 狀態開始。當服務達到穩定狀態且封裝時間完成時，推展狀態轉換為 `COMPLETED`。若服務無法達到穩定狀態，而警示已進入 `ALARM` 狀態，部署將轉換為 `FAILED` 狀態。處於 `FAILED` 狀態的部署不會啟動任何新任務。
+ 除 Amazon ECS 為已開始和已完成的部署傳送服務部署狀態變更事件以外，Amazon ECS 還會在使用警示的部署失敗時傳送事件。這些事件提供有關部署失敗原因的詳細資訊，或者部署是否因為回復而開始。如需詳細資訊，請參閱[Amazon ECS 服務部署狀態變更事件](ecs_service_deployment_events.md)。
+ 如果新的部署因為先前的部署失敗並已開啟復原而開始，服務部署狀態變更事件的 `reason` 欄位將指示部署因為復原而開始。
+ 如果您使用部署斷路器和 Amazon CloudWatch 警示來偵測失敗，則任何一種方法都可以在符合任一方法的條件後立即初始化部署失敗。當您對初始化部署失敗的方法使用復原選項時，就會發生復原。
+ Amazon CloudWatch 警示僅支援使用滾動更新 (`ECS`) 部署控制器的 Amazon ECS 服務。
+ 您可以使用 Amazon ECS 主控台或 AWS CLI來設定此選項。如需詳細資訊，請參閱《AWS Command Line Interface 參考》**中的 [使用定義的參數建立服務](create-service-console-v2.md#create-custom-service) 和 [create-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-service.html)。
+ 您可能會注意到，部署狀態會維持 `IN_PROGRESS` 較長的時間。其原因是 Amazon ECS 在刪除作用中的部署之前不會變更狀態，並且直到封裝時間過後才會發生這種情況。視警示組態而定，部署需要的時間可能比您不使用警示多幾分鐘 (即使新的主要任務集已縱向擴展，而舊的部署也縮減規模)。如果您使用 CloudFormation 逾時，請考慮增加逾時。如需詳細資訊，請參閱《AWS CloudFormation 使用者指南》**中的[在範本中建立等待條件](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html)。
+ Amazon ECS 呼叫 `DescribeAlarms` 以輪詢警示。對 `DescribeAlarms` 的呼叫會計入與您帳戶相關聯的 CloudWatch 服務配額。如果您有其他呼叫 AWS 的服務`DescribeAlarms`，可能會對 Amazon ECS 輪詢警示造成影響。例如，如果其他服務發出的 `DescribeAlarms` 呼叫數量足以達到配額，則該服務會受到限流，Amazon ECS 也會受到限流，而且無法輪詢警示。如果在限流期間產生警示，Amazon ECS 可能會遺漏警示，且可能不會發生復原。針對部署沒有其他影響。如需 CloudWatch 服務配額的詳細資訊，請參閱《CloudWatch 使用者指南》**中的 [CloudWatch 服務配額](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_limits.htm)。
+ 如果警示在部署開始時處於 `ALARM` 狀態，Amazon ECS 將不會在部署期間監控警示 (Amazon ECS 會忽略警示組態)。此行為可處理您要啟動新部署以修正初始部署失敗的情況。

## 建議的警示
<a name="ecs-deployment-alarms"></a>

我們建議您使用下列警示指標：
+ 如果您使用 Application Load Balancer，請使用 `HTTPCode_ELB_5XX_Count` 和 `HTTPCode_ELB_4XX_Count` Application Load Balancer 指標。這些指標會檢查 HTTP 峰值。如需有關 Application Load Balancer 指標的詳細資訊，請參閱《Application Load Balancer 使用者指南》**中的 [Application Load Balancer 的 CloudWatch 指標](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)。
+ 如果您有現有的應用程式，請使用 `CPUUtilization` 和 `MemoryUtilization` 指標。這些指標會檢查叢集或服務使用的 CPU 和記憶體的百分比。如需詳細資訊，請參閱[考量事項](cloudwatch-metrics.md#enable_cloudwatch)。
+ 如果您在任務中使用 Amazon Simple Queue Service 佇列，請使用 `ApproximateNumberOfMessagesNotVisible` Amazon SQS 指標。此指標會檢查佇列中延遲且無法立即讀取的訊息數量。如需有關 Amazon SQS 指標的詳細資訊，請參閱《Amazon Simple Queue Service 開發人員指南》**中的[適用於 Amazon SQS 的 CloudWatch 指標](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-available-cloudwatch-metrics.html)。

## 封裝時間
<a name="deployment-bake-time"></a>

為服務部署使用復原選項時，Amazon ECS 會在目標服務修訂版部署完成後，多等待一段時間，然後才傳送 CloudWatch 警示。這段時間稱為封裝時間。此時間將於下列情況之後開始：
+ 目標服務修訂版的所有任務都在執行中，且運作狀態良好
+ 來源服務修訂版規模縮減至 0%

預設的封裝時間少於 5 分鐘。封裝時間過期後，服務部署會標示為完成。

您可以為滾動部署設定封裝時間。使用 CloudWatch 警示來偵測失敗時，如果變更了封裝時間，之後卻希望使用 Amazon ECS 預設值，則必須手動設定封裝時間。