使用 Amazon Lambda 处理 EventBridge 事件
您可以使用 Amazon EBS 和 Amazon EventBridge 自动执行数据备份工作流。这需要您创建 IAM policy、用于处理事件的 Amazon Lambda 函数,以及与传入事件匹配并能将传入事件路由到 Lambda 函数的 EventBridge 规则。
以下过程使用 createSnapshot 事件自动将已完成的快照复制到其他区域,以用于灾难恢复。
将已完成的快照复制到其他区域
-
创建 IAM policy(例如以下示例中显示的策略),以便提供使用
CopySnapshot操作和写入 EventBridge 日志所需的权限。将策略分配给要处理 EventBridge 事件的用户。 -
在 Lambda 中定义一个可在 EventBridge 控制台中使用的函数。在 Amazon EBS 发送匹配的
createSnapshot事件时(表示快照已完成),EventBridge 会调用下方在 Node.js 中编写的示例 Lambda 函数。该函数被调用后,它会将快照从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 事件的区域中创建该函数。有关更多信息,请参见Amazon Lambda 开发人员指南。
访问 https://console.aws.amazon.com/events/
,打开 Amazon EventBridge 控制台。 -
在导航窗格中,选择规则,然后选择创建规则。
-
对于 Step 1: Define rule detail(步骤 1:定义规则详细信息),请执行以下操作:
-
为 Name(名称)和 Description(描述)输入值。
-
对于 Event bus(事件总线),保持 default(默认)。
-
确保 Enable the rule on the selected event bus(在选定的事件总线上启用该规则)已开启。
-
对于 Event type(事件类型),选择 Rule with an event pattern(具有事件模式的规则)。
-
选择下一步。
-
-
对于 Step 2: Build event pattern(步骤 2:构建事件模式),执行以下操作:
-
对于事件源,选择 Amazon 事件或 EventBridge 合作伙伴事件。
-
在事件模式部分,对于事件源,请确保选择 Amazon 服务,对于 Amazon 服务,选择 EC2。
-
对于事件类型,选择 EBS 快照通知,选择特定事件,然后选择 createSnapshot。
-
选择特定结果,然后选择已成功。
-
选择下一步。
-
-
对于 Step 3: Select targets(步骤 3:选择目标),请执行以下操作:
-
对于目标类型,选择Amazon 服务。
-
对于 Select target(选择目标),选择 Lambda function(Lambda 函数),对于 Function(函数),选择之前创建的函数。
-
选择 Next(下一步)。
-
-
对于 Step 4: Configure tags(步骤 4:配置标签),如果需要,为规则指定标签,然后选择 Next(下一步)。
-
对于 Step 5: Review and create(步骤 5:查看并创建),查看规则,然后选择 Create rule(创建规则)。
现在,您的规则应该会显示在规则选项卡中。在所示的示例中,当您下次复制快照时,EBS 应该会发送您所配置的事件。