はじめに
OCIを使っていると、
- Object Storageにファイルが置かれたことを検知したい
- 何か処理を走らせる前に「イベントが発生した」ことを確認したい
という場面がよくあります。
本連載では最終的に、Object StorageにCSVファイルをアップロードすると、そのイベントをトリガーとして処理が実行され、Autonomous Databaseにデータを取り込む構成を作成します。
ただし、いきなり複雑な構成を組むのではなく、まずは一番シンプルな入口として**「ファイルアップロードを検知して通知を受け取る」**ところから始めます。本記事はその第1回です。
今回やること
- Object Storageのバケットにファイルをアップロード
- アップロードイベントをEventsで検知
- Notificationsを使ってメール通知を受け取る
※本記事ではFunctionsやDatabaseとの連携は行いません。
前提条件
- OCIアカウントを作成済み
- Object Storage / Events / Notificationsを操作できる権限があること
- あらかじめObject Storageのバケットを作成済みであること
- 通知を受け取れるメールアドレスがあること
※IAMポリシーの詳細説明は省略します。
使用するOCIサービス
- Object Storage
- Events
- Notifications
1. Notificationsのトピック作成
まず、通知の受け皿となるトピックを作成します。
メニュー → 開発者サービス → 通知 → トピック から、「トピックの作成」を選択し、
下記の手順で登録します。
トピックの作成
- 表示名を入力(例:
MyMessage) - コンパートメントを選択して作成
サブスクリプション(メール)の追加
作成したトピックに対して、メール通知用のサブスクリプションを追加します。
- プロトコル:
電子メール - エンドポイント:通知を受け取りたいメールアドレス
登録後、確認メールが送信されるので必ず承認してください。
承認しない限り、通知は届きません。
2. Eventsルールの作成
次に、Object Storageのイベントを検知するルールを作成します。
メニュー → 監視および管理 → イベント・サービス(Events) → ルールから、
「ルールの作成」を選択し、下記の内容で設定します。
基本設定
- 表示名:object-upload-event
- コンパートメント:対象バケットが存在するもの
イベントタイプ
- サービス名:Object Storage
- イベントタイプ:Object - Create
※必要に応じてObject - Updateを追加しても構いません。
条件
最初はシンプルに、以下のいずれかで問題ありません。
- 特定のバケットのみを対象にする
- 条件を指定せず、すべてのバケットを対象にする
※本記事では詳細な条件設定は行いません。
アクション
- アクションタイプ:通知
- トピック:先ほど作成したトピック(MyMessage)
以上で、Object Storageへのファイルアップロードイベントを検知し、
Notificationsへ通知を送る設定は完了です。
※今回は、特定のバケットのみを対象にするため、
イベント条件に属性:bucketName = bucketNotificationを設定しています。
3. 動作確認
設定が完了したら、実際にObject Storageのバケットへファイルをアップロードします。
- CSVファイル
- テキストファイル
- 中身は何でも構いません
アップロード後、数秒〜十数秒で登録したメールアドレスに通知が届けば成功です。
4. この構成のポイント
- Object Storage単体ではイベント処理はできない
- Eventsが「イベント検知と振り分け」を担当する
- Notificationsは最も簡単に結果を確認できる出口
この構成ができていれば、通知先をFunctionsや他のサービスに差し替えることができます。
次回予告
次回は、通知の代わりにOCI Functionsを作成し、
- Pythonで処理を実装
- Autonomous Databaseに接続
- データを登録する
というFunctions単体の作り方にフォーカスします。
▶ 続きはこちら(第2回)
https://qiita.com/atwits/items/0992913310c4da18c99f
おわりに
OCIのイベント駆動構成は、最初から全体を組もうとすると分かりにくくなりがちです。まずはこのように**「イベントが発生していることを目で確認できる構成」**を作っておくと、後続の設計やデバッグがかなり楽になります。


