View a markdown version of this page

使用 AWS Lambda 处理 EventBridge 事件 - Amazon EBS

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

使用 AWS Lambda 处理 EventBridge 事件

您可以使用亚马逊 EBS 和亚马逊 EventBridge 来自动化您的数据备份工作流程。这需要您创建 IAM 策略、处理事件的 AWS Lambda 函数以及匹配传入事件并将其路由到 Lambda 函数的 EventBridge规则。

以下过程使用 createSnapshot 事件自动将已完成的快照复制到其他区域,以用于灾难恢复。

将已完成的快照复制到其他区域
  1. 创建 IAM 策略,例如以下示例中所示的策略,以提供使用CopySnapshot操作和写入 EventBridge 日志的权限。将策略分配给将处理该 EventBridge 事件的用户。

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "ec2:CopySnapshot" ], "Resource": "*" } ] }
  2. 在 Lambda 中定义一个可从 EventBridge 控制台访问的函数。以下写入的示例 Lambda 函数由 Amazon EBS 发出匹配createSnapshot事件(表示快照已完成) EventBridge 时调用。 Node.js该函数被调用后,它会将快照从 us-east-2 复制到 us-east-1

    // Sample Lambda function to copy an EBS snapshot to a different Region var AWS = require('aws-sdk'); var ec2 = new AWS.EC2(); // define variables var destinationRegion = 'us-east-1'; var sourceRegion = 'us-east-2'; console.log ('Loading function'); //main function exports.handler = (event, context, callback) => { // Get the EBS snapshot ID from the event details var snapshotArn = event.detail.snapshot_id.split('/'); const snapshotId = snapshotArn[1]; const description = `Snapshot copy from ${snapshotId} in ${sourceRegion}.`; console.log ("snapshotId:", snapshotId); // Load EC2 class and update the configuration to use destination Region to initiate the snapshot. AWS.config.update({region: destinationRegion}); var ec2 = new AWS.EC2(); // Prepare variables for ec2.modifySnapshotAttribute call const copySnapshotParams = { Description: description, DestinationRegion: destinationRegion, SourceRegion: sourceRegion, SourceSnapshotId: snapshotId }; // Execute the copy snapshot and log any errors ec2.copySnapshot(copySnapshotParams, (err, data) => { if (err) { const errorMessage = `Error copying snapshot ${snapshotId} to Region ${destinationRegion}.`; console.log(errorMessage); console.log(err); callback(errorMessage); } else { const successMessage = `Successfully started copy of snapshot ${snapshotId} to Region ${destinationRegion}.`; console.log(successMessage); console.log(data); callback(null, successMessage); } }); };

    为确保您的 Lambda 函数可在 EventBridge 控制台中使用,请在 EventBridge 事件发生的区域中创建该函数。有关更多信息,请参见AWS Lambda 开发人员指南

  3. 在以下位置打开亚马逊 EventBridge 控制台https://console.aws.amazon.com/events/

  4. 在导航窗格中,选择规则,然后选择创建规则

  5. 对于 Step 1: Define rule detail(步骤 1:定义规则详细信息),请执行以下操作:

    1. Name(名称)和 Description(描述)输入值。

    2. 对于 Event bus(事件总线),保持 default(默认)。

    3. 确保 “在所选事件总线上启用规则” 处于启用状态。

    4. 对于 Event type(事件类型),选择 Rule with an event pattern(具有事件模式的规则)。

    5. 选择下一步

  6. 对于 Step 2: Build event pattern(步骤 2:构建事件模式),执行以下操作:

    1. 对于事件来源,选择AWS 活动或 EventBridge 合作伙伴事件

    2. 事件模式部分中,对于事件源,确保选择了AWS 服务,对于AWS 服务,选择 EC2

    3. 对于事件类型,选择 EBS 快照通知,选择特定事件,然后选择 createSnapshot

    4. 选择特定结果,然后选择已成功

    5. 选择下一步

  7. 对于 Step 3: Select targets(步骤 3:选择目标),请执行以下操作:

    1. 对于目标类型,选择AWS 服务

    2. 对于 Select target(选择目标),选择 Lambda function(Lambda 函数),对于 Function(函数),选择之前创建的函数。

    3. 选择 Next(下一步)。

  8. 对于 Step 4: Configure tags(步骤 4:配置标签),如果需要,为规则指定标签,然后选择 Next(下一步)。

  9. 对于 Step 5: Review and create(步骤 5:查看并创建),查看规则,然后选择 Create rule(创建规则)。

现在,您的规则应该会显示在规则选项卡中。在所示的示例中,当您下次复制快照时,EBS 应该会发送您所配置的事件。