設定 Amazon ECS 接聽 CloudWatch Events 事件 - Amazon Elastic Container Service

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

設定 Amazon ECS 接聽 CloudWatch Events 事件

了解如何設定簡單的 Lambda 函數,以接聽任務事件並將其寫入 CloudWatch Logs 日誌串流。

先決條件:設定測試叢集

如果您沒有可供擷取事件的執行中叢集,請遵循「為 Fargate 啟動類型建立 Amazon ECS 叢集」中的步驟建立叢集。在此教學課程的最後,您在此叢集上執行任務,以測試您的 Lambda 函數設定是否正確。

步驟 1:建立 Lambda 函數

在此程序中,您要建立一個簡單的 Lambda 函數,做為 Amazon ECS 事件資料流訊息的目標。

  1. 在 https://https://console.aws.amazon.com/lambda/ 開啟 AWS Lambda 主控台。

  2. 選擇 Create function (建立函數)。

  3. Author from scratch (從頭開始撰寫) 畫面上,執行下列操作:

    1. 對於 Name (名稱),輸入值。

    2. 針對 Runtime (執行時間),選擇您的 Python 版本,例如:Python 3.9

    3. 針對 Role (角色),選擇 Create a new role with basic Lambda permissions (建立具備基本 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))

    這是一個簡單的 Python 3.9 函數,此函數列印 Amazon ECS 所傳送的事件。如果一切設定正確,則在此教學課程的最後,您會看到事件詳細資訊出現在與此 Lambda 函數建立關聯的 CloudWatch Logs 日誌串流中。

  6. 選擇儲存

步驟 2:註冊事件規則

接著,您會建立一個 CloudWatch Events 事件規則,擷取來自 Amazon ECS 叢集的任務事件。此規則會擷取來自所定義的帳戶內所有叢集的所有事件。任務訊息本身包含事件來源的資訊 (包含其所在的叢集),從而能以程式設計方式篩選和排序事件。

注意

當您使用 AWS Management Console 建立事件規則時,主控台會自動新增必要的 IAM 許可,以授予 CloudWatch Events 呼叫 Lambda 函數的許可。如果您要使用 建立事件規則 AWS CLI,則需要明確授予此許可。如需詳細資訊,請參閱《Amazon EventBridge 使用者指南》中的 Amazon EventBridge 中的事件和 Amazon EventBridge EventBridge 事件模式

將事件路由至 Lambda 函數
  1. 透過 https://console.aws.amazon.com/cloudwatch/ 開啟 CloudWatch 主控台。

  2. 在導覽窗格上,選擇 Events (事件)Rules (規則)Create rule (建立規則)

  3. 針對 Event Source (事件來源),選擇 ECS 做為事件來源。根據預設,此規則套用至所有 Amazon ECS 群組的 Amazon ECS 事件。或者,您可以選取特定事件或特定 Amazon ECS 群組。

  4. 對於 Targets (目標),選擇 Add target (新增目標),並對於 Target type (目標類型),選擇 Lambda function (Lambda 函數),然後選取您的 Lambda 函數。

  5. 選擇設定詳細資訊

  6. 針對 Rule definition (規則定義),輸入您規則的名稱和描述,然後選擇 Create rule (建立規則)

步驟 3:建立任務定義

建立任務定義。

  1. 開啟主控台,網址為 https://console.aws.amazon.com/ecs/v2

  2. 在導覽窗格中,選擇 Task Definitions (任務定義)。

  3. 選擇 Create new Task Definition (建立新任務定義),以及 Create new revision with JSON (使用 JSON 建立新修訂版)。

  4. 複製下列任務定義範例並貼到方塊中,然後選擇 Save (儲存)

    { "containerDefinitions": [ { "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ], "entryPoint": [ "sh", "-c" ], "essential": true, "image": "public.ecr.aws/docker/library/httpd:2.4", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group" : "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "name": "sample-fargate-app", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ] } ], "cpu": "256", "executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole", "family": "fargate-task-definition", "memory": "512", "networkMode": "awsvpc", "runtimePlatform": { "operatingSystemFamily": "LINUX" }, "requiresCompatibilities": [ "FARGATE" ] }
  5. 選擇建立

步驟 4:測試您的規則

最後,您會建立一個 CloudWatch Events 事件規則,擷取來自 Amazon ECS 叢集的任務事件。此規則會擷取來自所定義的帳戶內所有叢集的所有事件。任務訊息本身包含事件來源的資訊 (包含其所在的叢集),從而能以程式設計方式篩選和排序事件。

測試規則
  1. 開啟主控台,網址為 https://console.aws.amazon.com/ecs/v2

  2. 選擇 Task definitions (任務定義)。

  3. 選擇 console-sample-app-static,然後選擇 Deploy (部署)、Run new task (執行新任務)。

  4. Cluster (叢集) 欄位中選擇預設,然後選擇 Deploy (部署)。

  5. 透過 https://console.aws.amazon.com/cloudwatch/ 開啟 CloudWatch 主控台。

  6. 在導覽窗格上,選擇 Logs (日誌),然後選取 Lambda 函數的日誌群組 (例如,/aws/lambda/my-function)。

  7. 選取日誌串流,以檢視事件資料。