教程:ScheduleAmazon Lambda使用 CloudWatch 事件的函数 - Amazon CloudWatch Events
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

教程:ScheduleAmazon Lambda使用 CloudWatch 事件的函数

注意

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

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

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

第 1 步:创建Amazon Lambda函数

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

创建 Lambda 函数

  1. 打开Amazon 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

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

使用 Amazon 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. 使用以下添加权限命令信任 CloudWatch Events 服务委托人 (events.amazonaws.com) 并使用指定的 Amazon 资源名称 (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. 使用以下推出目标命令将您创建的 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/函数名)。

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

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

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

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

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

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