

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

# AWS Lambda 用于处理 EventBridge 事件
<a name="using_lambda"></a>

您可以使用 Amazon EBS 和 Amazon 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": "*"
       }
     ]
   }
   ```

------

1. 在 Lambda 中定义一个可在控制台中使用的函数。 EventBridge 下面用 Node.js 编写的示例 Lambda 函数是在亚马逊 EBS 发出匹配`createSnapshot`的事件（表示快照已完成） EventBridge 时调用的。该函数被调用后，它会将快照从 `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 开发人员指南](https://docs.aws.amazon.com/lambda/latest/dg/)。

1. 打开 Amazon EventBridge 控制台，网址为[https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/)。

1. 在导航窗格中，选择**规则**，然后选择**创建规则**。

1. 对于 **Step 1: Define rule detail**（步骤 1：定义规则详细信息），请执行以下操作：

   1. 为 **Name**（名称）和 **Description**（描述）输入值。

   1. 对于 **Event bus**（事件总线），保持 **default**（默认）。

   1. 确保 **Enable the rule on the selected event bus**（在选定的事件总线上启用该规则）已开启。

   1. 对于 **Event type**（事件类型），选择 **Rule with an event pattern**（具有事件模式的规则）。

   1. 选择**下一步**。

1. 对于 **Step 2: Build event pattern**（步骤 2：构建事件模式），执行以下操作：

   1. 在**事件源**中，选择**AWS 事件或 EventBridge 合作伙伴事件**。

   1. 在**事件模式**部分，对于**事件源**，请确保选择 **AWS 服务**，对于 **AWS 服务**，选择 **EC2**。

   1. 对于**事件类型**，选择 **EBS 快照通知**，选择**特定事件**，然后选择 **createSnapshot**。

   1. 选择**特定结果**，然后选择**已成功**。

   1. 选择**下一步**。

1. 对于 **Step 3: Select targets**（步骤 3：选择目标），请执行以下操作：

   1. 对于**目标类型**，选择**AWS 服务**。

   1. 对于 **Select target**（选择目标），选择 **Lambda function**（Lambda 函数），对于 **Function**（函数），选择之前创建的函数。

   1. 选择 **Next**（下一步）。

1. 对于 **Step 4: Configure tags**（步骤 4：配置标签），如果需要，为规则指定标签，然后选择 **Next**（下一步）。

1. 对于 **Step 5: Review and create**（步骤 5：查看并创建），查看规则，然后选择 **Create rule**（创建规则）。

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