

# 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)」を参照し、さらに、次の表から選択するオプションを決定します。


| オプション | 値 | 
| --- | --- | 
|  タイプ  | 標準 | 
| 名前 |  TaskStoppedAlert  | 
| プロトコル | E メール | 
| Endpoint |  現在アクセスできる E メールアドレス  | 

## ステップ 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)」を参照し、次の表を使用して、選択するオプションを決定します。


| オプション | 値 | 
| --- | --- | 
|  ルールタイプ  |  イベントパターンを持つルール  | 
| イベントソース | 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> | 
| 対象タイプ |  AWS サービス  | 
| ターゲット | 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. ナビゲーションペインで、**タスクの定義** を選択します。

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. **Tasks**タブで、**Run new task**を選択します。

1. **Application type(アプリケーションの種類)**で、**Task(タスク)**を選択します。

1. **[タスク定義]** で、**[fargate-task-definition]** を選択します。

1. **[Desired tasks]** (必要なタスク) で、起動するタスクの数を入力します。

1. **[作成]** を選択します。