

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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. EventBridge コンソールから利用できる関数を Lambda で定義します。以下の Lambda 関数は、Node.js で記述したサンプルであり、該当する `createSnapshot` イベント (スナップショットの完成を示す) が Amazon EBS から出力されたときに 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. ナビゲーションペインで、[**Rules** (ルール)] を選択し、[**Create rule** (ルールの作成)] を選択してください。

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. **[Event pattern]** (イベントパターン) セクションにある **[Event source]** (イベントソース) で、**[AWS service]** が選択されていることを確認し、**[AWS service]** で **[EC2]** を選択します。

   1. **[Event type]** (イベントタイプ) で、**[EBS Snapshot Notification]** (EBS スナップショット通知) を選択し、**[Specific event(s)]** (特定のイベント) を選択してから、**[createSnapshot]** を選択します。

   1. **[Specific result(s)]** (特定の結果) を選択してから、**[succeeded]** (成功) を選択します。

   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]** (ルールを作成) を選択します。

作成したルールが、[**Rules**] タブに表示されます。上の例で、設定したイベントは次回にスナップショットをコピーすると EBS から出力されます。