はじめに
OCI の オブジェクト・ストレージは、オブジェクトの取得時に常に最新のデータを取得できるという強固な一貫性を持ち、データベースのバックアップファイルや、ログファイル等の保管場所としてもよく使用されます。
また、オブジェクト・ストレージは、イベントサービス、通知サービスと組み合わせる事により、オブジェクトをアップロードした場合や、更新、削除した場合にも、通知する事が可能となっています。
今回は、その通知設定方法について手順を確認してみたいと思います。
手順1. オブジェクト・ストレージの設定
バケット作成
まずは、オブジェクト・ストレージにバケットを作成します。
コンソール画面の左上のハンバーガーメニューから「オブジェクト・ストレージ」-「オブジェクト・ストレージ」を押下します。
オブジェクトストレージ画面で「バケットの作成」ボタンを押下し、バケット情報を設定します。
「バケット名」を入力し、今回はオブジェクト・ストレージの通知設定を行うので「オブジェクト・イベントの出力」にチェックを入れて、「バケットの作成」ボタンを押下します。
手順2. 通知サービス の設定
トピックの作成
次に、通知サービス のトピックを作成します。
コンソール画面の左上のハンバーガーメニューから「アプリケーション統合」-「通知」を押下します。
表示された画面の「トピックの作成」ボタンからトピック名を入力して、トピックを作成します。
今回は NotifyObject
という名前のトピックを作成しました。
サブスクリプションの作成
トピック作成後画面のトピック名リンクを押下してトピックの詳細画面へ遷移し、「サブスクリプションの作成」ボタンを押下します。
サブスクリプションの作成画面で通知方法を設定します。
現時点で、通知設定として選択できるのは、以下となります。
- HTTPS(カスタムURL)
- PagerDuty
- Slack
- Function
- 電子メール
それぞれについての詳細はこちらのリファレンスの「サブスクリプションを作成するには」をご参照下さい。
今回は、電子メールを選択し、通知先とするメールアドレスを設定します。
サブスクリプションを作成後は、「Pending」状態となります。
電子メールを選択した場合は、通知先に設定したメールアドレスに以下のようなメールが送信されます。
メール本文にある「Confirm subscription」リンクをクリックすると、以下のような画面が表示されサブスクリプションが有効になります。
コンソール画面のサブスクリプションも、「Pending」状態であったのが、「Active」に変更されています。
手順3. イベントサービス の設定
ルールの作成
コンソール画面の左上のハンバーガーメニューから「アプリケーション統合」-「イベント・サービス」を押下します。
ルールの編集画面で以下のように設定します。
- 表示名:ルールの表示名を設定します。今回は、
UpdateObject
と設定しています。 - ルール条件
- 「イベント・タイプ」を選択します。
- サービス名:「Object Storage」を選択します。
- イベント・タイプ:オブジェクトの新規登録、更新、削除時に通知するよう「Object-Create」「Object-Update」「Object-Delete」の3つを選択しています。
- アクション
- アクション・タイプ:通知サービスと紐づける為、「通知」を選択します。
- 通知コンパートメント:
NotifyObject
トピックを作成したコンパートメントとなる「blog」を選択しています。 - トピック:作成した
NotifyObject
トピックを選択します。
通知の確認
以上の手順で作成したバケットにオブジェクトの登録、更新、削除時に、設定した通知先メールアドレスにメールが送信されます。
まずは、オブジェクト・ストレージに作成した「blog」バケットに、適当なファイル「test.txt」をアップロードしてみると、以下のようなメールが送信されました。
- 件名:OCI Event Notification :com.oraclecloud.objectstorage.createobject
- 送信元メールアドレス:noreply@notification.ap-tokyo-1.oraclecloud.com
JSON形式で様々な項目があるので、少し分かりにくいかもしれませんが、メールの件名と、本文の「eventType」に含まれる “objectstorage.createobject” から、新しいオブジェクトがアップロードされたと判断できます。
また、アップロードされたファイルは「”bucketName” : “blog”」と「”resourceName” : “test.txt”」から「blog」バケットの「test.txt」である事が分かります。
次にアップロードしたオブジェクトを更新してみました。
先程、アップロードしたファイルと別のファイルを「test.txt」としてアップロードしました。
送信されたメールは以下の通りです。
- 件名:OCI Event Notification :com.oraclecloud.objectstorage.updateobject
- 送信元メールアドレス:noreply@notification.ap-tokyo-1.oraclecloud.com
今度はオブジェクトの更新なので、メールの件名と、本文の「eventType」に含まれる文字が “objectstorage.updateobject” となっています。
また、オブジェクトの追加時と同様に「bucketName」と「resourceName」から更新されたオブジェクトが確認できます。
最後に、オブジェクトの削除に関しても確認してみます。
送信されたメールは以下の通りです。
- 件名:OCI Event Notification :com.oraclecloud.objectstorage.deleteobject
- 送信元メールアドレス:noreply@notification.ap-tokyo-1.oraclecloud.com
メールの件名と、本文の「eventType」に含まれる文字が “objectstorage.deleteobject” となっています。
「bucketName」と「resourceName」から削除されたオブジェクトが何であるか判断できます。
まとめ
複数のサービスを使用する必要があるものの、単純な手順でオブジェクトの更新時に通知する事ができたように思います。
今回は通知方法として電子メールを選択しましたが、Slackにも同様のJSON形式で通知される事を確認しています。
1つ気になった点として、コンソールからオブジェクトの名前変更をした場合には通知されませんでしたので、全てのイベントに通知対応がされている訳ではないという点は注意が必要です。
また、現在はバケット単位でしか、オブジェクトの更新通知設定ができない為、オブジェクトを格納するバケットを用途に応じて分けるという事も重要になると思います。
先々月(2020年4月)のリリースでは、オブジェクトのバージョン管理もできるようになり、オブジェクト・ストレージの使用用途としては、更に幅が広がったのではないでしょうか。
今後も、益々便利機能が追加されていく事を期待したいと思います。