
本記事の目的
Oracle Cloudのサーバレスサービス群の一つである「Events Service」の使い勝手が良すぎることに今更ながら感動したので、紹介記事を書いてみます。
OCIイベントサービスとは
OCIにある各種リソースの変化(イベント)を捉えて、予め決めたアクションを行うことが出来るサービス。
ファンクション・サービスと連動することで、イベント・ドリブンのサーバレス・プラットフォームとして動作させることが可能。
イメージは以下のスライド参照。
当初、イベント・サービスに対応しているサービスはObject StorageとAutonomous Databaseだけと少なかったのですが、その後ドンドン対応サービスの拡張が進み、今ではOCIの主要リソースはほぼカバーする状況となり、活用の幅が広がりました。
参考)[Oracle Cloud] Events対応済みサービス一覧
対応するサービスおよびアクションは以下のマニュアルにて確認できます。
・マニュアル「Services that Produce Events 」
※対応するアクションに対して、Friendly Nameという名前が付いてますが、対応するアクションの内容まで書いてくれると本当にフレンドリーなんだけどなぁと個人的には感じてたり(どこかに情報が載ってないかを密かに調査中)。
設定方法
今回はNotificationサービスと連動させて、「何らかのアクションをした場合に、指定したメールアドレスに通知する」を試してみます。
手順概要は以下の通り。
0.必要な権限付与
1.TOPIC作成(Notificationサービス利用の準備)
2.サブスクリプションの作成(メールアドレス登録と承認)
3.Events作成(任意のサービス・アクションの設定)
詳細は以下のマニュアル参照。設定手順は直感的でわかりやすいので、画面を見た方が早いかも?
・マニュアル「Getting Started with Events」
利用例
Eventsサービスの魅力を理解するには実際に触ってみるのが一番ですが、いくつか利用例を挙げてみます。
DBaaSインスタンス起動停止の通知
もちろんDBaaSもEventsサービス対象です。といっても実は先月対応したばかりですが。
DBaaSインスタンス(ノード)の起動停止は、以下の設定で検知可能です。
サービス名:Database
イベントタイプ:「DB Node – Update Begin」、「DB Node – Update End」
・設定画面イメージ。
※検知したいアクション(今回の場合だとノード起動停止)に対応するイベントタイプが分からない時は、上記のように用意されているイベントタイプを色々と登録してみて調査。
コンソールからDBaaSインスタンスを停止してみたところ、以下のようなメールが届きました。
Subject:OCI Event Notification :com.oraclecloud.databaseservice.dbnodeaction.begin
メール本文:
{ "eventType" : "com.oraclecloud.databaseservice.dbnodeaction.begin", "cloudEventsVersion" : "0.1", "eventTypeVersion" : "2.0", "source" : "DatabaseService", "eventTime" : "2019-12-14T12:57:18.559Z", "contentType" : "application/json", "data" : { "compartmentId" : "ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxxxx", "compartmentName" : "xxxxxxxxxxxxxxxxxxxxx", "resourceName" : "dbvm01", "resourceId" : "ocid1.dbnode.oc1.ap-tokyo-1.xxxxxxxxxxxxxxxxxxxxx", "availabilityDomain" : "GBRF:AP-TOKYO-1-AD-1", "additionalDetails" : { "hostName" : "dbvm01", "timeCreated" : "2019-08-15T09:44:46Z", "timeUpdated" : "2019-12-14T12:57:18Z", "lifecycleState" : "STOPPING", "dbSystemId" : "ocid1.dbsystem.oc1.ap-tokyo-1.xxxxxxxxxxxxxxxxxxxxx", "dbHostId" : "DbHost-xxxxxxxxxxxxxxxxxxxxx" } }, "eventID" : "7d9eaafa-d0eb-46d1-ac5a-ad397b893d1f", "extensions" : { "compartmentId" : "ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxxxx" } }
停止完了時に飛んできたメールは以下
Subject:OCI Event Notification :com.oraclecloud.databaseservice.dbnodeaction.end
メール本文:
{ "eventType" : "com.oraclecloud.databaseservice.dbnodeaction.end", "cloudEventsVersion" : "0.1", "eventTypeVersion" : "2.0", "source" : "DatabaseService", "eventTime" : "2019-12-14T13:13:31.701Z", "contentType" : "application/json", "data" : { "compartmentId" : "ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxxxx", "compartmentName" : "xxxxxxxxxxxxxxxxxxxxx", "resourceName" : "dbvm01", "resourceId" : "ocid1.dbnode.oc1.ap-tokyo-1.xxxxxxxxxxxxxxxxxxxxx", "availabilityDomain" : "GBRF:AP-TOKYO-1-AD-1", "additionalDetails" : { "hostName" : "dbvm01", "timeCreated" : "2019-08-15T09:44:46Z", "timeUpdated" : "2019-12-14T13:13:31Z", "lifecycleState" : "STOPPED", "dbSystemId" : "ocid1.dbsystem.oc1.ap-tokyo-1.xxxxxxxxxxxxxxxxxxxxx", "dbHostId" : "DbHost-47f2b789-c018-4e54-97a1-cc952ed22687", "powerAction" : "Stop" } }, "eventID" : "9c29fb43-139e-4603-ba17-6fd62155bba2", "extensions" : { "compartmentId" : "ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxxxx" } }
⇒このケースだと、アクションの開始と終了で2通届きました。
コンパートメント名やリソース名もメール本文から確認可能です。lifecycleStateの行で処理ステータスも確認できます。
IAMポリシー変更の通知
コンピュート・インスタンスやDBaaSインスタンスといったサーバの操作を対象としたイベントだけでなく、IAMリソース(ユーザやグループ、ポリシーなど)に対するイベントアクションも用意されています。
例えば、IAMポリシーの変更は以下で検知可能。
サービス名:Identify
イベントタイプ:「Policy – Create」、「Policy – Delete」、「Policy – Update」
「任意のユーザにポリシーの管理権限を与えるが、もし変更された場合には把握したい」なんて時に使えそう。
実際にポリシーを変更すると、以下のようなメールが飛んできました。
Subject:OCI Event Notification :com.oraclecloud.identitycontrolplane.updatepolicy
メール本文:
{ "eventType" : "com.oraclecloud.identitycontrolplane.updatepolicy", "cloudEventsVersion" : "0.1", "eventTypeVersion" : "2.0", "source" : "identityControlPlane", "eventTime" : "2019-12-14T13:37:31.058Z", "contentType" : "application/json", "data" : { "compartmentId" : "ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxxxx", "compartmentName" : "xxxxxxxxxxxxxxxxxxxxx", "resourceName" : "policy_test", "resourceId" : "ocid1.policy.oc1..xxxxxxxxxxxxxxxxxxxxx", "availabilityDomain" : "AD1", "additionalDetails" : { } }, "eventID" : "b5f03598-4fb7-41b7-a56c-07725614bcbf", "extensions" : { "compartmentId" : "ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxxxx" } }
⇒ポリシー変更内容までは確認できませんが、どのポリシーがいつ変更されたかまでは確認可能です。
さらなる活用方法
今回はメール通知との連動方法をご紹介しましたが、OCIのFunctionサービスと連携させるとさらに活用の幅は広がるはず。
イベントサービスに対応するサービスは他にも沢山あるので、ぜひ色々と試してみてください。
参考情報
・Oracle Cloudではじめるサーバレス Oracle Functionsことはじめ
・[Oracle Cloud] Events のパラメータを、Oracle Functions 側で取得
・[Oracle Cloud] Object Storage のリージョン間自動コピーを、Oracle Functions で実現
・Oracle Cloud Infrastructure Databaseのバックアップが失敗したら通知させる方法
Leave a Reply