[OCI]OCIユーティリティのoci-notifyコマンドと通知サービスを利用してOSコマンドの実行結果をメールで通知してみた

# はじめに
OCIユーティリティのoci-notifyコマンドを使用すると、通知サービスを使用して簡単にシェルからメールでの通知を行うことができます。

ということで、やってみました。

# 1.Computeインスタンスの準備

今回はOracle Linux 7.9のComputeインスタンスを作成しました。

# 2.OCI CLIのインストールと設定
yumでOCI CLIをインストールします。

```
sudo yum install -y python36-oci-cli
```
oci setup configでOCI CLIの構成ファイルとキーペアを作成します。
OCIコンソールで事前にテナンシと使用するユーザのOCIDを確認しておきます。


```
[opc@work1 ~]$ sudo oci setup config
    This command provides a walkthrough of creating a valid CLI config file.

    The following links explain where to find the information required by this
    script:

    User API Signing Key, OCID and Tenancy OCID:

        https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#Other

    Region:

        https://docs.cloud.oracle.com/Content/General/Concepts/regions.htm

    General config documentation:

        https://docs.cloud.oracle.com/Content/API/Concepts/sdkconfig.htm


Enter a location for your config [/root/.oci/config]: 
Enter a user OCID: ocid1.user.oc1..xxxxxxxxxxxxxxxxxxxxxxx
Enter a tenancy OCID: ocid1.tenancy.oc1..xxxxxxxxxxxxxxxxxx
Enter a region by index or name(e.g.
1: ap-chiyoda-1, 2: ap-chuncheon-1, 3: ap-hyderabad-1, 4: ap-melbourne-1, 5: ap-mumbai-1,
6: ap-osaka-1, 7: ap-seoul-1, 8: ap-sydney-1, 9: ap-tokyo-1, 10: ca-montreal-1,
11: ca-toronto-1, 12: eu-amsterdam-1, 13: eu-frankfurt-1, 14: eu-zurich-1, 15: me-dubai-1,
16: me-jeddah-1, 17: sa-santiago-1, 18: sa-saopaulo-1, 19: sa-vinhedo-1, 20: uk-cardiff-1,
21: uk-gov-cardiff-1, 22: uk-gov-london-1, 23: uk-london-1, 24: us-ashburn-1, 25: us-gov-ashburn-1,
26: us-gov-chicago-1, 27: us-gov-phoenix-1, 28: us-langley-1, 29: us-luke-1, 30: us-phoenix-1,
31: us-sanjose-1): 9
Do you want to generate a new API Signing RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: Y
Enter a directory for your keys to be created [/root/.oci]: 
Enter a name for your key [oci_api_key]: 
Public key written to: /root/.oci/oci_api_key_public.pem
Enter a passphrase for your private key (empty for no passphrase): 
Private key written to: /root/.oci/oci_api_key.pem
Fingerprint: 01:65:5d:a3:71:d3:b1:d4:ed:49:69:95:bd:d5:98:56
Config written to /root/.oci/config


    If you haven't already uploaded your API Signing public key through the
    console, follow the instructions on the page linked below in the section
    'How to upload the public key':

        https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#How2


[opc@work1 ~]$
```

# 3.APIキーの作成
OCI CLIからサービスにアクセスするためのAPIキーを作成します。
2.の手順で作成された公開鍵ファイルを開き、内容をコピーします。

```
sudo vi /root/.oci/oci_api_key_public.pem
```

OCIコンソールにログインし、ユーザの詳細画面に移動します。
![スクリーンショット 2021-07-07 7.50.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/0c18d049-dc68-c9a6-8d05-ccab0af6046f.png)

リソース欄の「APIキー」をクリックします。
![スクリーンショット 2021-07-07 7.51.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/45872534-0b85-6053-258f-890c098d7dab.png)

「APIキーの追加」をクリックします。
![スクリーンショット 2021-07-07 7.53.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/c021e4df-e5a7-760e-bbc6-de223d819194.png)

「公開キーの貼り付け」を選択して、コピーした公開鍵の内容をペーストし、「追加」をクリックします。
![スクリーンショット 2021-07-07 7.55.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/f4b6614a-2c2f-41d6-5822-09e1ed185409.png)


# 4.通知サービスの準備
OCIメニュー → 開発者サービス → 通知をクリックします。
![スクリーンショット 2021-07-06 19.28.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/f92d1b5e-638e-2b52-8fac-f39656c9f4df.png)
通知の画面に移動します。
![スクリーンショット 2021-07-07 7.14.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/f6a2920c-2ba0-fed9-290a-0eb0a92e2366.png)

