6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RDSメンテナンス、PHDやメールで通知されないものも取得&通知するLambda

Last updated at Posted at 2021-11-04

RDSのメンテナンス情報はその全てがメールやPHD(Personal Health Dashboard)に通知されるわけではありません(サポート確認済み)。そのようなものも把握したい場合は describe-pending-maintenance-actions コマンドで取得する方法があります。

ということで describe-pending-maintenance-actions して結果が空でなければ、SNSに通知するLambdaを書いてみました。 CloudFormationのテンプレート としてまとめています。

定期実行しておけば、これまでPHDやメールだけでは把握ができなかったメンテナンス情報も拾えます。

構成

構成.png

利用手順

SNSの準備

通知対象のSNSトピックを準備してください。
ARNはあとで使います。

SNS.png

今回は楽にコード書かずSlack通知したかったので、通知したいSlackチャンネルのインテグレーション設定からメールアドレスを払い出して、そのアドレスをSNSにサブスクリプション登録しました。

image.png

Lambdaの作成(CloudFormation利用)

Notify_RdsMaintenancePendingActions.yml を使ってCloudFormationスタックを新規作成します。

CloudFormation.png

スタック名と、通知先SNSのARNを入力してください。AppNameはリソースのプレフィックスとして使います、こだわりがなければデフォルトのままで。

image.png

IAM作成の許可にチェックを入れてスタックを作成してください。

実行テスト

デフォルトだと「DescribeRdsMaintenancePendingActions」というLambdaができているので、テスト実行してみてください。RDSのペンディングアクションがあればSNSに通知が飛ぶはずです。

SNS -> EMail -> Slack の例

ペンディング中のメンテナンスアクションが2つ存在するリージョンで試すと、以下のように2つ通知が飛んできました。
NotifyResult.png

定期実行

EventBridgeのスケジュール実行をこのLambdaに関連づけておけば定期的なチェックが行えます。
CloudFormationにはスケジュール実行部分は含めていないので手動で設定が必要です。

コード

CloudFormationの中に以下のコードをインラインで埋め込んでいます。(Python3.9)
ひとまずプレーンなもので動作を見てみたかったのでフィルタなどはせず、そのままメンテの数だけ通知しています。

import json
import boto3
import os

rds = boto3.client('rds')
sns = boto3.client('sns')
TOPIC_ARN = os.environ["TOPIC_ARN"]

def main(event, context):
    # Describe
    paginator = rds.get_paginator('describe_pending_maintenance_actions')
    iter = paginator.paginate()
    for res in iter:
        for action in res["PendingMaintenanceActions"]:
            # Publish
            message = json.dumps(action, default=str)
            print(f"publish {TOPIC_ARN=} {message=}")
            sns.publish(
                TopicArn=TOPIC_ARN,
                Subject="RDS Pending Maintenance Action",
                Message=message
            )
    
    # return
    return {
        'statusCode': 200,
        'body': "ok"
    }
6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?