

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

# 針對 Amazon ECS 任務停止事件傳送 Amazon Simple Notification Service 提醒
<a name="ecs_cwet2"></a>

設定一項 Amazon EventBridge 事件規則，使其僅擷取因其中一個必要容器終止而導致任務停止執行的任務事件。事件只會將具有特定 `stoppedReason` 屬性的任務事件傳送至指定的 Amazon SNS 主題。

## 先決條件：設定測試叢集
<a name="cwet2_step_1"></a>

 如果您沒有可供擷取事件的執行中叢集，請遵循[使用 AWS Fargate上的 Linux 容器來開始使用主控台](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/getting-started-fargate.html#get-started-fargate-cluster)中的步驟建立叢集。在此教學課程的最後，您會在此叢集上執行任務，以測試您的 Amazon SNS 主題和 EventBridge 規則設定是否正確。

## 先決條件：設定 Amazon SNS 的許可
<a name="cwet2_step_1a"></a>

若要允許 EventBridge 發佈到 Amazon SNS 主題，請使用 aws sns get-topic-attributes 和 aws sns set-topic-attributes 命令。

如需有關如何建立許可的詳細資訊，請參閱《Amazon Simple Notification Service 開發人員指南》**中的 [Amazon SNS 許可](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html#eb-sns-permissions)。

新增下列許可：

```
{
  "Sid": "PublishEventsToMyTopic",
  "Effect": "Allow",
  "Principal": {
     "Service": "events.amazonaws.com"
  },
  "Action": "sns: Publish",
  "Resource": "arn:aws:sns:region:account-id:TaskStoppedAlert",
}
```

## 步驟 1：建立並訂閱 Amazon SNS 主題
<a name="cwet2_step_2"></a>

 在此教學課程中，您會設定 Amazon SNS 主題，做為新事件規則的事件目標。

如需有關如何建立和訂閱 Amazon SNS 主題的資訊，請參閱《Amazon Simple Notification Service 開發人員指南》**中的 [Amazon SNS 入門](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html#step-create-queue)，並使用下表來決定要選取的選項。


| 選項 | Value | 
| --- | --- | 
|  Type  | 標準 | 
| 名稱 |  TaskStoppedAlert  | 
| 通訊協定 | Email | 
| Endpoint |  您目前能存取的電子郵件地址  | 

## 步驟 2：註冊事件規則
<a name="cwet2_step_3"></a>

 接下來，您會登錄事件規則，只擷取具有停止容器之任務的任務停止事件。

如需有關如何建立和訂閱 Amazon SNS 主題的資訊，請參閱《Amazon EventBridge 使用者指南》**中的[在 Amazon EventBridge 中建立規則](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html)，並使用下表來決定要選取的選項。


| 選項 | Value | 
| --- | --- | 
|  規則類型  |  具有事件模式的規則  | 
| 事件來源 | AWS 事件或 EventBridge 合作夥伴事件 | 
| 事件模式 |  自訂模式 (JSON 編輯器)  | 
| 事件模式 |  <pre>{<br />   "source":[<br />      "aws.ecs"<br />   ],<br />   "detail-type":[<br />      "ECS Task State Change"<br />   ],<br />   "detail":{<br />      "lastStatus":[<br />         "STOPPED"<br />      ],<br />      "stoppedReason":[<br />         "Essential container in task exited"<br />      ]<br />   }<br />}</pre> | 
| Target type (目標類型) |  AWS 服務  | 
| Target | SNS 主題 | 
| 主題 |  TaskStoppedAlert (您在步驟 1 中建立的主題)  | 

## 步驟 3：測試您的規則
<a name="cwet2_step_4"></a>

藉由執行在啟動後立即結束的任務，確認規則是否正常運作。如果您的事件規則設定正確，您應該會在幾分鐘內收到一封包含事件文字的電子郵件訊息。如果您有可以滿足規則需求的現有任務定義，請使用它來執行任務。如果沒有，以下步驟將引導您註冊 Fargate 任務定義並執行它。

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在導覽窗格中，選擇 **Task Definitions** (任務定義)。

1. 選擇 **Create new task definitio** (建立新任務定義)、**Create new task definition with JSON** (使用 JSON 建立新的任務定義)。

1. 在 JSON 編輯工具方塊中，編輯您的 JSON 檔案，將下列內容複製至編輯器。

   ```
   {
      "containerDefinitions":[
         {
            "command":[
               "sh",
               "-c",
               "sleep 5"
            ],
            "essential":true,
            "image":"public.ecr.aws/amazonlinux/amazonlinux:latest",
            "name":"test-sleep"
         }
      ],
      "cpu":"256",
      "executionRoleArn":"arn:aws:iam::012345678910:role/ecsTaskExecutionRole",
      "family":"fargate-task-definition",
      "memory":"512",
      "networkMode":"awsvpc",
      "requiresCompatibilities":[
         "FARGATE"
      ]
   }
   ```

1. 選擇**建立**。

**從主控台執行任務**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在**叢集**頁面，選擇您要在先決條件中建立的叢集。

1. 在 **Tasks** (任務) 標籤中，選擇 **Run new task** (執行新任務)。

1. 針對 **Application type** (應用程式類型)，選擇 **Task** (任務)。

1. 在**任務定義**中，選擇 **fargate-task-definition**。

1. 針對 **Desired tasks** (所需任務)，輸入要啟動的任務數目。

1. 選擇**建立**。