Amazon RDS イベントでトリガーするルールの作成 - Amazon Relational Database Service

Amazon RDS イベントでトリガーするルールの作成

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

Amazon RDS イベントを CloudWatch Events に送信するルールの作成

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

以下のステップを使用して、イベントをトリガーし AWS のサービスから出力させるための、CloudWatch Events ルールを作成します。

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

  1. CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。

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

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

  4. [Event Source] で、以下の操作を実行します。

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

    2. [サービス名] に [Relational Database Service (RDS)] を選択します。

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

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

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

  7. 多くのターゲットタイプで、CloudWatch Events はターゲットにイベントを送信するためのアクセス許可が必要です。これらの場合、CloudWatch Events は、イベントの実行に必要な IAM ロールを作成できます。

    • 自動的に IAM ロールを作成するには、[この特定のリソースに対して新しいロールを作成する] を選択します。

    • 以前に作成した IAM ロールを使用するには、[既存のルールの使用] を選択します。

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

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

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

  10. [‬Create rule]‭ (ルールの作成) を選択します。

詳細については、Amazon CloudWatch ユーザーガイドCreating a CloudWatch Events Rule That Triggers on an Event を参照してください。

チュートリアル: Amazon EventBridge を使用して DB インスタンスの状態変化をログに記録する

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

重要

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

ステップ 1: AWS Lambda 関数を作成する

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

Lambda 関数を作成するには

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

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

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

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

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

    2. [ランタイム] で、[Node.js 14x] を選択します。

    3. [Execution role] で、[Create a new role with basic Lambda permissions] を選択します。[既存のロール] で基本的な実行ロールを選択します。それ以外の場合は、新しい基本的な実行ロールを作成します。

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

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

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

    2. [index.js] を右クリックし、[開く] を選択します。

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

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

      console.log('Loading function'); exports.handler = async (event, context) => { console.log('Received event:', JSON.stringify(event)); };
    5. [デプロイ] を選択します。

ステップ 2: ルールを作成する

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

EventBridge ルールを作成するには

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

  2. ナビゲーションペインで [Rules] (ルール) を選択します。

  3. [‬Create rule]‭ (ルールの作成) を選択します。

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

  5. [Define pattern (パターンの定義)] で、以下の操作を行います。

    1. [イベントパターン] を選択します。

    2. [Pre-defined pattern by service (サービスによる定義済みパターン)] を選択します。

    3. [Service provider (サービスプロバイダー)] で、[AWS] を選択します。

    4. [サービス名] に [Relational Database Service (RDS)] を選択します。

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

  6. [Select event bus (イベントバスを選択)] で、[AWS default event bus (AWSデフォルトイベントバス)] を選択します。アカウントの AWS サービスがイベントを発行すると、常にアカウントのデフォルトのイベントバスに移動します。

  7. [ターゲット] で、[Lambda 関数] を選択します。

  8. [関数] で、作成した Lambda 関数を選択します。

  9. [Create] を選択します。

ステップ 3: ルールをテストする

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

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

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

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

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

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

  5. [ルールの詳細] で、[ルールのメトリクス] を選択します。

    Amazon CloudWatch コンソールにリダイレクトされます。

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

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

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

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

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

    { "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 のイベントの概要」を参照してください。

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