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

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

設定 Amazon ECS 以接聽 CloudWatch 事件事件

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

先決條件:設定測試叢集

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

步驟 1:建立 Lambda 函數

在此程序中,您會建立簡單的 Lambda 函數,以做為 Amazon ECS 事件串流訊息的目標。

  1. 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. 選擇建立函數

  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. 選擇 Save (儲存)。

步驟 2:註冊事件規則

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

注意

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

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

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

  3. 針對事件來源,選擇 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. 選擇建立新的任務定義使用 JSON 建立新的修訂

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

    { "containerDefinitions": [ { "entryPoint": [ "sh", "-c" ], "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ], "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\"" ], "cpu": 10, "memory": 300, "image": "httpd:2.4", "name": "simple-app" } ], "family": "console-sample-app-static" }
  5. 選擇 Create (建立)。

步驟 4:測試您的規則

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

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

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

  3. 選擇 console-sample-app-static,然後選擇部署執行新任務

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

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

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

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