Autonomous Database：スケジュールされたメンテナンスの開始時や終了時にメールで通知を送る

# はじめに
Autonomous Databaseには、あらかじめ様々なイベントが用意されており、メンテナンス開始時や自動バックアップ終了時等の各種イベント発生時に、OCI通知サービスやOCIイベントサービスと連携して通知を行うことが可能です。

今回はスケジュールされたメンテナンスの開始時や終了時にメールで通知を送る設定を行ってみました。
また、今回は検証の簡素化のため、テナンシの管理者ユーザで設定を行いました。

# 1. トピックの作成
通知サービスのトピックを作成します。

OCIコンソールで、「開発者サービス」>「アプリケーション統合」>「通知」に移動します。
![スクリーンショット 2024-02-15 15.37.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/9bf601d3-3a6a-93a9-34df-4998c4e44651.png)

「トピックの作成」をクリックします。
![Topic.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/59fc37cd-1e35-d7d9-3079-2c6127f406e4.jpeg)

作成するトピックの名前を入力し、「作成」をクリックします。
![スクリーンショット 2024-02-15 15.52.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/eb719a1d-9623-3b4e-8498-b6f98dcb887e.png)

トピックが作成されました。
![スクリーンショット 2024-02-15 15.52.33のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/74a9f5a8-27d3-eaab-1ba5-7f0b3ff40872.png)

# 2. サブスクリプションの作成
通知サービスのサブスクリプションを作成します。

1.で作成したトピックの名前のリンクをクリックして、トピックの詳細画面に移動します。
![スクリーンショット 2024-02-15 15.52.33のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/9daae2db-da4c-7fc8-60ac-fac16f2ee8e4.png)

「サブスクリプションの作成」をクリックします。
![スクリーンショット 2024-02-15 15.53.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/597c9e9d-75dc-19df-0b94-b32bd504aa2c.png)

以下のように入力し、「作成」をクリックします。
プロトコル：「電子メール」を選択
電子メール：イベントの通知の配信先となるメールアドレスを入力
![スクリーンショット 2024-02-15 15.56.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/d186757e-1523-c7d6-f5bb-f5512f949093.png)

メールを配信するサブスクリプションが作成されましたが、状態が「保留中」になっています。
![スクリーンショット 2024-02-15 15.57.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/a38b6b0d-f927-de19-456b-20bfaed5958c.png)

プロトコルが「電子メール」のサブスクリプションを作成すると、不正防止のために、配信先として入力したメールアドレスにこちらのような確認メールが送信されます。
![スクリーンショット 2024-02-15 15.57.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/4456a52f-521c-4c3e-426e-1e2a925192d4.png)

メール内の「Confirm subscription」のリンクをクリックします。
![スクリーンショット 2024-02-15 15.57.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/bedca328-7eec-4765-f896-6413763f3e8d.png)

ブラウザにこちらのようなページが表示され、メールアドレスのサブスクリプションへの登録確認が完了します。
![スクリーンショット 2024-02-15 17.30.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/c91462f2-b256-f62e-fbe2-3b0c18529cf8.png)

確認が完了すると、サブスクリプションの状態が「アクティブ」になり、サブスクリプションが利用可能になります。
![スクリーンショット 2024-02-15 15.58.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/1b29db3b-bbe3-28ce-ad2d-9a9f4ea7a671.png)


# 3. イベント・サービスのルールの作成

特定のAutonomous Databaseのメンテナンスに関する通知を行うためのイベント・サービスのルールの作成には、対象となるAutonomous Databaseの大文字表記のOCIDが必要になります。
あらかじめ、Autonomous Databaseに対してDatabase ActionsやSQL*Plus、SQLclなどから以下のSQLを実行し、Autonomous Databaseの大文字表記のOCIDを取得しておきます。
```
SELECT JSON_VALUE(cloud_identity, '$.DATABASE_OCID') adb_ocid FROM v$pdbs;
```

イベント・サービスのルールを作成します。
OCIコンソールで、「監視および管理」>「イベント・サービス」>「ルール」に移動します。
![スクリーンショット 2024-02-15 16.00.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/b1e60657-6bfc-8233-2a88-6aaab1a1d476.png)

「ルールの作成」をクリックします。
![スクリーンショット 2024-02-15 16.03.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/741ae879-75fb-ea59-2e17-cf65e051d984.png)

ルールの表示名と説明を入力します。
![Rule.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/7b5aca16-3ffb-8786-c236-dd79347fb97b.jpeg)

ルール条件に以下の3つの条件を追加します。

条件：「イベント・タイプ」を選択
サービス名：「Database」を選択
イベント・タイプ：「Autonomous Database - Information」を選択

