OCI Data Integrationのタスク実行の開始、完了をメール通知させてみた

# はじめに
OCI Data Integrationは、他の多くのOCIサービスと同様にOCI Eventsサービス、Notificationサービスを使用してイベントや通知を利用することができます。タスク実行の開始、完了で通知させるよう試してみました。前提として必要なポリシーは設定済みとします。

# テスト用のタスクを作成
テスト用にObject StorageからCSVファイルをAutonmous Databaseにロードするデータ・ロードタスクを作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/0b13eed9-310a-ecb4-f3cc-91f234445202.png)

アプリケーションに公開をして実行できることを確認しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/bf242ff2-92ee-cd02-e1fe-adb043e6ad24.png)

# Notificationサービスでトピックとサブスクリプションを作成
OCI Eventsの結果を通知させるためにはOCI Notificationサービスでトピックとサブスクリプションを作成する必要があります。作成手順についてはOCIチュートリアルの[OCI DevOpsの事前準備](https://oracle-japan.github.io/ocitutorials/cloud-native/devops-for-commons/#1-1-%E3%83%88%E3%83%94%E3%83%83%E3%82%AF%E3%81%A8%E3%82%B5%E3%83%96%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E8%A8%AD%E5%AE%9A)が丁寧でしたので、そちらを参考にしていただければと思います。

# OCI Eventsサービスでルールを作成
OCIコンソールで監視および管理からイベント・サービスをクリックし、ルールを作成します。
表示名をOCIDI_task_ruleとし、以下の条件を設定しました。

条件：イベント・タイプ
サービス名：Data Integration
イベント・タイプ：Execute Task-Begin 、 Execute Task-End

アクションには、アクション・タイプを通知とし、コンパートメントとトピックには、事前にOCI Notificationサービスで作成したトピックとそのコンパートメントを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/f872ee4f-4dd0-930a-7286-aad90091d468.png)

# タスクを実行して通知を確認
OCI Data Integrationでデータ・ローダータスクを実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/5775e034-b652-8c86-10cd-f39613c0b568.png)

成功しました。Notificationのサブスクリプションで指定したメールアドレス宛には、開始イベント（cratetaskrun.begin)と完了イベント(createtaskrun.end）でメールが届いていることが確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/946cb5dc-ab1c-a3b1-11f3-6286c23fe3f3.png)

開始イベントの通知はこちらのような内容でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/d1fd2ad8-7063-3ff6-d9ea-7c9fd981d806.png)

完了イベントの通知はこちらのような内容でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/9fda6e38-60f7-f430-093e-7460ff694bf3.png)

# エラーになったタスクだけ通知をさせてみる
完了通知の内容にはさまざまな情報が記載されています。そのなかにtaskStatusという属性があります。この属性をEventsルールに指定して、エラーが発生したときのみ通知ができるか試してみます。

作成したルールを編集して、条件を追加します。属性名はプルダウンメニューから選択、属性値は手入力します。

条件：属性
属性名：taskStatus
属性値：ERROR 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/f28ecd9a-1cd5-9ba2-4ca6-145fe9a30cbf.png)

条件を追加後、保存します。TaskStatusの属性は開始イベントにはないので、エラーになれば、完了イベントだけが通知されるはずです。

それではデータ・ローダータスクを実行します。ターゲットの表には主キーがあるため、同じファイルのロードでは一意制約違反（ORA-00001）で失敗するというシナリオです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/e09107af-bbb3-3ccc-1043-fefde4227850.png)

エラーになりました。ログには想定通り、ORA-00001が出力されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/ef6a8d1d-0169-953c-c751-18f0e5bf8977.png)

通知の方も想定通り、完了イベントcreatetaskrun.endのみ届いています。（2行目は前回の完了イベントです）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/e6e1177a-89f0-5ff3-cdc3-ccd4bdfc9da1.png)

内容を見ると、taskStatusがERRORになっていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/3734ac23-1084-57c0-e796-3d167e40ad7a.png)

# おわりに
OCI Data Integrationのタスク実行の通知をOCI EventsサービスとOCI Notificationサービスと連携して行ってみました。設定や条件、属性のフィルタなどとても簡単に行えることがわかりました。
タスク実行の監視や、タスク実行結果を元にアクションを行うといったケースなどでご利用いただけるのではないかと思います。

# 参考資料
ドキュメント：[OCI Data Integrationのイベント](https://docs.oracle.com/ja-jp/iaas/data-integration/using/events-di.htm)