侦听 Amazon ECS CloudWatch Events - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

侦听 Amazon ECS CloudWatch Events

在本教程中,您设置一个简单的 Lambda 函数Amazon Lambda,该函数会侦听 Amazon ECS 任务事件并将这些事件写出到 CloudWatch Logs 日志流。

先决条件:设置测试集群

如果您没有要从中捕获事件的正在运行的集群,请执行 使用控制台为 Fargate 和 External 启动类型创建集群 中的步骤来创建一个集群。在本教程结束时,您可在此集群上运行任务来测试您是否已正确配置 Lambda 函数。

步骤 1:创建 Lambda 函数

在此过程中,您将创建一个简单的 Lambda 函数来充当 Amazon ECS 事件流消息的目标。

  1. 通过 https://console.aws.amazon.com/lambda/ 打开 Amazon Lambda 控制台。

  2. 选择 Create function (创建函数)

  3. Author from scratch 屏幕上,执行以下操作:

    1. 对于名称,输入一个值。

    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. 选择保存

步骤 2:注册事件规则

接下来,您创建一个 CloudWatch Events 事件规则,该规则可捕获来自 Amazon ECS 集群的任务事件。该规则捕获来自定义该规则的账户中的所有集群的所有事件。任务消息本身包含有关事件源的信息(包括事件源所在的集群),可使用这些信息以编程方式对事件进行筛选和排序。

注意

在使用 Amazon Web Services Management Console 创建事件规则时,控制台会自动添加所需的 IAM 权限以便向 CloudWatch Events 授予调用 Lambda 函数所需的权限。如果您使用 Amazon CLI 创建事件规则,则需要明确授予此权限。有关更多信息,请参阅 Amazon CloudWatch Events 用户指南 中的事件和事件模式

将事件路由到 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. 选择 Configure details(配置详细信息)

  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": [ { "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. 选择创建

步骤 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. 选择日志流以查看事件数据。