Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

チュートリアル: Amazon ECS CloudWatch イベント のリッスン

このチュートリアルでは、Amazon ECS タスクイベントをリッスンして CloudWatch Logs ログストリームに書き込むシンプルな AWS Lambda 関数を設定します。

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

イベントをキャプチャする実行中のクラスターがなければ、Fargate を使用した Amazon ECS の使用開始 のステップに従ってクラスターを作成します。このチュートリアルの最後に、このクラスターでタスクを実行して Lambda 関数が正しく設定されていることをテストします。

ステップ 1: Lambda 関数を作成する

この手順では、Amazon ECS イベントストリームメッセージのターゲットとなるシンプルな Lambda 関数を作成します。

  1. https://console.aws.amazon.com/lambda/ にある AWS Lambda コンソールを開きます。

  2. [Create a function] を選択します。

  3. [Author from scratch] 画面で、次の操作を行います。

    1. 関数の [Name] を選択します。

    2. [Runtime] で [Python 2.7] を選択します。

    3. [Role] で、[Create a custom role] を選択します。別のウィンドウが表示され、Lambda 関数の新しいロールを作成できます。

    4. [AWS Lambda requires access to your resources (AWS Lambda でリソースへのアクセスを要求する)] 画面で、デフォルトを採用して [許可] を選択します。

  4. [Create function] を選択します。

  5. [Function code] セクションで、以下の例に一致するようにサンプルコードを編集します。

    import json def lambda_handler(event, context): if event["source"] != "aws.ecs": raise ValueError("Function only supports input from events with a source type of: aws.ecs") print('Here is the event:') print(json.dumps(event))

    これは、Amazon ECS から送信されたイベントを印刷するシンプルな Python 2.7 関数です。すべてが正しく設定されると、このチュートリアルの最後に、この Lambda 関数に関連付けられている CloudWatch Logs ログストリームにイベントの詳細が表示されます。

  6. [関数コード] セクションで、[ハンドラ] の値を編集して [eventstream-handler.lambda_handler] にします。

  7. [Save] を選択します。

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

次に、Amazon ECS クラスターから送信されるタスクイベントをキャプチャする CloudWatch イベント イベントルールを作成します。このルールでは、それが定義されているアカウント内のすべてのクラスターから送信されるすべてのイベントがキャプチャされます。タスクメッセージ自体内に、イベントソースに関する情報 (イベントソースがあるクラスターの情報など) が含まれており、この情報を使用してプログラムでイベントをフィルタしてソートできます。

注記

AWS マネジメントコンソール使用してイベントルールを作成すると、CloudWatch イベント から Lambda 関数を呼び出す権限を付与するために必要な IAM アクセス権限がコンソールによって自動的に追加されます。AWS CLI を使用してイベントルールを作成する場合は、この権限を明示的に付与する必要があります。詳細については、Amazon CloudWatch Events ユーザーガイドの「イベントとイベントパターン」を参照してください。

Lambda 関数にイベントをルーティングするには

  1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。

  2. ナビゲーションペインで、[Events]、[Create rule] の順に選択します。

  3. [Event Source] で、イベントソースとして [ECS] を選択します。デフォルトでは、すべての Amazon ECS グループのすべての Amazon ECS イベントにルールが適用されます。または、特定のイベントや特定の Amazon ECS グループを選択することもできます。

  4. [Targets] で [Add target] を選択し、[Target type] で [Lambda function] を選択して、Lambda 関数を選択します。

  5. [Configure details] を選択します。

  6. [Rule definition] で、ルールの名前と説明を入力し、[Create rule] を選択します。

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

最後に、Amazon ECS クラスターから送信されるタスクイベントをキャプチャする CloudWatch イベント イベントルールを作成します。このルールでは、それが定義されているアカウント内のすべてのクラスターから送信されるすべてのイベントがキャプチャされます。タスクメッセージ自体内に、イベントソースに関する情報 (イベントソースがあるクラスターの情報など) が含まれており、この情報を使用してプログラムでイベントをフィルタしてソートできます。

ルールをテストするには

  1. https://console.aws.amazon.com/ecs/ にある Amazon ECS コンソールを開きます。

  2. [Clusters]、[default] の順に選択します。

  3. [Cluster : default] 画面で、[Tasks]、[Run new Task] の順に選択します。

  4. [Task Definition] で、最新バージョンの [console-sample-app-static] を選択し、[Run Task] を選択します。

  5. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。

  6. ナビゲーションペインで、[Logs] を選択して Lambda 関数 (/aws/lambda/my-function など) のロググループを選択します。

  7. イベントデータを表示するログストリームを選択します。