

# Amazon RDS イベントでトリガーするルールの作成
<a name="rds-cloud-watch-events"></a>

Amazon EventBridge を使用すると、AWS のサービスを自動化して、アプリケーションの可用性の問題やリソースの変更などのシステムイベントに対応できます。

**Topics**
+ [Amazon RDS イベントを Amazon EventBridge に送信するルールの作成](#rds-cloudwatch-events.sending-to-cloudwatch-events)
+ [チュートリアル: Amazon EventBridge を使用して DB インスタンスの状態変化をログに記録する](#log-rds-instance-state)

## Amazon RDS イベントを Amazon EventBridge に送信するルールの作成
<a name="rds-cloudwatch-events.sending-to-cloudwatch-events"></a>

簡単なルールを記述して、対象となる Amazon RDS イベントと、イベントがルールに一致した場合に自動的に実行するアクションを指定できます。イベントを JSON 形式で受け取る AWS Lambda 関数や Amazon SNS トピックなど、さまざまなターゲットの設定が可能です。例えば、DB インスタンスを作成または削除するたびに Amazon EventBridge にイベントを送信するように Amazon RDS を設定できます。詳細については、[Amazon CloudWatch Events ユーザーガイド](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/)、および [Amazon EventBridge ユーザーガイド](https://docs.aws.amazon.com/eventbridge/latest/userguide/)を参照してください。

**RDS イベントでトリガーするルールを作成するには:**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインの [**イベント**] で、[**ルール**] を選択します。

1. [**ルールの作成**] を選択します。

1. [**イベントソース**] で、以下の操作を実行します。

   1. [**Event Pattern**] を選択します。

   1. [**サービス名**] に [**リレーショナルデータベースサービス (RDS)**] を選択します。

   1. **[Event Type]** (イベントタイプ) として、イベントをトリガーする Amazon RDS リソースのタイプを選択します。例えば、内の DB インスタンスがイベントをトリガーする場合は、**[RDS DB Instance Event]** (RDS DB インスタンスイベント) を選択します。

1. [**ターゲット**] で [**ターゲットの追加**] を選択し、選択した種類のイベントが検出されたときに対応する AWS のサービスを選択します。

1. このセクションの他のフィールドに、このターゲットタイプに固有の情報を入力します (必要な場合)。

1. 多くのターゲットタイプで、EventBridge はターゲットにイベントを送信するためのアクセス許可が必要です。この場合、EventBridge は、以下をイベントで実行するために必要な IAM ロールを作成できます。
   + 自動的に IAM ロールを作成するには、**この特定のリソースに対して新しいロールを作成する** を選択します。
   + 以前に作成した IAM ロールを使用するには、[**既存のルールの使用**] を選択します。

1. オプションで、このルールに別のターゲットを追加するには、ステップ 5～7 を繰り返します。

1. [**詳細の設定**] を選択します。[**Rule definition**] で、ルールの名前と説明を入力します。

   ルール名はこのリージョン内で一意である必要があります。

1. [**Create rule**] を選択します。

詳細については、「Amazon CloudWatch ユーザーガイド」の「[イベントでトリガーする EventBridge ルールの作成](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-Rule.html)」を参照してください。**

## チュートリアル: Amazon EventBridge を使用して DB インスタンスの状態変化をログに記録する
<a name="log-rds-instance-state"></a>

このチュートリアルでは、Amazon RDS インスタンスの状態変化をログに記録する AWS Lambda 関数を作成します。次に、既存の RDS DB インスタンスの状態変化があったときに関数を実行するルールを作成します。このチュートリアルでは、一時的にシャットダウンできる小規模なテストインスタンスが実行されていることを前提としています。

**重要**  
実行中の本番 DB インスタンスに対して、このチュートリアルを実行しないでください。

**Topics**
+ [ステップ 1: AWS Lambda 関数を作成する](#rds-create-lambda-function)
+ [ステップ 2: ルールを作成する](#rds-create-rule)
+ [ステップ 3: ルールをテストする](#rds-test-rule)

### ステップ 1: AWS Lambda 関数を作成する
<a name="rds-create-lambda-function"></a>

状態変更イベントのログを記録する Lambda 関数を作成します。ルールを作成するときに、この関数を指定します。

**Lambda 関数を作成するには**

1. AWS Lambda コンソール ([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)) を開きます。

1. Lambda を初めて使用する場合は、ウェルカムページを参照してください。[**今すぐ始める**] を選択します。それ以外の場合は、[**関数の作成**] を選択します。

1. [**Author from scratch**] を選択します。

1. [**関数の作成**] ページで、次の操作を実行します。

   1. Lambda 関数の名前と説明を入力します。例えば、関数名を **RDSInstanceStateChange** とします。

   1. **[Runtime]** (ランタイム) では、**[Node.js 16x]** を選択します。

   1. **[Architecture]** (アーキテクチャ) では、**[x86\$164]** を選択します。

   1. **[Execution role]** (実行ロール) では、次のいずれかを実行します。
      + [**基本的な Lambda アクセス権限で新しいロールを作成**] を選択します。
      + **[Existing role]** (既存のロール) では、**[Use an existing role]** (既存のロールを使用する) を選択します。使用するロールを選択します。

   1. **[Create function]** (関数の作成) を選択します。

1. [**RDSInstanceStateChange**] ページで、次の操作を行います。

   1. [**コードソース**] で、[**index.js**] を選択します。

   1. で、[**index.js**] ウィンドウで、既存のコードを削除します。

   1. 次のコードを入力します。

      ```
      console.log('Loading function');
      
      exports.handler = async (event, context) => {
          console.log('Received event:', JSON.stringify(event));
      };
      ```

   1. [**デプロイ**] を選択します。

### ステップ 2: ルールを作成する
<a name="rds-create-rule"></a>

Amazon RDS インスタンスを起動するたびに Lambda 関数を実行するルールを作成します。

**EventBridge ルールを作成するには**

1. Amazon EventBridge コンソール ([https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/)) を開きます。

1. ナビゲーションペインで **[ルール]** を選択します。

1. **[ルールの作成]** を選択します。

1. ルールの名前と説明を入力します。例えば、「**RDSInstanceStateChangeRule**」と入力します。

1. **[Rule with an event pattern]** (イベントパターンを持つルール) を選択してから、**[Next]** (次へ) を選択します。

1. **[イベントソース]** で、**[AWS イベントまたは EventBridge パートナーイベント]** を選択してください。

1. 下にスクロールして、**[Event pattern]** (イベントパターン) セクションを展開します。

1. **イベントソース** で **AWS のサービス** を選択してください。

1. **[AWS サービス]** では **[リレーショナルデータベースサービス (RDS)]** を選択します。

1. [**イベントタイプ**] で、[**RDS DB インスタンスイベント**] を選択します。

1. デフォルトのイベントパターンのままにします。次に、**[次へ]** を選択します。

1. **[ターゲットタイプ]** では、**[AWS サービス]** を選択します。

1. **[Select a target]** (ターゲットを選択) では、**[Lambda function]** (Lambda 関数) を選択します。

1. **[Function]** (関数) では、作成した Lambda 関数を選択します。次に、**[次へ]** を選択します。

1. **[Configure Tags]** (タグの設定) で、**[Next]** (次へ) を選択します。

1. ルール内の手順を確認します。次に、**[Create rule]** (ルールの作成) を選択します。

### ステップ 3: ルールをテストする
<a name="rds-test-rule"></a>

ルールをテストするには、RDS DB インスタンスをシャットダウンします。インスタンスのシャットダウンの数分後に、Lambda 関数が呼び出されたことが確認できます。

**DB インスタンスを停止してルールをテストするには**

1. Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. RDS DB インスタンスを停止します。

1. Amazon EventBridge コンソール ([https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/)) を開きます。

1. ナビゲーションペインで、[**ルール**] を選択し、作成したルールの名前を選択します。

1. **[ルールの詳細]** で、**[モニタリング]** を選択します。

   Amazon CloudWatch コンソールにリダイレクトされます。リダイレクトされない場合は、**[CloudWatch でメトリクスを表示]** をクリックします。

1. [**すべてのメトリクス**] で、作成したルールの名前を選択します。

   グラフには、ルールが呼び出されたことが示されます。

1. ナビゲーションペインで、[**Log groups**] (ロググループ) を選択します。

1. Lambda 関数 (**/aws/lambda/*function-name***) のロググループの名前を選択します。

1. 起動したインスタンスの関数によって提供されるデータを表示するログのストリーミング名を選択します。次のような受信イベントが表示されます。

   ```
   {
       "version": "0",
       "id": "12a345b6-78c9-01d2-34e5-123f4ghi5j6k",
       "detail-type": "RDS DB Instance Event",
       "source": "aws.rds",
       "account": "111111111111",
       "time": "2021-03-19T19:34:09Z",
       "region": "us-east-1",
       "resources": [
           "arn:aws:rds:us-east-1:111111111111:db:testdb"
       ],
       "detail": {
           "EventCategories": [
               "notification"
           ],
           "SourceType": "DB_INSTANCE",
           "SourceArn": "arn:aws:rds:us-east-1:111111111111:db:testdb",
           "Date": "2021-03-19T19:34:09.293Z",
           "Message": "DB instance stopped",
           "SourceIdentifier": "testdb",
           "EventID": "RDS-EVENT-0087"
       }
   }
   ```

   JSON 形式の RDS イベントの例については、「[Amazon RDS のイベントの概要](working-with-events.md#rds-cloudwatch-events.sample)」を参照してください。

1. (オプション) 終了したら、Amazon RDS コンソールを開き、停止したインスタンスをスタートできます。