先月の18日のリリースで、OCIのイベントサービスが、MySQL Database Service のイベントをサポートするようになりました。
リリースノートは、以下となります。
これにより、MySQL Database Service の状態が変更された際に、スクリプト等を用意せずとも、OCIのサービスのみで、通知を送る事が可能となりました。
今回は、これを利用して、MySQL Database Service に関連するイベントの通知を送ってみたいと思います。
過去には、オブジェクト・ストレージに関する通知方法についても記事を記載しておりますので、よろしければご一読下さい。
検証前作業
今回は、OCIのCLIを使用して、イベントの作成を行います。
CLIを使用できる環境がない方は、こちらのリファレンスを参照してインストールして頂くか、クラウド・シェルをご使用下さい。
※CLI実行時にコンパートメントIDのパラメータが必須となりますが、CLI構成ファイルで定義している為、省略します。
通知サービスの設定
トピックの作成
まずは、通知サービスでトピックを作成します。
以下のように、CLIを実行します。
トピック名は、MDS_Topic
としました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# oci ons topic create \ > --name MDS_Topic { "data": { "api-endpoint": "https://cell1.notification.ap-tokyo-1.oraclecloud.com", "compartment-id": "ocid1.compartment.oc1..(略)", "defined-tags": { "Oracle-Tags": { "CreatedBy": "(User)", "CreatedOn": "2021-03-23T02:49:39.480Z" } }, "description": null, "etag": null, "freeform-tags": {}, "lifecycle-state": "ACTIVE", "name": "MDS_Topic", "time-created": "2021-03-23T02:49:40.002000+00:00", "topic-id": "ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaa7hgtpcaczqv347kq56z6ytpd6u6qvef6xk3fjedqgw2njy3xhs4q" }, "etag": "fb9fc3ea" } |
実行後に出力される topic-id
は、トピックIDとなり、サブスクリプション作成時に必要となるので、メモしておきます。
CLIを実行後、コンソール画面の「アプリケーション統合」-「通知」画面を確認すると、トピックが作成されていることが確認できます。
サブスクリプションの作成
トピックを作成した後に、サブスクリプションを作成します。
サブスクリプションは、通知方法の指定を行います。現時点では、以下の指定が可能です。
- 電子メール
- Oracle Functions
- HTTPS(カスタムURL)
- PagerDuty
- Slack
各通知方法の詳細は、トピックおよびサブスクリプションの管理をご参照下さい。
今回は、Slack に通知してみます。
Slackに通知する際は、事前にIncoming Webhook を作成し、WebhookURLを取得しておく必要があります。
以下のように、CLIを実行します。
--subscription-endpoint
にはWebhookURLを、--topic-id
には、先程作成したトピックのトピックIDを指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# oci ons subscription create \ > --protocol SLACK \ > --subscription-endpoint https://hooks.slack.com/services/T0DKSK(略) \ > --topic-id ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaa7hgtpcaczqv347kq56z6ytpd6u6qvef6xk3fjedqgw2njy3xhs4q { "data": { "compartment-id": "ocid1.compartment.oc1..(略)", "created-time": 1616468283989, "defined-tags": { "Oracle-Tags": { "CreatedBy": "(User)", "CreatedOn": "2021-03-23T02:58:03.830Z" } }, "deliver-policy": "{\"maxReceiveRatePerSecond\":0,\"backoffRetryPolicy\":{\"initialDelayInFailureRetry\":60000,\"maxRetryDuration\":7200000,\"policyType\":\"EXPONENTIAL\"}}", "endpoint": "https://hooks.slack.com/services/T0DKSK(略)", "etag": "c1172abd", "freeform-tags": {}, "id": "ocid1.onssubscription.oc1.ap-tokyo-1.(略)", "lifecycle-state": "PENDING", "protocol": "SLACK", "topic-id": "ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaa7hgtpcaczqv347kq56z6ytpd6u6qvef6xk3fjedqgw2njy3xhs4q" }, "etag": "c1172abd" } |
正常に終了すると、Slack に以下のような通知が送信されました。
コンソール画面の「アプリケーション統合」-「通知」-「トピックの詳細」画面を確認すると、サブスクリプションが表示されていますが、「状態」が Pending
となっています。
Slackに通知されたメッセージの中にあるURLへブラウザでアクセスすると、サブスクリプションが承認された画面が表示されます。
再度、コンソール画面のトピックの詳細画面を確認すると、「状態」が Active
となりました。
以上で、通知サービスの設定は完了となります。
イベントサービスの設定
ルールの作成
次にイベントサービスで、ルールを作成します。
CLIで指定するパラメータを JSON ファイルで指定しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# cat mds_event.json { "actions": { "actions": [ { "action-type": "ONS", "is-enabled": true, "topic-id": "ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaa7hgtpcaczqv347kq56z6ytpd6u6qvef6xk3fjedqgw2njy3xhs4q" } ] }, "condition": "{\"eventType\":[\"com.oraclecloud.mysqlaas.startdbsystem.begin\",\"com.oraclecloud.mysqlaas.startdbsystem.end\",\"com.oraclecloud.mysqlaas.stopdbsystem.begin\",\"com.oraclecloud.mysqlaas.stopdbsystem.end\"]}", "display-name": "MDS_Notify", "is-enabled": true } |
topic-id
には、作成したトピックのトピックIDを指定し、display-name
にはルール名を設定します。
condition
には、今回、追加された MySQL Database Service のイベント名を設定します。
追加されたイベントは、MySQL Database Service Events に定義されていますので、ご確認下さい。
上記の設定では、以下のイベント時に通知を行うよう設定しています。
- com.oraclecloud.mysqlaas.startdbsystem.begin(インスタンス起動処理開始時)
- com.oraclecloud.mysqlaas.startdbsystem.end(インスタンス起動処理終了時)
- com.oraclecloud.mysqlaas.stopdbsystem.begin(インスタンス停止処理開始時)
- com.oraclecloud.mysqlaas.stopdbsystem.end(インスタンス停止処理終了時)
それでは、上記JSONファイルを指定してCLIを実行し、イベントルールを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# oci events rule create --from-json file:///root/mds_event.json { "data": { "actions": { "actions": [ { "action-type": "ONS", "description": null, "id": "ocid1.eventaction.oc1.ap-tokyo-1.(略)", "is-enabled": true, "lifecycle-message": null, "lifecycle-state": "ACTIVE", "topic-id": "ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaa7hgtpcaczqv347kq56z6ytpd6u6qvef6xk3fjedqgw2njy3xhs4q" } ] }, "compartment-id": "ocid1.compartment.oc1..(略)", "condition": "{\"eventType\":[\"com.oraclecloud.mysqlaas.startdbsystem.begin\",\"com.oraclecloud.mysqlaas.startdbsystem.end\",\"com.oraclecloud.mysqlaas.stopdbsystem.begin\",\"com.oraclecloud.mysqlaas.stopdbsystem.end\"]}", "defined-tags": { "Oracle-Tags": { "CreatedBy": "(User)", "CreatedOn": "2021-03-23T07:35:11.183Z" } }, "description": null, "display-name": "MDS_Notify", "freeform-tags": {}, "id": "ocid1.eventrule.oc1.ap-tokyo-1.(略)", "is-enabled": true, "lifecycle-message": null, "lifecycle-state": "ACTIVE", "time-created": "2021-03-23T07:35:11.416000+00:00" }, "etag": "23bcc9dec26a4fedfd763ab1b3254288a76675b5a340180c933bdc0680628379" } |
CLIを実行後、コンソール画面の「アプリケーション統合」-「イベント・サービス」画面を確認すると、イベントルールが作成されていることが確認できます。
以上で、イベントサービスの設定は完了となります。
通知の確認
それでは、MySQL Database Service のインスタンスを起動・停止して、Slack に通知が届くか確認してみます。
まずは、インスタンスを起動してみました。
起動してすぐに、以下の通知が届きました。「eventType」が com.oraclecloud.mysqlaas.startdbsystem.begin
となっているので、インスタンス起動処理の開始時イベントです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
{ "eventType" : "com.oraclecloud.mysqlaas.startdbsystem.begin", "cloudEventsVersion" : "0.1", "eventTypeVersion" : "2.0", "source" : "Mysqlaas", "eventTime" : "2021-03-23T08:04:22Z", "contentType" : "application/json", "data" : { "compartmentId" : "ocid1.compartment.oc1..(略)", "compartmentName" : "blog", "resourceName" : "DBSystem001", "resourceId" : "ocid1.mysqldbsystem.oc1.ap-tokyo-1.(略)", "availabilityDomain" : "AD1", "freeformTags" : { }, "definedTags" : { "Oracle-Tags" : { "CreatedBy" : "(User)", "CreatedOn" : "2021-03-23T07:50:51.666Z" } }, "additionalDetails" : { "lifecycleState" : "UPDATING", "timeUpdated" : "2021-03-23T07:50:53.144Z", "isHighlyAvailable" : false, "timeCreated" : "2021-03-23T07:50:53.144Z", "isHeatWaveClusterAttached" : false, "shapeName" : "MySQL.VM.Standard.E3.1.8GB", "X-Real-Port" : 50815, "version" : "8.0.23-u2-cloud" } }, "eventID" : "c6133657-6910-453d-97c1-a7a6b4503528", "extensions" : { "compartmentId" : "ocid1.compartment.oc1..(略)" } } |
3分程遅れて、更に以下の通知が届きました。
「eventType」が com.oraclecloud.mysqlaas.startdbsystem.end
となっているので、インスタンス起動処理の終了時イベントです。
開始時イベントと終了時イベントの「eventTime」を確認すると、起動処理に2分半程要していたことが分かります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
{ "eventType" : "com.oraclecloud.mysqlaas.startdbsystem.end", "cloudEventsVersion" : "0.1", "eventTypeVersion" : "2.0", "source" : "Mysqlaas", "eventTime" : "2021-03-23T08:07:53Z", "contentType" : "application/json", "data" : { "compartmentId" : "ocid1.compartment.oc1..(略)", "compartmentName" : "blog", "resourceName" : "DBSystem001", "resourceId" : "ocid1.mysqldbsystem.oc1.ap-tokyo-1.(略)", "availabilityDomain" : "ad1", "freeformTags" : { }, "definedTags" : { "Oracle-Tags" : { "CreatedBy" : "(User)", "CreatedOn" : "2021-03-23T07:50:51.666Z" } }, "additionalDetails" : { "lifecycleState" : "ACTIVE", "timeUpdated" : "2021-03-23T07:50:53.144Z", "isHighlyAvailable" : false, "timeCreated" : "2021-03-23T07:50:53.144Z", "isHeatWaveClusterAttached" : false, "executionDuration" : 199755, "shapeName" : "MySQL.VM.Standard.E3.1.8GB", "version" : "8.0.23-u2-cloud" } }, "eventID" : "a61bea1b-9a08-4655-a0a9-2cab4498a30d", "extensions" : { "compartmentId" : "ocid1.compartment.oc1..(略)" } } |
次は、インスタンスを停止して確認してみます。
インスタンス停止後すぐに以下の通知が届きました。
「eventType」が com.oraclecloud.mysqlaas.stopdbsystem.begin
となっているので、インスタンス停止処理の開始時イベントです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
{ "eventType" : "com.oraclecloud.mysqlaas.stopdbsystem.begin", "cloudEventsVersion" : "0.1", "eventTypeVersion" : "2.0", "source" : "Mysqlaas", "eventTime" : "2021-03-23T08:13:49Z", "contentType" : "application/json", "data" : { "compartmentId" : "ocid1.compartment.oc1..(略)", "compartmentName" : "blog", "resourceName" : "DBSystem001", "resourceId" : "ocid1.mysqldbsystem.oc1.ap-tokyo-1.(略)", "availabilityDomain" : "AD1", "freeformTags" : { }, "definedTags" : { "Oracle-Tags" : { "CreatedBy" : "(User)", "CreatedOn" : "2021-03-23T07:50:51.666Z" } }, "additionalDetails" : { "lifecycleState" : "UPDATING", "timeUpdated" : "2021-03-23T07:50:53.144Z", "isHighlyAvailable" : false, "timeCreated" : "2021-03-23T07:50:53.144Z", "isHeatWaveClusterAttached" : false, "shapeName" : "MySQL.VM.Standard.E3.1.8GB", "X-Real-Port" : 50815, "version" : "8.0.23-u2-cloud" } }, "eventID" : "708248f8-43cf-4e54-812b-b2a6b716d54d", "extensions" : { "compartmentId" : "ocid1.compartment.oc1..(略)" } } |
しばらくすると、更に以下の通知が届きました。
「eventType」が com.oraclecloud.mysqlaas.stopdbsystem.end
となっているので、インスタンス停止処理の終了時イベントです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
{ "eventType" : "com.oraclecloud.mysqlaas.stopdbsystem.end", "cloudEventsVersion" : "0.1", "eventTypeVersion" : "2.0", "source" : "Mysqlaas", "eventTime" : "2021-03-23T08:16:07Z", "contentType" : "application/json", "data" : { "compartmentId" : "ocid1.compartment.oc1..(略)", "compartmentName" : "blog", "resourceName" : "DBSystem001", "resourceId" : "ocid1.mysqldbsystem.oc1.ap-tokyo-1.(略)", "availabilityDomain" : "ad1", "freeformTags" : { }, "definedTags" : { "Oracle-Tags" : { "CreatedBy" : "(User)", "CreatedOn" : "2021-03-23T07:50:51.666Z" } }, "additionalDetails" : { "lifecycleState" : "INACTIVE", "timeUpdated" : "2021-03-23T07:50:53.144Z", "isHighlyAvailable" : false, "timeCreated" : "2021-03-23T07:50:53.144Z", "isHeatWaveClusterAttached" : false, "executionDuration" : 130215, "shapeName" : "MySQL.VM.Standard.E3.1.8GB", "version" : "8.0.23-u2-cloud" } }, "eventID" : "de900194-06d3-4705-8cb3-3715aca5b0ba", "extensions" : { "compartmentId" : "ocid1.compartment.oc1..(略)" } } |
定義したイベント通りに Slack へ通知される事が確認できました。
まとめ
元々、イベントサービスには通知する仕組みは存在したものの、MySQL Database Service のイベントには対応していませんでした。
今回のリリースにより、MySQL Database Service でもスクリプトを作成せずとも、簡単にイベントに対する通知する仕組みを用意することが可能となりました。
また、 MySQL Database Service Events に定義されている通り、他にも、インスタンス作成、削除及びバックアップや HeatWave に関するイベントも定義する事が可能となっていますので、お手軽に通知する仕組みが欲しいとう方は、お試しください。
現時点では、エラーイベントに関する定義がないので、例えば、バックアップの取得実行時にエラーが発生した場合に通知するといった事ができませんが、今後のリリースに期待したいと思います。