本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 Amazon ECS 以接聽 CloudWatch 事件事件
了解如何設定簡單的 Lambda 函數,以接聽任務事件並將其寫入 a CloudWatch Logs 日誌串流。
先決條件:設定測試叢集
如果您沒有可供擷取事件的執行中叢集,請遵循「為 Fargate 啟動類型建立 Amazon ECS 叢集」中的步驟建立叢集。在此教學課程的最後,您在此叢集上執行任務,以測試您的 Lambda 函數設定是否正確。
步驟 1:建立 Lambda 函數
在此程序中,您會建立簡單的 Lambda 函數,以做為 Amazon ECS 事件串流訊息的目標。
在 https://console.aws.amazon.com/lambda/
開啟 AWS Lambda 主控台。 -
選擇 Create function (建立函數)。
-
在 Author from scratch (從頭開始撰寫) 畫面上,執行下列操作:
-
對於 Name (名稱),輸入值。
-
針對 Runtime (執行時間),選擇您的 Python 版本,例如:Python 3.9。
-
針對 Role (角色),選擇 Create a new role with basic Lambda permissions (建立具備基本 Lambda 許可的新角色)。
-
-
選擇建立函數。
-
在 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 日誌串流中。
-
選擇 Save (儲存)。
步驟 2:註冊事件規則
接下來,您可以建立 a CloudWatch Events 事件規則,擷取來自 Amazon ECS 叢集的任務事件。此規則會擷取來自所定義的帳戶內所有叢集的所有事件。任務訊息本身包含事件來源的資訊 (包含其所在的叢集),從而能以程式設計方式篩選和排序事件。
注意
當您使用 AWS Management Console 建立事件規則時,主控台會自動新增必要的 IAM 許可,以授予呼叫 Lambda 函數的 CloudWatch Events 許可。如果您要使用 建立事件規則 AWS CLI,則需要明確授予此許可。如需詳細資訊,請參閱 Amazon EventBridge 使用者指南中的 AmazonWord EventBridge 和 AmazonWord 事件模式 EventBridge 中的事件。
將事件路由至 Lambda 函數
在 CloudWatch 開啟 https://console.aws.amazon.com/cloudwatch/
主控台。 -
在導覽窗格上,選擇 Events (事件)、Rules (規則)、Create rule (建立規則)。
-
針對事件來源,選擇 ECS 作為事件來源。根據預設,規則會套用至所有 Amazon ECS 群組的所有 Amazon ECS 事件。或者,您可以選取特定事件或特定 Amazon ECS 群組。
-
對於 Targets (目標),選擇 Add target (新增目標),並對於 Target type (目標類型),選擇 Lambda function (Lambda 函數),然後選取您的 Lambda 函數。
-
選擇設定詳細資訊。
-
針對 Rule definition (規則定義),輸入您規則的名稱和描述,然後選擇 Create rule (建立規則)。
步驟 3:建立任務定義
建立任務定義。
在 https://console.aws.amazon.com/ecs/ v2
開啟主控台。 -
在導覽窗格中,選擇 Task Definitions (任務定義)。
-
選擇建立新的任務定義,使用 JSON 建立新的修訂。
-
複製下列任務定義範例並貼到方塊中,然後選擇 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" }
-
選擇 Create (建立)。
步驟 4:測試您的規則
最後,您可以建立 a CloudWatch Events 事件規則,擷取來自 Amazon ECS 叢集的任務事件。此規則會擷取來自所定義的帳戶內所有叢集的所有事件。任務訊息本身包含事件來源的資訊 (包含其所在的叢集),從而能以程式設計方式篩選和排序事件。
測試規則
在 https://console.aws.amazon.com/ecs/ v2
開啟主控台。 -
選擇 Task definitions (任務定義)。
-
選擇 console-sample-app-static,然後選擇部署、執行新任務。
-
在 Cluster (叢集) 欄位中選擇預設,然後選擇 Deploy (部署)。
在 CloudWatch 開啟 https://console.aws.amazon.com/cloudwatch/
主控台。 -
在導覽窗格中,選擇日誌,然後選取 Lambda 函數的日誌群組 (例如 /aws/lambda/
my-function
). -
選取日誌串流,以檢視事件資料。