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

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

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

構成

利用手順

SNSの準備

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

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

Lambdaの作成(CloudFormation利用)

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

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

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

実行テスト

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

SNS -> EMail -> Slack の例

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

定期実行

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"
    }

元記事はこちら

https://qiita.com/shu85t/items/1352cc9375c59d7514d7
著者:
@shu85t


アイレットなら、AWS で稼働するサーバーを対象とした監視・運用・保守における煩わしい作業をすべて一括して対応し、経験豊富なプロフェッショナルが最適なシステム環境を実現いたします。AWS プレミアコンサルティングパートナーであるアイレットに、ぜひお任せください。

AWS 運用・保守サービスページ:
https://cloudpack.jp/service/aws/maintenance.html

その他のサービスについてのお問合せ、お見積り依頼は下記フォームよりお気軽にご相談ください。
https://cloudpack.jp/contact/form/