まず最初にトピックを作成します。
「トピックの作成」をクリックします。
![スクリーンショット 2021-07-07 7.14.51のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/e9be6010-bb83-cd50-3800-5e911c34e159.png)
トピックの名前を入力し、「作成」をクリックします。
![スクリーンショット 2021-07-07 7.16.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/eb2c94e0-af6b-0f3a-d8fa-899b0f47f605.png)
トピックが作成されました。
![スクリーンショット 2021-07-07 7.16.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/80c71740-4753-0623-850b-dfe7a1727b5a.png)
oci-notifyの構成で使用するために、トピックのOCIDをメモしておきます。

次にサブスクリプションを作成します。
「サブスクリプション」をクリックします。
![スクリーンショット 2021-07-07 7.16.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/9276faf4-6541-f893-1acd-01c87f2e29d4.png)
「サブスクリプションの作成」をクリックします。
![スクリーンショット 2021-07-07 7.17.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/b215b73c-0b77-14e9-2f18-809b99bb6e9b.png)
サブスクリプション・トピックは先程作成したトピックを、プロトコルは「電子メール」を選択し、「電子メール」には通知の送信先となるメールアドレスを入力して、「作成」をクリックします。
![スクリーンショット 2021-07-07 7.19.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/d2f1da7a-053a-87b6-6e05-2847c7419ba1.png)
サブスクリプションが作成されました。
この時点で登録したメールアドレスに確認メールが送信されてます。
メールの受信者がメール内のリンクをクリックして登録を許可するまで、サブスクリプションの状態は「Pending」となっています。
![スクリーンショット 2021-07-07 7.21.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/81c2e882-7678-05dd-d146-ba57de1d292a.png)
こちらのようなメールが登録したメールアドレス宛に送信されますので、「Confirm Subscription」をクリックして登録を完了します。
![スクリーンショット 2021-07-07 7.22.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/4c9427ff-759f-91e4-056c-ac12adf43820.png)
メール受信者による確認が完了すると、サブスクリプションの状態が「Active」に変わります。
![スクリーンショット 2021-07-07 7.24.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/166d3638-ddf7-6401-d007-e3ec06d5f774.png)
以上で通知サービスの準備が整いました。

# 4.oci-notify利用の準備
2.の手順で作成されたOCI CLIの構成ファイルを、デフォルトのoci-utilsの構成ファイルの場所にコピーします。

```
sudo cp /root/.oci/config /etc/oci-utils/oci_cli.conf
```

oci-notifyを構成します。
oci-notify -c <使用する通知サービスのトピックのOCID>で、メール送信に使用する通知サービスのトピックを登録します。

```
[opc@work1 ~]$ sudo oci-notify -c ocid1.onstopic.oc1.ap-tokyo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Configured OCI notification service topic OCID.
Publishing message 'oci-utils: Notification enabled on instance Work1'
Published message 'oci-utils: Notification enabled on instance Work1'
[opc@work1 ~]$
```
登録内容は/etc/oci-utils/oci.confに保存されます。

トピックが登録されると、こちらのような通知が有効化された旨のメールが送信されます。
![スクリーンショット 2021-07-07 8.17.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/2d755595-d6ba-57c6-7844-5e96491e0fed.png)

# 5.oci-notifyコマンドでメール送信
dfコマンドの実行結果をファイルに出力し、その内容をoci-notifyコマンドで通知サービスに渡してメールで送信してみます。
oci-notifyで通知サービスを利用する際のコマンドは以下のとおりです。

```
oci-notify -t "メールのサブジェクト" -f <通知内容として送信するファイル名>
```

件名を「Result of df -k」とし、dfコマンドの実行結果（df_result.txt）を通知サービスに渡してメールを送信します。


```
[opc@work1 ~]$ df -k > df_result.txt
[opc@work1 ~]$ sudo oci-notify -t "Result of df -k" -f df_result.txt
Publishing message 'Work1: Result of df -k'
Published message 'Work1: Result of df -k'
[opc@work1 ~]$
```

メールボックスを確認すると、こちらのメールが送られてきました。
![スクリーンショット 2021-07-07 8.25.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/d744294e-074c-b97c-c469-beed0f837192.png)


なお、oci_notifyの実行ログは

```
/var/log/oci-notify.log
```
に出力されます。

# まとめ
OCIユーティリティのoci-notifyコマンドと通知サービスを利用して、シェルから簡単にメールでの通知が行えることがわかりました。

# 参考情報
https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/cliinstall.htm
https://docs.oracle.com/ja-jp/iaas/Content/Compute/References/ociutilities.htm#OCI_Utilities