

# 针对 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)，并使用下表确定选择哪些选项。


| Option | 值 | 
| --- | --- | 
|  Type  | 标准 | 
| 名称 |  TaskStoppedAlert  | 
| 协议 | 电子邮件 | 
| 端点 |  您当前有权访问的电子邮件地址  | 

## 步骤 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)，并使用以下表格确定要选择哪些选项。


| Option | 值 | 
| --- | --- | 
|  规则类型  |  具有事件模式的规则  | 
| 事件源 | 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 主题 | 
| Topic |  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 definition**（创建新的任务定义）、**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. 从**任务**选项卡上，选择**运行新任务**。

1. 对于**应用程序类型**，选择**任务**。

1. 对于**任务定义**，选择 **fargate-task-definition**。

1. 对于 **Desired tasks**（预期任务），请输入要启动的任务数量。

1. 选择**创建**。