通知サービスは1か月あたり1,000通までのメール送信までは無償で使用することができ、AlwaysFree環境でも使用することができます。
今回は1時間ごとにDBCSの状態をメール通知することで、使いすぎを予防するために作成しました。
本当は起動している時だけ1時間ごとに通知したかったのですが、今回の記事は起動の有無によらず1時間ごとに送り続ける実装になっています。
DBCSを使う時だけcrontabを動かし、停止したら止めるという少々アナログな使い方をしていますが、通知がくると無駄遣いしなくなりました。
##手順で引用させて頂いた記事はこちら
■イベント・サービスと通知の使い方
[OCI] イベント・サービスと通知を使用してADBインスタンス起動通知
■DBCSの状態をCLIで取得する
Oracle Cloud にあるデータベースをコマンドライン(CLI)から起動・停止してみた
##作業手順
1.「通知」の設定
2.トピックの作成
3.サブスクリプションの作成・有効化
4.OCI CLIでDBノードの状態を取得
5.OCI CLIでmessageを送信
6.messeage送信の動作確認
7.crontabの設定
8.crontabの動作確認
###今回使用したサービスと技術
・OCI 通知サービス
・OCI CLI
・Oracle Database Cloud Service
・crontab
###著者の環境
Mac OS X 10.15.7
##1.「通知」の設定 ー 3.サブスクリプションの作成・有効化
[OCI] イベント・サービスと通知を使用してADBインスタンス起動通知
「「通知」の設定」〜「サブスクリプションの有効化」までを実行
##4.OCI CLIでDBノードの状態を取得
Oracle Cloud にあるデータベースをコマンドライン(CLI)から起動・停止してみた
「コマンド実行:状態確認」を参考にして状態を取得します。
なお、mikikaさん作成のmydb.shはとても便利なので、DBCSを使う際にとても便利です。
日々の運用に活用させて頂いています。
##5.OCI CLIでmessageを送信
OCI CLIでメッセージを送信するためのシェルを作成します。
--db-node-id のOCIDと、--topic-idのOCIDに「xxx...」の記載がありますが
こちらはユーザー固有の値となります。
$ #!/bin/bash
dbcs_node_get=$(oci db node get --db-node-id ocid1.dbnode.oc1.ap-tokyo-1.xxx...)
oci ons message publish --topic-id ocid1.onstopic.oc1.ap-tokyo-1.xxx... --title "DBCS Info" --body "${dbcs_node_get}"
crontabで使用できるように、実行権限を変更します。
chmod 755 myons.sh
通知サービス トピックIDのOCIDが記載されている箇所
「コンソール」ー「メニューバー」ー「アプリケーション統合」ー「通知」
##6.messeage送信の動作確認
myons.sh を実行し、通知サービスの「サブスクリプション」に登録したメールアドレスに通知が届くことを確認します。
##7.crontabの設定
- でメールが届いたので、あとはcrontabを設定するだけと思っていたところ、
著者の環境では普段crontabを使用していないため、色々と設定が必要でした。
###7-1.Macのシステム環境設定を変更
・「システム環境設定」ー「セキュリティとプライバシー」ー「フルディスクアクセス」を開く。
・ポップアップウィンドウ画面左下鍵のマークをクリックし、ユーザ名とパスワードを入力。
・「+」マークをクリック
・Shift+Cmd+G を入力し、「/usr/sbin/cron」を追加
###7-2.crontabを編集
$ crontab -e
###7-3.crontabに以下の内容を追加
PATHを追加しない場合、crontab実行時に「oci: command not found」が発生します。
5.の作業で、ターミナルから直接シェルを実行した場合は発生しないため要注意です。
PATH="/usr/local/bin/oci:/usr/local/bin:/usr/bin:/bin"
*/60 * * * * /Users/ipaccho/ons_instance_test.sh
「*/60」で60分ごとに実行します。
##8.crontabの動作確認
動作確認時はcrontabの設定を「/60」から「/1」に変更し、1分ことにメッセージを送ります。
動作確認後「*/60」に戻します。
下記を実行し、内容を確認します。
エラーがない場合は、下記のようなメッセージが表示されます。
メーラーにも、6.と同じ内容のメールが届きます。
cat /var/mail/ユーザー名
From ipaccho@iPaccho-no-MacBook-Pro.local Mon Jan 11 23:55:07 2021
Return-Path: <ipaccho@iPaccho-no-MacBook-Pro.local>
X-Original-To: ipaccho
Delivered-To: ipaccho@iPaccho-no-MacBook-Pro.local
Received: by iPaccho-no-MacBook-Pro.local (Postfix, from userid 501)
id 711983003AFAA7; Mon, 11 Jan 2021 23:55:07 +0900 (JST)
From: ipaccho@iPaccho-no-MacBook-Pro.local (Cron Daemon)
To: ipaccho@iPaccho-no-MacBook-Pro.local
Subject: Cron <ipaccho@iPaccho-no-MacBook-Pro> /Users/ipaccho/ons_instance_test.sh
X-Cron-Env: <PATH=/usr/local/bin/oci:/usr/local/bin:/usr/bin:/bin>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <LOGNAME=ipaccho>
X-Cron-Env: <USER=ipaccho>
Message-Id: <20210111145507.711983003AFAA7@iPaccho-no-MacBook-Pro.local>
Date: Mon, 11 Jan 2021 23:55:07 +0900 (JST)
{
"data": {
"message-id": "8a0e2ed9-7978-0f27-6f70-d514bab143d2",
"time-stamp": null
}
}
You have mail in /var/mail/ipaccho
##参考
Oracle Cloud Infrastructure Documentation Publishing Messages
Oracle Cloud Infrastructureドキュメント 通知の概要
Oracle Cloud Infrastructure Notifications
###再掲
■イベント・サービスと通知の使い方
[OCI] イベント・サービスと通知を使用してADBインスタンス起動通知
■DBCSの状態をCLIで取得する
Oracle Cloud にあるデータベースをコマンドライン(CLI)から起動・停止してみた