Amazon ECS タスク停止イベントに関する Amazon Simple Notification Service アラートの送信 - Amazon Elastic Container Service

Amazon ECS タスク停止イベントに関する Amazon Simple Notification Service アラートの送信

重要なコンテナのいずれかが終了したことにより、タスクの実行が停止したタスクイベントのみをキャプチャする Amazon EventBridge イベントルールを設定します。イベントは、特定の stoppedReason プロパティを持つタスクイベントのみが、指定された Amazon SNS トピックに送信します。

前提条件: テストクラスターを設定する

イベントをキャプチャする実行中のクラスターがなければ、「AWS Fargate の Linux コンテナによるコンソールの使用開始」のステップに従ってクラスターを作成します。このチュートリアルの最後に、このクラスターでタスクを実行し、 Amazon SNS トピックと EventBridge ルールが正しく設定されていることをテストします。

前提条件: Amazon SNS 用のアクセス許可の設定

EventBridge による Amazon SNS トピックへの公開を許可するには、aws sns get-topic-attributes コマンドと aws sns set-topic-attributes コマンドを使用します。

アクセス許可を追加する方法については、「Amazon Simple Notification Service デベロッパーガイド」の「Amazon SNS のアクセス許可」を参照してください。

以下のアクセス許可を追加します。

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

ステップ 1: Amazon SNS トピックを作成してサブスクライブする

このチュートリアルでは、新しいイベントルールのイベントターゲットとして使用する Amazon SNS トピックを設定します。

Amazon SNS トピックの作成とサブスクライブの方法については、「Amazon Simple Notification Service デベロッパーガイド」の「Amazon SNS の開始方法」を参照し、さらに、次の表から選択するオプションを決定します。

オプション

タイプ

標準
名前

TaskStoppedAlert

プロトコル Email(メール)
エンドポイント

現在アクセスできる E メールアドレス

ステップ 2: イベントルールを登録する

次に、コンテナが停止されたタスクについてのみ、タスク停止時のイベントをキャプチャするイベントルールを登録します。

Amazon SNS トピックを作成してサブスクライブする方法については、Amazon EventBridge デベロッパーガイドの「Amazon EventBridge でルールを作成する」を参照し、次の表を使用して、選択するオプションを決定します。

オプション

[Rule type] (ルールタイプ)

イベントパターンを持つルール

[イベントソース] AWS イベントまたは EventBridge パートナーイベント
イベントパターン

カスタムパターン (JSON エディター)

イベントパターン
{ "source":[ "aws.ecs" ], "detail-type":[ "ECS Task State Change" ], "detail":{ "lastStatus":[ "STOPPED" ], "stoppedReason":[ "Essential container in task exited" ] } }
対象タイプ

AWS サービス

Target SNS トピック
トピック

TaskStoppedAlert (ステップ 1 で作成したトピック)

ステップ 3: ルールをテストする

開始直後に終了するタスクを実行して、ルールが機能していることを確認します。イベントルールが正しく設定されていれば、数分以内にイベントテキストが記載されたメールメッセージが届きます。ルールの要件を満たす既存のタスク定義がある場合は、それを使用してタスクを実行します。そうでない場合は、次の手順に従って Fargate タスク定義を登録し、その定義を使用してタスクを実行します。

  1. コンソール (https://console.aws.amazon.com/ecs/v2) を開きます。

  2. ナビゲーションペインで、タスクの定義 を選択します。

  3. [Create new task definition] (新しいタスク定義の作成)、[Create new task definition with JSON] (JSON で新しいタスク定義を作成) の順に選択します。

  4. JSON エディタボックスで、JSON ファイルを編集し、以下をエディタにコピーします。

    { "containerDefinitions":[ { "command":[ "sh", "-c", "sleep 5" ], "essential":true, "image":"amazonlinux:2", "name":"test-sleep" } ], "cpu":"256", "executionRoleArn":"arn:aws:iam::012345678910:role/ecsTaskExecutionRole", "family":"fargate-task-definition", "memory":"512", "networkMode":"awsvpc", "requiresCompatibilities":[ "FARGATE" ] }
  5. [Create] (作成) を選択します。

コンソールからタスクを実行するには
  1. コンソール (https://console.aws.amazon.com/ecs/v2) を開きます。

  2. [クラスター] ページで、前提条件の下で作成したクラスターを選択します。

  3. Tasksタブで、Run new taskを選択します。

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

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

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

  7. [Create] (作成) を選択します。