Cloud Service
OCI Events
OCI リソースの状態変化(CloudEvents 形式)をルールで検知し、Functions / Notifications / Streaming へ自動連携するサーバーレスのイベントサービス。AWS の Amazon EventBridge に相当。
- 1.OCIリソースの状態変化を条件で振り分けるイベント中継所。
- 2.Functions/Notifications/Streaming へ疎結合に自動連携。
- 3.配信は最低1回で重複前提、アクションは冪等に作る。
解決する課題
OCI リソースの状態変化を起点に、運用作業や連携処理を自動化したいというニーズに応えます。
- 「S が起きたら T を実行」をポーリングなしで疎結合に組みたい
- 多数の OCI サービスが出すイベントを条件で振り分け、必要なものだけ処理したい
- 「オブジェクトがアップされたら関数を起動」「重大イベントをメール/Slack で即通知」を接着剤的に書きたい
- 監査やセキュリティ対応をイベント駆動で自動化したい(例: バケットがパブリック化されたら是正関数を起動)
主要概念と用語
- イベント(Event): OCI リソースの状態変化を表す JSON メッセージ。CloudEvents(CNCF) 仕様に準拠し、
eventTypesourcedata(リソース OCID・コンパートメント等)などの属性を持つ - イベントタイプ(Event Type): 各サービスが定義する識別子(例:
com.oraclecloud.objectstorage.createobject)。Oracle が定義したものを購読する(任意の独自アプリイベントを直接投入する仕組みではない点が EventBridge と異なる) - ルール(Rule): 「**条件(Condition)**に一致したイベント」を「アクション(Action)」へ流す定義。コンパートメント単位で作成
- 条件(Condition): イベントタイプや、
data内の属性値(タグ・リソース名など)でフィルタする JSON。属性・値のペアで一致判定 - アクション(Action): ルールのターゲット。Functions / Notifications(ONS)/ Streaming の3種類のみ
- Notifications(ONS): メール・Slack・PagerDuty・カスタム HTTPS・SMS などへ同報するサブスクリプション基盤
- Connector Hub(Service Connector): Events とは別サービス。ログ/メトリクス/イベントを継続的に他サービスへ転送するパイプライン
仕様・制限・クォータ
- 対応サービスは Object Storage / Database / Compute / Networking / Functions / IAM など多数。ただしイベントを発行するサービス/イベントタイプは Oracle 側が定義したものに限る
- 1ルールに複数アクションを設定可能。条件は内容ベース(属性・値でフィルタ)
- 配信はニアリアルタイムかつ at-least-once(最低1回)。同一イベントが重複配信されうるため、アクション側は冪等に作る
- リソース(ルール)は IAM ポリシー+コンパートメントで管理し、テナンシ/リージョン単位のサービス制限があり引き上げ申請が可能
- Events 自体にはスケジュール(cron)機能はない。定期実行は別サービスの Resource Scheduler や Functions+外部トリガーで実現する(EventBridge Scheduler に相当する機能は分離されている)
EventBridge はカスタムバスへ任意の独自イベントを PutEvents で投入できますが、OCI Events が購読するのはOracle 定義のリソースイベントが中心です。アプリ固有のイベントを流したい場合は Streaming(Kafka 互換) や Queue を使うのが定石です。
内部の仕組み
OCI リソースで状態変化が起きると、各サービスが CloudEvents 形式のイベントを Events サービスへ発行します。Events は受信したイベントを、コンパートメント内のルールの条件(イベントタイプや data 属性値)と突き合わせ、一致したルールのアクション(Functions / Notifications / Streaming)へ配信します。
- Notifications はサブスクライバ(メール・Slack 等)へ同報、Functions はサーバーレス処理を起動、Streaming は順序付きの取り込みに向く——用途でアクションを選ぶ
- 配信は at-least-once。ネットワーク再試行などで重複が起こりうるため、関数側で処理済み判定を入れて冪等にする
- 条件は単なる同報ではなくイベントの中身でルーティングできるのが要点。SNS 的な単純同報の Notifications と組み合わせて使う
Events は at-least-once 配信。同じイベントが2回届いても安全なように、アクション(特に Functions)ではイベント ID やリソース状態をキーに重複実行を抑止しましょう。
設計パターン / ベストプラクティス
- イベント駆動の自動化: 「Object Storage への putObject → Functions で画像変換」など、ポーリングを排した疎結合連携
- セキュリティ自動是正: 「バケットがパブリック化された/NSG が変更された」イベントを検知し、是正用 Functions を起動
- 重大イベントの即時通知: DB バックアップ失敗・インスタンス停止などを Notifications でメール/Slack/PagerDuty へ
- 取り込みの分離: 高頻度・順序保証が要るなら Streaming をアクションにして後段でまとめて処理(バックプレッシャ吸収)
- 冪等+リトライ前提: アクションは冪等に。長時間処理は Functions から Streaming / Queue に逃がして再試行可能に
- 継続転送が目的なら Connector Hub: 単発ルーティングは Events、ログ/メトリクスの常時パイプラインは Connector Hub と使い分け
運用・監視
- ルールにマッチしない → 条件(イベントタイプ・属性値) が実際のイベント JSON と一致しているか検証。コンパートメント違いにも注意
- 配信されない → アクション側の IAM ポリシー(Events がそのリソースを呼べるか)と対象リソースの状態を確認
- メトリクスは OCI Monitoring(名前空間
oci_events)。RuleMatches(条件一致数)や配信成功/失敗系メトリクスで挙動を可視化 - ルールの作成・変更・削除は Audit ログで追跡
- 関数側の失敗は OCI Logging で関数ログを確認(重複起動・タイムアウトの切り分け)
コスト
OCI Events のルール評価・配信自体は基本的に追加料金なしで、実際に課金されるのは起動先(アクション)のサービスです。コストはアクションの選び方で決まります。
| 課金対象 | 考え方 | コスト最適化のヒント |
|---|---|---|
| Events(ルール評価/配信) | ルールのマッチ・配信自体は基本無料 | 条件で早めに絞り、不要イベントを後段へ流さない |
| Functions(アクション) | 呼び出し回数 + 実行時間(GB秒)で課金 | 処理を軽量・短時間に。無駄な起動を条件で抑止 |
| Notifications(アクション) | 配信メッセージ数/エンドポイント種別で課金 | 通知は重大イベントに限定し過剰通知を避ける |
| Streaming(アクション) | パーティション時間 + 取り込み/取得量で課金 | 必要なパーティション数に最適化し過剰確保を避ける |
セキュリティ
- IAM ポリシー+コンパートメントでルール作成権限と、Events がアクションを起動する権限を最小化する
- Events から Functions/Streaming/Notifications を呼ぶには、そのサービスへの許可ポリシーが必要(
allow service ...形式)。過剰な権限を付けない - 機密データを含むイベントは、転送先(Streaming トピックや関数ログ)での露出範囲に注意。秘密情報は Vault(Secrets) で扱う
- セキュリティイベント(パブリック化・権限変更)を検知して自動是正する“防御的”な使い方が有効
ルールのアクション(Functions)に広すぎる動的グループ/ポリシーを与え、関数が無関係なリソースまで操作できる状態は NG。最小権限で「そのルールの目的に必要なリソースだけ」を許可し、機密情報は関数の config に直書きせず Vault(Secrets) から取得しましょう。
関連サービス・比較(AWS との対応)
| 観点 | OCI Events | Amazon EventBridge |
|---|---|---|
| 位置づけ | OCI リソースイベントのルーティング | イベントバス型のルーティング基盤 |
| イベント形式 | CloudEvents(CNCF 標準) | 独自 JSON(detail 構造) |
| イベント源 | Oracle 定義の OCI リソースイベント中心 | AWS/SaaS/カスタム(PutEvents で任意投入可) |
| 振り分け単位 | ルール + 条件(属性/値) | ルール + イベントパターン |
| アクション(ターゲット) | Functions / Notifications / Streaming の3種 | Lambda/SQS/SNS/Step Functions など多数 |
| スケジュール実行 | Events外(Resource Scheduler 等) | EventBridge Scheduler に内蔵 |
| 配信保証 | at-least-once(重複あり前提) | at-least-once(リトライ/DLQ) |
| 権限付与 | IAM ポリシー + コンパートメント | IAM + リソースベースバスポリシー |
ハンズオン / CLI例
OCI Events の操作は OCI CLI(oci events)で行います。条件(condition)とアクション(actions)を JSON で指定してルールを作成します。
# Object Storage の putObject イベントを Functions に流すルールを作成
# condition: イベントタイプで絞り込み / actions: 起動する関数を指定
oci events rule create \
--compartment-id ocid1.compartment.oc1..xxxxx \
--display-name on-object-upload \
--is-enabled true \
--condition '{"eventType":["com.oraclecloud.objectstorage.createobject"]}' \
--actions '{"actions":[{"actionType":"FAAS","isEnabled":true,"functionId":"ocid1.fnfunc.oc1..xxxxx"}]}'
# 重大イベントを Notifications トピックへ通知するルール(メール/Slack 等へ同報)
oci events rule create \
--compartment-id ocid1.compartment.oc1..xxxxx \
--display-name notify-db-backup-failed \
--is-enabled true \
--condition '{"eventType":["com.oraclecloud.databaseservice.autonomous.database.backup.end"]}' \
--actions '{"actions":[{"actionType":"ONS","isEnabled":true,"topicId":"ocid1.onstopic.oc1..xxxxx"}]}'
# コンパートメント内のルールを一覧
oci events rule list \
--compartment-id ocid1.compartment.oc1..xxxxx \
--query "data[].{name:\"display-name\", enabled:\"is-enabled\", id:id}" --output table
# 既存ルールの条件を更新(属性値でさらに絞り込む例)
oci events rule update \
--rule-id ocid1.eventrule.oc1..xxxxx \
--condition '{"eventType":["com.oraclecloud.objectstorage.createobject"],"data":{"additionalDetails":{"bucketName":"prod-uploads"}}}'
OCI Service
OCI Eventsを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
アプリ統合
比較で見る軸
クラウド: OCI / カテゴリ: アプリ統合 / 難易度: intermediate
導入後に効く点
Functions/Notifications/Streaming へ疎結合に自動連携。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- OCI
- カテゴリ
- アプリ統合
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- operational / reliability / security
判断チェックリスト
- 自社の用途が「アプリ統合 / operational」に近いか確認する。
- 強みである「OCIリソースの状態変化を条件で振り分けるイベント中継所。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。
他クラウドの同等サービス
役割が近いサービスです。設計の置き換えや比較検討の参考に。