はじめに
OCIではEventsサービスを利用することで、OCIリソース上で発生したイベントを契機とした処理を実行できます。
また、OCI Functionsと組み合わせることで、サーバレス構成によるイベント通知や自動化処理を実装することが可能です。
OCI Notificationsサービス単体でもSlack通知は可能ですが、OCI Functionsを利用することで、通知内容の加工や条件分岐など、より柔軟な通知制御を実装できます。

本記事では、ComputeインスタンスのイベントをOCI Eventsで検知し、OCI Functionsを利用してSlackへ通知を行う構成を検証します。
OCI Eventsとは
OCI Eventsは、OCIリソース上で発生した状態変更イベントを検知し、任意のアクションへ連携可能なサービスです。
Computeインスタンスの停止・起動だけでなく、Object StorageへのファイルアップロードやVCN関連イベントなど、様々なイベントを契機として利用できます。
また、OCI FunctionsやNotificationsなどと連携することで、イベント駆動型の運用自動化を実現可能です。
前提条件
本検証を実施するにあたり、事前に以下の環境および設定を準備しています。
- OCIテナンシおよびコンパートメント作成済み
- OCI Functionsが利用可能なVCNおよびSubnet作成済み
- Slack Workspace利用可能
- Computeインスタンス作成済み
- OCI Functions実行用Dynamic GroupおよびIAM Policy設定済み
- OCI Functions実行用Subnetにて、NAT Gateway経由でインターネットへ接続可能なルート設定済み
設定方法
Slack App作成と設定
Slack APIサイトへアクセスします。
https://api.slack.com/apps
「App Name」に任意のアプリ名を入力し、通知先として利用するWorkspaceを選択して「Create App」をクリックします。

左側メニューより「Incoming Webhooks」をクリックし、「Activate Incoming Webhooks」を「On」に変更します。

画面下部の「Add New Webhook」をクリックします。

通知先となるSlackチャンネルを選択し、「許可する」をクリックすると、Webhook URLが生成されます。

OCIコンソール事前設定
デプロイ実施前に、OCI上で事前準備を行います。
OCIコンソール上で「開発者サービス」→「ファンクション」へ移動し、アプリケーションを作成します。

- シェイプは「GENERIC_ARM」を選択します。
OCIコンソール画面右上のプロフィールアイコンをクリックし、「ユーザー設定」を選択します。

「トークンおよびキー」タブへ移動し、「トークンの生成」をクリックします。

任意のトークン名を入力し、「トークンの生成」をクリックします。

- このトークンは一度しか表示されないので注意してください。
OCIコンソール上で「開発者サービス」→「コンテナおよびアーティファクト」→「コンテナ・レジストリ」へ移動します。

- 名前:my-alerts/oci-slack-bot
- 可視性:Private
リポジトリ名/Functionコードを配置するディレクトリ名
環境設定(Code Editorターミナル)
OCI Functionsをデプロイするため、Fn CLIおよびContainer Registryの接続設定を実施します。
OCIコンソール右上の「Code Editor」をクリックします。

ターミナルを開き、以下のコマンドを実行して対象アプリケーションのコンパートメントを設定します。.
fn update context oracle.compartment-id [対象コンパートメントOCID]
続いて、以下のコマンドを実行し、作成したアプリケーションが表示されることを確認します。
fn list apps


以下のコマンドを実行し、Container Registryのアドレスを登録します。
fn update context registry nrt.ocir.io/[ネームスペース]/[リポジトリ名]
続いて、以下のコマンドを実行し、Registry情報が登録されていることを確認します。
fn list context

以下のコマンドを順番に実行し、Dockerへログインします。
docker login nrt.ocir.io
[ネームスペース]/[アカウントメール]

- パスワード入力時には、前項で生成した認証トークンを入力します。
- 「Login Succeeded!」と表示されることを確認します。
Functionコード作成
Slackへ通知を送信するPythonコードを作成します。
ターミナル上で以下のコマンドを順番に実行します。
fn init --runtime python oci-slack-bot
cd oci-slack-bot

requestsライブラリを利用するため、requirements.txtの最下部へ以下を追加して保存します。
requests

func.pyへ以下のコードを記載して保存します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import io import json import requests from fdk import response def handler(ctx, data: io.BytesIO = None): try: # 1. OCIから送信されたイベント情報を読み込みます。 body = json.loads(data.getvalue()) # 2. どのリソース(インスタンスなど)で発生した事象か、リソース名を取得します。 resource_name = body.get("data", {}).get("resourceName", "不明なサーバー") # イベントの種類(停止など)を取得します。 event_type = body.get("eventType", "イベント発生") # 3. Slackに送信するメッセージ内容を作成します。 slack_text = f"[OCI 通知]\nサーバー名: {resource_name}\nステータス: {event_type}\n確認が必要です!" # 4. SlackのWebhook URL(ここに自身のURLを ' ' の間に入れてください) slack_webhook_url = 'https://hooks.slack.com/services/YOUR/WEBHOOK/URL' # 5. 実際にSlackへメッセージを送信します。 requests.post(slack_webhook_url, json={"text": slack_text}) except (Exception, ValueError) as ex: print(str(ex)) return response.Response( ctx, response_data=json.dumps({"status": "completed"}), headers={"Content-Type": "application/json"} ) |
以下のコマンドを実行し、作成したFunctionをOCIへデプロイします。
fn -v deploy --app SlackNotificationApp
![]()
![]()
- Successfully created functionと表示されることを確認します。
Events Service設定
OCIコンソール左上メニューより「監視および管理」→「イベント・サービス」→「ルール」へ移動します。

「Create Rule」をクリックし、イベント発生条件を設定します。

- イベント・タイプ:「Instance – Action Begin」を選択します。
- 条件一致時のアクションとして、前項で作成したFunctionを設定します。
本設定では、Computeインスタンス停止・再起動実行時点で通知を送信します。
動作確認
Computeインスタンスを起動・停止し、Slackへ通知が送信されることを確認します。


まとめ
本記事では、OCI EventsおよびOCI Functionsを利用し、Computeインスタンスの停止イベントをSlackへ通知する構成を検証しました。
OCI Eventsを利用することで、OCIリソース上で発生したイベントを契機とした通知や自動化処理を実装できます。
また、Events Ruleでフィルタ条件を設定することで、特定リソースのみを通知対象とすることも可能です。
OCI Functionsと組み合わせることで、サーバレス構成による柔軟な運用自動化を実現できるため、監視通知や運用オペレーション自動化用途など幅広く活用できます。











