Amazon CloudWatch 事件
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

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

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

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

步骤 1:创建 AWS Lambda 函数

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

创建 Lambda 函数

  1. 通过以下网址打开 AWS Lambda 控制台:https://console.amazonaws.cn/lambda/

  2. 如果您是首次使用 Lambda,则会看到一个欢迎页面;请选择 Get Started Now;否则,请选择 Create a Lambda function

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

  4. Configure triggers 页面上,选择 Next

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

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

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

      Copy
      'use strict'; exports.handler = (event, context, callback) => { console.log('LogScheduledEvent'); console.log('Received event:', JSON.stringify(event, null, 2)); callback(null, 'Finished'); };
    3. 对于 Role,选择 Choose an existing role,然后从 Existing role 中选择您的基本执行角色。否则,创建新的基本执行角色。

    4. 选择 Next

  6. Review 页面上,选择 Create function

步骤 2:创建规则

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

使用控制台创建规则

  1. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

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

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

    1. 选择 Schedule

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

  4. 对于 Targets,选择 Add target,然后选择 Lambda function

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

  6. 选择 Configure details

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

  8. 选择 Create rule

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

使用 AWS CLI 创建规则

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

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

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

    Copy
    { "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 资源名称 (ARN) 设置规则的权限范围:

    Copy
    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 分钟运行一次:

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

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

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

步骤 3:测试规则

您可以验证您的 Lambda 函数是否已调用。

测试您的规则

  1. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

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

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

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

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

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

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

    1. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

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

    3. 选择规则,然后依次选择 ActionsDisable

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