OCI EventsおよびOCI Functionsを利用したSlack通知の実装

OCI Compute
目次

はじめに

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

「Create New App」をクリックします。

「From scratch」を選択します。

「App Name」に任意のアプリ名を入力し、通知先として利用するWorkspaceを選択して「Create App」をクリックします。

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

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

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

生成されたWebhook URLをコピーします。

OCIコンソール事前設定

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

「アプリケーションの作成」をクリックします。

必要な値を設定して、「作成」をクリックします。

  • シェイプは「GENERIC_ARM」を選択します。

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

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

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

生成された認証トークンをコピーして保管します。

  • このトークンは一度しか表示されないので注意してください。

OCIコンソール上で「開発者サービス」→「コンテナおよびアーティファクト」→「コンテナ・レジストリ」へ移動します。

「リポジトリの作成」をクリックします。

必要な値を入力して、「作成」をクリックします。

  • 名前:my-alerts/oci-slack-bot
  • リポジトリ名/Functionコードを配置するディレクトリ名

  • 可視性:Private

環境設定(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へ以下のコードを記載して保存します。

以下のコマンドを実行し、作成したFunctionをOCIへデプロイします。
fn -v deploy --app SlackNotificationApp

  • Successfully created functionと表示されることを確認します。

Events Service設定

OCIコンソール左上メニューより「監視および管理」→「イベント・サービス」→「ルール」へ移動します。

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

  • イベント・タイプ:「Instance – Action Begin」を選択します。
  • 本設定では、Computeインスタンス停止・再起動実行時点で通知を送信します。

  • 条件一致時のアクションとして、前項で作成したFunctionを設定します。

動作確認

Computeインスタンスを起動・停止し、Slackへ通知が送信されることを確認します。

まとめ

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

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃OCIのサポート業務に従事している有資格者で構成された技術サポートチームがOCIに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次