配置 Amazon ECS 以侦听 CloudWatch Events 事件
了解如何设置一个简单的 Lambda 函数,用于侦听任务事件并将其写出到 CloudWatch Logs 日志流。
先决条件:设置测试集群
如果您没有要从中捕获事件的正在运行的集群,请执行 创建 Fargate 启动类型的 Amazon ECS 集群 中的步骤来创建一个集群。在本教程结束时,您可在此集群上运行任务来测试您是否已正确配置 Lambda 函数。
步骤 1:创建 Lambda 函数
在此过程中,您将创建一个简单的 Lambda 函数来充当 Amazon ECS 事件流消息的目标。
通过 https://console.aws.amazon.com/lambda/
打开 AWS Lambda 控制台。 -
选择 Create function (创建函数)。
-
在 Author from scratch 屏幕上,执行以下操作:
-
对于名称,输入一个值。
-
对于 Runtime(运行时),选择 Python 的版本,例如 Python 3.9。
-
对于 Role (角色),选择 Create a new role with basic Lambda permissions (创建具有基本 Lambda 权限的新角色)。
-
-
选择 Create function (创建函数)。
-
在 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 日志流中看到事件详细信息。
-
选择保存。
步骤 2:注册事件规则
接下来,您创建一个 CloudWatch Events 事件规则,该规则可捕获来自 Amazon ECS 集群的任务事件。该规则捕获来自定义该规则的账户中的所有集群的所有事件。任务消息本身包含有关事件源的信息(包括事件源所在的集群),可使用这些信息以编程方式对事件进行筛选和排序。
注意
在使用 AWS Management Console 创建事件规则时,控制台会自动添加所需的 IAM 权限以便向 CloudWatch Events 授予调用 Lambda 函数所需的权限。如果您使用 AWS CLI 创建事件规则,则需要明确授予此权限。有关更多信息,请参阅《Amazon EventBridge User Guide》中的 Events in Amazon EventBridge 和 Amazon EventBridge event patterns。
将事件路由到 Lambda 函数
通过 https://console.aws.amazon.com/cloudwatch/
打开 CloudWatch 控制台。 -
在导航窗格上,依次选择 Events (事件)、Rules (规则)、Create rule (创建规则)。
-
对于 Event Source (事件源),选择 ECS 作为事件源。预设情况下,规则将应用于您的所有 Amazon ECS 组的所有 Amazon ECS 事件。或者,您可以选择特定的事件或特定的 Amazon ECS 组。
-
对于 Targets(目标),选择 Add target(添加目标),对于 Target type(目标类型),选择 Lambda function(Lambda 函数),然后选择您的 Lambda 函数。
-
选择 Configure details(配置详细信息)。
-
对于 Rule definition,键入规则的名称和说明,然后选择 Create rule。
步骤 3:创建任务定义
创建任务定义。
在 https://console.aws.amazon.com/ecs/v2
打开控制台。 -
在导航窗格中,选择 Task Definitions。
-
选择 Create new Task Definition(创建新的任务定义)、Create new revision with JSON(使用 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" }
-
选择创建。
步骤 4:测试您的规则
最后,您创建一个 CloudWatch Events 事件规则,该规则可捕获来自 Amazon ECS 集群的任务事件。该规则捕获来自定义该规则的账户中的所有集群的所有事件。任务消息本身包含有关事件源的信息(包括事件源所在的集群),可使用这些信息以编程方式对事件进行筛选和排序。
测试您的规则
在 https://console.aws.amazon.com/ecs/v2
打开控制台。 -
选择 Task definitions(任务定义)。
-
选择 console-sample-app-static,然后选择 Deploy(部署),Run new task(运行新任务)。
-
对于 Cluster(集群),选择默认值,然后选择 Deploy(部署)。
通过 https://console.aws.amazon.com/cloudwatch/
打开 CloudWatch 控制台。 -
在导航窗格中,选择 Logs (日志),然后选择 Lambda 函数的日志组(例如,/aws/lambda/
my-function
)。 -
选择日志流以查看事件数据。