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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

监听 Amazon ECS CloudWatch 事件

在本教程中,您设置了一个简单的 Amazon Lambda 函数,用于监听 Amazon ECS 任务事件并将其写入 CloudWatch 日志流。

先决条件:设置测试集群

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

步骤 1:创建 Lambda 函数

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

  1. 打开 Amazon Lambda 控制台,网址为 https://console.aws.amazon.com/lambda/

  2. 选择创建函数

  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 日志流中。

  6. 选择保存

步骤 2:注册事件规则

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

注意

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

将事件路由到 Lambda 函数
  1. 打开 CloudWatch 控制台,网址为 https://console.aws.amazon.com/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 事件事件规则,用于捕获来自您的 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. 在导航窗格中,选择 Logs (日志),然后选择 Lambda 函数的日志组(例如,/aws/lambda/my-function)。

  7. 选择日志流以查看事件数据。