条件：「属性」を選択
属性名：「resourceId」を選択
属性値：Autonomoud DatabaseのOCIDを大文字で入力し、エンターキーで入力を確定する

条件：「属性」を選択
属性名：「eventName」を選択
属性値：MaintenanceBegin、MaintenanceEnd、NewMaintenanceSchedule、ScheduledMaintenanceWarning（それぞれの文字列を入力後にエンターキーで確定する）

![スクリーンショット 2024-02-15 16.26.57のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/0cb2f297-76c0-1649-3e01-9b97786b3bd0.png)

属性名「eventName」の各属性値のイベントが発生するタイミングは以下のようになります。
|属性値|イベント発生タイミング|
|---|---|
|ScheduledMaintenanceWarning|スケジュールされたメンテナンスの開始時間の24時間前と1時間前|
|MaintenanceBegin|スケジュールされたメンテナンスが開始された時|
|MaintenanceEnd|スケジュールされたメンテナンスが終了した時|
|NewMaintenanceSchedule|次回のスケジュールされたメンテナンスの日時が更新され、新しい日時が OCIコンソールに表示された時|

アクションを以下のように設定します。

アクション・タイプ：「通知」を選択
通知コンパートメント：トピックを作成したコンパートメントを選択
トピック：1.で作成したトピック（ここではTopic1）を選択

![スクリーンショット 2024-02-15 16.27.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/349699b4-0cf5-1344-0e3d-51023aa15e13.png)

「ルールの作成」をクリックして、ルールを作成します。
![Create_Rule.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/412b0f6d-bca7-d2a5-82ec-333d58c2c980.jpeg)

イベント・サービスのルール「ADB Maintenance Events」が作成されました。
![スクリーンショット 2024-02-15 19.21.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/f8485398-8c49-43cf-23ab-b1d8f2a06c91.png)

以上で、Autonomous Databaseのスケジュールされたメンテナンスに関するイベントが発生した時にメールで通知する設定ができました。

イベント・サービスのルールのルール条件を変更することで、様々なイベントが発生した際にメールで通知を行うことが可能です。
また、イベント・サービスのルールのアクションタイプを変更することで、イベント発生時にメールを通知するだけでなく、ストリーミング・サービスやOCIファンクションと連携することも可能です。
![スクリーンショット 2024-02-15 19.45.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/1d886928-11d1-d917-e774-76dfeca1bf97.png)

さらに、サブスクリプションの作成時に指定するプロトコルを変更することで、SlackやPageDutyへの通知やHTTPSでカスタムURLを呼び出すことも可能です。
![スクリーンショット 2024-02-15 19.44.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/7bf5a988-2e0c-28fb-c207-75e4d5cec415.png)


# 4. イベント発生時に送信されるメールのサンプル
スケジュールされたメンテナンスに関連した各イベントが発生した際に受信したメールのサンプルです。

eventName：NewMaintenanceSchedule
（次回のスケジュールされたメンテナンスの日時が設定された時）
![スクリーンショット 2024-02-15 18.47.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/12427e53-5a25-bd58-fe90-26414a343c29.png)

eventName：ScheduledMaintenanceWarning
（スケジュールされたメンテナンスの開始時間の24時間前）
![スクリーンショット 2024-02-15 18.49.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/3e1ab2a4-a22d-dff9-6812-579008862330.png)

eventName：ScheduledMaintenanceWarning
（スケジュールされたメンテナンスの開始時間の1時間前）
![スクリーンショット 2024-02-15 18.53.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/09f8d1d8-b8f9-06e2-2d8c-9231ee3585bf.png)

eventName：MaintenanceBegin
（スケジュールされたメンテナンス開始時）
![スクリーンショット 2024-02-15 18.55.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/51f885be-0d28-ffb0-9b6d-9acec9aabd79.png)

eventName：MaintenanceEnd
（スケジュールされたメンテナンス終了時）
![スクリーンショット 2024-02-15 18.58.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/08a7ad41-3fea-bed1-8f2a-64bdbd426f0b.png)

# 参考情報
・[Oracle Cloud Infrastructure Notifications トピックの管理](https://docs.oracle.com/ja-jp/iaas/Content/Notification/Tasks/manage-topic.htm)
・[Oracle Cloud Infrastructure Notifications サブスクリプションの管理](https://docs.oracle.com/ja-jp/iaas/Content/Notification/Tasks/manage-subscription.htm)
・[Oracle Cloud Infrastructure Events イベントのルールの管理](https://docs.oracle.com/ja-jp/iaas/Content/Events/Task/managingrules.htm)
・[Use Autonomous Database Events](https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/autonomous-database-events.html)