教程:使用 CloudWatch Events 计划 AWS Lambda 函数 - Amazon CloudWatch Events

教程:使用 CloudWatch Events 计划 AWS Lambda 函数

注意

Amazon EventBridge 是管理事件的首选方式。CloudWatch Events 和 EventBridge 是相同的底层服务和 API,但 EventBridge 提供了更多功能。您在 CloudWatch 或 EventBridge 中所作的更改将显示在每个控制台中。有关更多信息,请参阅 Amazon EventBridge

您可以设置规则以按计划运行 AWS Lambda 函数。本教程演示如何使用 AWS Management Console 或 AWS CLI 创建规则。如果您想使用 AWS CLI 但尚未安装,请参阅 AWS Command Line Interface 用户指南

CloudWatch Events 不在计划表达式中提供第二级精度。使用 cron 表达式的最高解析精度是一分钟。由于 CloudWatch Events 和目标服务的分布式特性,计划规则触发时间与目标服务实际执行目标资源的时间之间的延迟可能有几秒钟。您的计划规则会在这一分钟内触发,但不会精确到在第 0 秒时触发。

步骤 1:创建 AWS Lambda 函数

创建 Lambda 函数来记录计划的事件。在创建规则时指定此函数。

创建 Lambda 函数
  1. 打开 AWS Lambda 控制台,地址:https://console.aws.amazon.com/lambda/

  2. 如果您是首次接触 Lambda,您将看到欢迎页面。选择 Get Started Now。否则,请选择 Create a Lambda function (创建 Lambda 函数)

  3. 选择蓝图页面上,为筛选条件键入 hello,然后选择 hello-world 蓝图。

  4. Configure triggers 页面上,选择 Next

  5. Configure function 页面上,执行以下操作:

    1. 键入 Lambda 函数的名称和说明。例如,将函数命名为“LogScheduledEvent”。

    2. 编辑 Lambda 函数的示例代码。例如:

      'use strict'; exports.handler = (event, context, callback) => { console.log('LogScheduledEvent'); console.log('Received event:', JSON.stringify(event, null, 2)); callback(null, 'Finished'); };
    3. 对于角色,选择选择现有角色。对于现有角色,选择您的基本执行角色。否则,创建新的基本执行角色。

    4. 选择 Next (下一步)

  6. Review 页面上,选择 Create function

步骤 2:创建规则

创建按计划运行 Lambda 函数的规则。

使用控制台创建规则
  1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 在导航窗格中,选择 EventsCreate rule

  3. 对于 Event Source,执行以下操作:

    1. 选择 Schedule

    2. 选择 Fixed rate of 并指定计划间隔 (例如,5 分钟)。

  4. 对于目标,依次选择添加目标Lambda 函数

  5. 对于函数,选择您创建的 Lambda 函数。

  6. 选择 Configure details

  7. 对于 Rule definition,键入规则的名称和描述。

  8. 选择 Create rule (创建规则)

如果您愿意,可以使用 AWS CLI 创建规则。首先,您必须向该规则授予调用您的 Lambda 函数的权限。然后,您可以创建规则并将该 Lambda 函数添加为目标。

使用 AWS CLI 创建规则
  1. 使用以下 put-rule 命令以创建按计划触发其自身的规则:

    aws events put-rule \ --name my-scheduled-rule \ --schedule-expression 'rate(5 minutes)'

    当此规则触发时,它会生成一个事件,该事件可作为此规则的目标的输入。以下是示例事件:

    { "version": "0", "id": "53dc4d37-cffa-4f76-80c9-8b7d4a4d2eaa", "detail-type": "Scheduled Event", "source": "aws.events", "account": "123456789012", "time": "2015-10-08T16:53:06Z", "region": "us-east-1", "resources": [ "arn:aws:events:us-east-1:123456789012:rule/my-scheduled-rule" ], "detail": {} }
  2. 使用以下 add-permission 命令信任 CloudWatch Events 服务委托人 (events.amazonaws.com) 并使用指定的 Amazon Resource Name (ARN) 设置规则的权限范围:

    aws lambda add-permission \ --function-name LogScheduledEvent \ --statement-id my-scheduled-event \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/my-scheduled-rule
  3. 使用以下 put-targets 命令将您创建的 Lambda 函数添加到该规则,使其每 5 分钟运行一次:

    aws events put-targets --rule my-scheduled-rule --targets file://targets.json

    创建文件 targets.json 并输入以下内容:

    [ { "Id": "1", "Arn": "arn:aws:lambda:us-east-1:123456789012:function:LogScheduledEvent" } ]

步骤 3:验证规则

完成步骤 2 后至少五分钟,您可以验证是否已调用 Lambda 函数。

测试您的规则
  1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 在导航窗格中,依次选择 EventsRules,再选择所创建规则的名称,然后选择 Show metrics for the rule

  3. 要查看 Lambda 函数的输出,请执行以下操作:

    1. 在导航窗格中,选择 Logs

    2. 选择您的 Lambda 函数 (/aws/lambda/function-name) 的日志组的名称。

    3. 选择日志流的名称,以查看您启动的实例的函数提供的数据。

  4. (可选) 完成后,可禁用该规则。

    1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

    2. 在导航窗格中,依次选择 EventsRules

    3. 选择规则,然后依次选择操作禁用

    4. 当系统提示确认时,选择 Disable