ノート:
- このチュートリアルではOracle Cloudにアクセスする必要があります。無料アカウントに登録するには、Oracle Cloud Infrastructure Free Tierの使用を開始するを参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を完了するときは、これらの値をクラウド環境に固有の値に置き換えます。
OCIアラートをSyniverse SMS APIと統合
イントロダクション
このチュートリアルでは、CPU使用率に基づいてアラートを作成し、定義したしきい値に達したときにSMSアラートを送信するように「同期」を構成します。
このソリューションでは、Oracle Notifications Service (ONS)を使用して、イベントおよびアラームの通知を、Syniverse SMS APIをコールできる関数に配信してSMSメッセージを送信します。すべてがパラメータ化された本番環境に対応したソリューションを構築し、Object Storeも含まれており、ここでは、Syniverse API資格情報を格納するためにSMSとOracle Vaultを送付するために電話番号を格納しました。
通知アラートを受信する1つのトピックと、Oracle関数をコールするそのトピックのサブスクリプションを持つONSを作成します。モニタリング・アラームを構成します。たとえば、CPU使用率が70%を超えると、Oracleファンクションによって、SMSを送信するためにSyniverseエンドポイントをコールするONSがトリガーされます。
次の図は、この動作を示しています。
SyniverseアカウントおよびAPIキーの作成
-
Syniverse Developer Communityに移動し、アカウントを作成します。
-
Syniverseアカウントにサインインし、「アプリケーション」メニューに移動し、「新規作成」をクリックします。
-
次を入力します:
- アプリケーション名: oci
- 説明: OCIアラートまたはOCIログを含むリアルタイムSMS
- アカウント:最初のアカウントを選択します
-
アプリケーションを作成したら、アプリケーション名をクリックし、「認証キー」を展開してAPIの詳細を表示します。この情報は、Oracleファンクションおよびボールトで使用します。
詳細は、ここを参照してください。
OCIコンパートメントの作成
-
管理者としてOCIコンソールにサインインし、左上隅のメニューから「アイデンティティ」、「コンパートメント」の順に選択します。
-
「コンパートメントの作成」をクリックし、次の例を使用してコンパートメントを作成します:
- 名前: syniverse_compartment
- 親コンパートメント:コンパートメントを選択します(既存のコンパートメントの子にする場合は、関連する親コンパートメントを選択し、それ以外の場合はデフォルトのルート・コンテナを受け入れます)
Oracle Vaultの作成
-
左上隅のメニューから、「セキュリティ」、「ボールト」の順に選択します。
-
作成したsyniverse_compartmentを選択します。
-
「ボールトの作成」をクリックし、syniverse_api_credentials名でボールトを作成します。
-
ボールトを選択し、「キーの作成」をクリックして、syniverse_token名でキーを作成します。
-
左側のナビゲーション・ペインの「リソース」の下にある「シークレット」リンクをクリックします
-
「シークレットの作成」をクリックし、次の例を使用します:
- 名前: secret_token
- 暗号化キー:以前に作成したsyniverse_tokenを選択します
- シークレット・コンテンツ:ここでは、アクセス・トークンをSyniverseから追加する必要があります
-
シークレットのmy-secretをクリックし、シークレットのOCIDをコピーし、func.yamlファイルの値を置き換えます
Oracle Vaultの動的グループを作成します。
-
左上隅のメニューから、「アイデンティティ」、「動的グループ」の順に選択します。
-
「動的グループの作成」をクリックし、次の例を使用します。
- 名前: Syniverse-secret-group
- ルール:任意の{instance.compartment.id = '
'}
バケットの作成およびオブジェクト・ストレージへのファイルのアップロード
-
バケットの作成
-
左上隅のメニューから、「コア・インフラストラクチャ」、「オブジェクト・ストレージ」の順に選択します。
-
作成したコンパートメントsyniverse_compartmentを選択します。
-
「バケットの作成」をクリックし、syniverse_phone_target_list名でバケットを作成します
-
-
電話番号を含むファイルを作成してアップロードします。このファンクションにはオブジェクト・ストア依存性があります。これは、受信者電話でファイルを読み取り、SMSを送信します。
-
numbers.txtというローカル・ファイルを作成し、ケースに使用する電話番号を追加します。ファイルはスペースなしでコンマで区切る必要があります。
-
オブジェクト・ストレージの詳細画面で、「オブジェクトのアップロード」をクリックし、アップロードするnumbers.txtファイルを選択します。たとえば、number.txtファイルには次のようなものが含まれます。
+3530871231234, +35308712312345
オプションで、このバケットまたはファイルへのアクセスを数人に制限するポリシーを追加できます。
-
-
Oracle Function Read Object Storageの動的グループを作成します。
-
左上隅のメニューから、「アイデンティティ」、「動的グループ」の順に選択します。
-
「動的グループの作成」をクリックし、次の例を使用します。
- 名前: fn-obj-store-group
- ルール: ALL {resource.type = 'fnfunc'、 resource.compartment.id = '
'}
-
-
この動的グループのポリシーを作成します。
-
左上隅のメニューから、「アイデンティティ」、「ポリシー」の順に選択します。
-
「ポリシーの作成」をクリックし、次の例を使用します:
-
名前: fn-obj-store-list-policy
-
ステートメント:ポリシー・ビルダーでCutmomize(詳細)をクリックします
allow dynamic-group fn-obj-store-list to manage all-resources in compartment my-compartment
-
-
仮想クラウド・ネットワーク(VCN)の作成
-
左上隅のメニューから、「コア・インフラストラクチャ」、「ネットワーキング」、「仮想クラウド・ネットワーク」の順に選択します。
-
作成したコンパートメントsyniverse_compartmentを選択します。
-
「VCNウィザードの起動」をクリックし、「インターネット接続を使用したVCN」を選択して「VCNウィザードの起動」をクリックします。
-
VCN名を追加し、すべてのデフォルト値を保守します。
-
「次」および「確認」をクリックして、VCNを作成します。
Oracleファンクションの作成
-
左上隅のメニューから、「開発者サービス」、「関数」の順に選択します。
-
作成したコンパートメントsyniverse_compartmentを選択します。
-
「Create Application」をクリックして、syniverse_notification名でアプリケーションを作成します。作成したコンパートメント、VCNおよびサブネットを選択します。
-
クラウド・シェルの起動
-
リージョンのコンテキストを使用します:
fn list contextfn list context fn use context us-phoenix-1
-
ファンクションのコンパートメントIDでコンテキストを更新します:
fn update context oracle.compartment-id <**compartment-id**>
-
使用するレジストリの場所でコンテキストを更新します:
fn update context registry phx.ocir.io/<tenancy_name>/[YOUR-OCIR-REPO]
fxを3桁のリージョン・コードに置き換えます。
-
「認証トークンの生成」をクリックします。
Auth Tokenをパスワードとして使用してレジストリにサインインします:
docker login phx.ocir.io <-- Replace phx with the three-digit region code
次の情報を要求されます:
- ユーザー名: tenancyname/username
- パスワード:パスワードの作成
ノート: Oracle Identity Cloud Serviceを使用する場合、ユーザー名はtenancyname/oracleidentitycloudservice/usernameです。
-
「hello-world」ボープレート・ファンクションを生成します。
fn init --runtime python syniverse
この関数は、単純なfn pythonの例でフォルダ「同期」を作成します。
ファイルの内容を次のコードで置き換えます。
-
次のスニペットに示すように、必要なPythonモジュールをインポートします。
import io import os import oci import json import requests import logging import datetime import base64 from fdk import response
-
アパート・データを解析し、Syniverse APIを起動してSMSを送信するファンクションを定義します。
if "body" in log: body = log.get("body") else: body = "" if "timestampEpochMillis" in log: time_in_millis = log.get("timestampEpochMillis") / 1000.0 dt = datetime.datetime.fromtimestamp(time_in_millis).strftime('%Y-%m-%d %H:%M') body = body + "\ntime " + dt else: body = body + ""
-
Syniverse APIを必須ペイロードとともに起動します。
secret_token = os.environ['SYNIVERSE_TOKEN'] response_token = read_secret_value(secret_client, secret_token) response_host = os.environ['SYNIVERSE_HOST'] response_channel = os.environ['SYNIVERSE_CHANNEL'] syniversehost = response_host syniversetoken = "Bearer " + response_token syniversechannel = "channel:" + response_channel payload = {} payload.update({"from":syniversechannel}) payload.update({"to":phone}) payload.update({"body":body})
構成部分には、オブジェクト・ストアの構成、ネームスペース、バケット名およびファイル名が、Syniverse構成、SyniverseエンドポイントURLおよびステップ3でボールトに保存した認証のトークンとともに含まれます。
func.yaml
schema_version: 20180708 name: syniverse version: 0.0.335 runtime: python entrypoint: /python/bin/fdk /function/func.py handler memory: 1024 timeout: 120 config: SYNIVERSE_TOKEN: <i><paste OCID secret_token here></i> SYNIVERSE_HOST: https://api.syniverse.com/scg-external-api/api/v1/messaging/message_requests SYNIVERSE_CHANNEL: <Syniverse API channel> SYNIVERSE_NAMESPACE: <OCI tenancy name> SYNIVERSE_BUCKET_NAME: synivese_phone SYNIVERSE_OBJECT_NAME: numbers.txt
Requirements.txt
fdk requests oci
通知サンプルjson
{"dedupeKey":"8303d9fb-e3b8-4d49-a888-64bef88f3dbd","title":"syniverse","body":"High CPU usage alert in \\"syniverse\\" instance","type":"OK_TO_FIRING","severity":"CRITICAL","timestampEpochMillis":1605622680000,"alarmMetaData":[{"id":"<i><paste OCID.alarm.oc1.phx.xxxxxxxxxxxxxxxxxxx></i>","status":"FIRING","severity":"CRITICAL","query":"CpuUtilization[1m]{resourceDisplayName = \\"instance-syniverse\\"}.max() > 70","totalMetricsFiring":1,"dimensions":[{"instancePoolId":"Default","resourceDisplayName":"instance-syniverse","faultDomain":"FAULT-DOMAIN-2","resourceId":"*<paste OCID here>*","availabilityDomain":"YVsm:PHX-AD-1","imageId":"<i><paste ocid1.image.oc1.phx.yyyyyyyyyyyyyyy></i>","region":"us-phoenix-1","shape":"VM.Standard.E3.Flex"}]}],"version":1.0}
Syniverse APIの詳細はここにあります。
-
-
アプリケーションを作成します。
fn create app syniverse --annotation oracle.com/oci/subnetIds= '["ocid1.subnet.oc1.phx.aaaaxxxxxxxxxxx"]'
サブネットOCIDのsubnetIdsを変更します。
-
ファンクションをデプロイします:
fn -v deploy --app syniverse
-
Oracle関数のポリシーを作成します。
-
左上隅のメニューから、「アイデンティティ」、「ポリシー」の順に選択します。
-
「ポリシーの作成」をクリックし、次の例を使用します:
- 名前: oracle_funcgion_policy
- ステートメント:ポリシー・ビルダーでCutmomize(詳細)をクリックします
allow service FAAS to use virtual-network-family in tenancy allow service FAAS to read repos in tenancy
-
コンピュート・インスタンスの作成
-
左上隅のメニューから、「コンピュート」、「インスタンス」の順に選択します。
-
「インスタンスの作成」をクリックし、次の例を使用します:
- 名前:インスタンス同期
- イメージ:デフォルトのOracle Linux 7.8のままにするか、「Oracle Linux 6.10」を選択します
- シェイプの変更:シェイプを選択します
- ネットワーキングの構成:作成したVCN、サブネット・コンパートメントおよびサブネットを選択します
- SSHキーの追加: ssh rsa公開キーを追加します
Oracle Notification Serviceのトピックおよびサブスクリプションの作成
-
左上隅のメニューから、「アプリケーション統合」、「通知」の順に選択します。
-
「トピックの作成」をクリックし、Syniverse_SNS_Notification名でトピックを作成します。
-
トピックを選択し、「サブスクリプションの作成」をクリックして、次の例を使用します:
- プロトコル:関数
- ファンクション・コンパートメント:作成したコンパートメントsyniverse_compartmentを選択します
- ファンクション・アプリケーション: syniverse_notification
- 関数:同期化
アラーム定義の作成
-
左上隅のメニューから、「モニタリング」、「アラーム定義」の順に選択します。
-
「アラームの作成」をクリックし、次の例を使用します。
- アラーム名: 70% CPU使用率
- アラームの重大度:クリティカル
- アラーム本文: OCIアラーム:同期。CpuUtilization: 70
-
「メトリックの説明」で、コンパートメントsyniverse_compartmentを選択し、「メトリック・ネームスペース」をoci_computeagentとして、「メトリック名」をCpuUtilizationとして、「間隔」を1m、「統計」を「最大」として選択します
-
「トリガー・ルール」で、「70より大きい値」を選択します
-
「通知」で、通知サービスとして「宛先サービス」を選択し、コンパートメントsyniverse_compartmentを選択し、Syniverse_SMS_Notificationとして「トピック」を選択します
コンピュート・インスタンスでストレス・テストを実行するストレス・ツールをインストールします。
-
コンピュート・インスタンスにSSHで接続します。
ssh -i ~/path/for/ssh-key.key opc@your_machine_ip
-
stressをインストールします。
sudo yum install stress
-
コマンドを実行してストレスを開始します。これにより、エンドツーエンドのデモ・フローが開始されます。
stress --cpu 20 --io 4 --vm 4 --vm-bytes 1024M --timeout 60s
トラブルシューティング
この項では、単純な電子メール・アラートを使用してソリューションのステータスを監視する方法を示します。
機能
ファンクションの詳細は、テクニカル・ドキュメンテーションを参照してください。
通知サービスのトピックおよびサブスクリプションの作成
-
左上隅のメニューから、「アプリケーション統合」、「通知」の順に選択します
-
「トピックの作成」をクリックし、my_function_status名でトピックを作成します
-
トピックを選択し、「サブスクリプションの作成」をクリックして、次の例を使用します:
- プロトコル:電子メールを送信し、電子メールでサブスクリプションを追加します
-
サブスクリプションは「保留」ステータスで作成されます。確認の電子メールを受信し、電子メールのリンクをクリックして電子メール・アドレスを確認する必要があります。
メトリックのチェックおよびメトリックからのアラーム定義の作成
-
左上隅のメニューから、「開発者サービス」、「関数」の順に選択します
-
モニターするアプリケーションおよび機能を選択します
-
「メトリック」ページで、「関数エラー」チャートに移動し、「オプション」をクリックしてこの問合せにアラームを作成します
-
名前を追加し、「通知」で「宛先サービス」を通知サービスとして選択し、コンパートメントyour_compartmentを選択し、「トピック」をmy_function_statusとして選択します
通知
この項では、単純な電子メール・アラートを使用して、Oracle Notification Service (ONS)のステータスをモニターする方法を示します。
詳細は、テクニカル・ドキュメンテーションを参照してください。
通知サービスのトピックおよびサブスクリプションの作成
-
左上隅のメニューから、「アプリケーション統合」、「通知」の順に選択します
-
「トピックの作成」をクリックし、my_ons_status名でトピックを作成します
-
トピックを選択し、「サブスクリプションの作成」をクリックして、次の例を使用します:
- プロトコル:電子メールを送信し、電子メールでサブスクリプションを追加します
-
サブスクリプションは「保留」ステータスで作成されます。確認の電子メールを受信し、電子メールのリンクをクリックして電子メール・アドレスを確認する必要があります。
メトリックのチェックおよびメトリックからのアラーム定義の作成
-
左上隅のメニューから、「アプリケーション統合」、「通知」の順に選択します
-
モニターする通知を選択し、左側のナビゲーション・ペインの「リソース」の下にある「メトリック」リンクをクリックします
-
アラームを追加するチャート(「失敗したメッセージ数」など)から、「オプション」をクリックし、この問合せにアラームを作成します
-
名前を追加し、「通知」で「宛先サービス」を通知サービスとして選択し、コンパートメントyour_compartmentを選択し、「トピック」をmy_ons_statusとして選択します
まとめ
このチュートリアルでは、Oracle Cloud InfrastructureおよびSyniverseの顧客が、Oracle Functionsを使用してOracle Cloud InfrastructureアラートからSMSを作成および送信するために、低オーバーヘッドの非常にスケーラブルなソリューションを構成する方法を示します。
謝辞
作成者 - Igor Aragao de Souza
その他の学習リソース
docs.oracle.com/learnの他のラボを調べるか、Oracle Learning YouTubeチャネルでさらに無料の学習コンテンツにアクセスします。さらに、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerにします。
製品ドキュメントは、Oracleヘルプ・センターを参照してください。
Integrate OCI alerts with Syniverse SMS API
F51375-01
December 2021
Copyright © 2021, Oracle and/or its affiliates.