【OCI クラウド移行ガイド】AWS SNS＋CloudWatch AlarmをOCI Notifications+Alarmsで実装できるか検証してみた～監視&通知サービス編～

# OCIクラウド移行ガイドとは
オンプレミスやAWSなど、複数のプラットフォームからOracle Cloud Infrastructureへの移行プロジェクトに取り組んでいるクラウドエンジニア（@araidon,@kazunishi,@yama6）による、OCI移行手順をまとめたシリーズ記事です。
各回、サンプルワークロードから対象サービスを取り上げ、移行手順をガイドいたします。
まとめ記事は以下になります。

https://qiita.com/yama6/items/b197c0fe3ec75eb02637


# 移行したいサンプルワークロード
日々の業務でよく目にするサービスを中心に、サンプルワークロードとしてまとめてみました。このシリーズでは、主にAWSからの移行を取り上げます。
このワークロードは、ユーザがログインして、Web上で写真を共有するWebサービスをイメージしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/5d657078-030c-a277-544e-eebe031c74cf.png)

# 移行検討するサービス：SNS＋CloudWatch Alarm
近年のパブリッククラウド上のサーバの各種監視サービスは、対象クラウドのサービスを組み合わせて監視&通知を実装することが可能です。
（今回は上記ワークロードと少しズレてしまいますが）AWSだとSNS＋CloudWatch Alarmが有名ですが、それと同様のことがOCIでも実装できるのか試したいと思います。

# 作業の流れ
①SNSの設定
②動作確認用のAWS EC2インスタンス作成
③CloudWatch Alarmの設定
④SNS+CloudWatch Alarmの動作確認
⑤動作確認用のOCI Computeインスタンス作成
⑥アラームの通知先の作成(=Notifications)
⑦アラーム定義の作成(=Alarms)
⑧Notifications+Alarmsの動作確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/3e7dfb22-4e4a-7506-3b5d-34b88da86716.png)

# AWS側検証
## ①SNSの設定
Amazon SNS トピックの作成
　タイプ：Standard
　名前：任意
　表示名：任意
　その他：デフォルト値
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/c132444c-f696-9489-b048-128e32b19f51.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/a9b2e58a-8b3e-42ad-a7d8-d10c1a706ffa.png)

トピックの作成後、"サブスクリプションの作成"を実施
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/b78c4234-95da-ff5b-1174-a768c346f81c.png)
トピックARN：上記で作成したトピックを選択
プロトコル：今回は"Eメール"選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/cef718c9-2668-c2db-9e75-f7131ad36c76.png)

登録したEメール宛てに検証メールが来ますので"Comfirm Subscription"します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/18bed533-4984-ee75-d1b0-fd3081908b8b.png)

ステータスが"確認済み"になっていれば問題ありません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/7be7c9cb-e37a-a236-ed9f-c1126d6d6093.png)

## ②動作確認用のAWS EC2インスタンス作成
今回、CPUの使用率に閾値を設けて通知をする検証をするので検証インスタンスを作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/3d6fad46-7c0b-aae0-8793-547daa723b69.png)

## ③CloudWatch Alarmの設定
CloudWatch Alarmの作成をします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/fa37ac8f-c7b3-ab4e-b5f6-a266339e40a7.png)

メトリクスが出てきますのでEC2を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/aa9b2c76-ed0e-717d-12f9-7ecf9b9092be.png)

さらに先ほど作成したインスタンスかつ、CPUUtilizationを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/4d6459e1-2fec-5a30-0703-758b699d6307.png)

「メトリクスと条件の指定」に進みます
CPU使用率20%を超過すると通知をする設定としております
（その他は基本的にデフォルト設定としています）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/5f4cc400-a719-0f9e-8a89-c2dcd6df659b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/8ed8ea80-d9d5-6bc3-948a-b845b83308f0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/701067bb-5a2b-294c-ecad-3a965374a5a4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/1a424c7d-c764-6ce8-6836-4769eb3d4556.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/03d8373a-c8f7-9ef9-28c3-3be498823bcb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/23a24de5-643b-ea31-ec3f-5c9e4c835543.png)

## ④SNS+CloudWatch Alarmの動作確認
対象インスタンスでCPU使用率20%を1分間超過すると指定したEメールアドレスに通知が来る設定が完了したので、検証のためにインスタンスのCPU使用率を高めます。

:::note warn
下記コマンドはサーバスペックによっては瞬時にCPU使用率100%に到達します
検証時はシステム影響など十分に留意の上、実行してください
:::

3回ほど下記コマンドを実行します
```
yes > /dev/null &
yes > /dev/null &
yes > /dev/null &
```
停止させる場合は下記コマンドにて番号を確認します
```
jobs
```
下記コマンドでプロセスキルして停止します（番号はjobsコマンドで確認したものを指定してください）
```
kill %1 %2 %3
```

しばらくすると指定したメールアドレス宛に閾値を超過した旨のメールが届きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/759fa8ae-38a7-9bdd-35aa-5d9f794e6fc6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/e52f48c7-ceda-0d49-10cb-d26ad88679f8.png)

実際にAWSのコンソール画面を確認するとCPU使用率が向上していることが確認できます
これにてAWS側の実装検証は完了となります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/7b3639fb-c44a-a044-7ae3-5f7e5d458bde.png)

# OCI側検証
## ⑤動作確認用のOCI Computeインスタンス作成
OCIでもAWSと同様に検証用のComputeインスタンスを作成します（今回はOracleLinuxにて検証しています）
Oracle Cloudエージェント "コンピュート・インスタンスのモニタリング"が有効化されていることを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/72d79879-de9d-97da-c489-e3833c8ee964.png)

⑥アラームの通知先の作成(=Notifications)
メニューより「開発者サービス > 通知」を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/2febcff2-b682-01a7-1b11-03c62531234c.png)

トピック作成を実施します
　名前：任意
　説明：任意
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/58fdd14f-995b-2bf5-6060-d38cd15013f0.png)

トピック作成後、詳細画面にて"サブスクリプションの作成"を実施します
任意のEメールアドレスを入力します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/506732c4-031b-cf78-0644-d085bf5c5bcb.png)

"サブスクリプションの作成"を実施すると登録したメール・アドレス宛てに検証メールが送付されます
Confirm subscriptionをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/efbfb046-a36e-6be4-9a3a-8d6be3afa994.png)

ステータスが"Pending"→"Active"になっていることを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/5dd5c1ef-885a-eab6-ec6f-8f06811e2083.png)

## ⑦アラーム定義の作成(=Alarms)
メニューより「監視及び管理 > アラーム定義」を選択します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/8f1e1918-24a4-f414-b3f7-fd630beb41cb.png)

アラームの作成を実施します

アラーム定義
　アラーム名：任意
　アラームの重要度：任意
　アラーム本体：任意
メトリックの説明
　コンパートメント：任意
　メトリック・ネームスペース：oci_computeagent
　リソース・グループ・オプション：任意
　メトリック名：CPUUtilization
　間隔：1分
　統計：Mean
メトリック・ディメンション
　ディメンション名：resourcid
　ディメンション値：先ほど作成したインスタンスのOCIDを指定
トリガー・ルール
　演算子：次より大きい 
　値：20
　トリガー遅延分数：1分
アラーム通知の定義
　宛先サービス：通知
　コンパートメント：任意
　トピック：先ほど作成したトピックを選択 
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/6a81cbf0-e9b1-0f9d-8bec-e84d25db1b0d.png)

## ⑧Notifications+Alarmsの動作確認
対象インスタンスでCPU使用率20%を1分間超過すると指定したEメールアドレスに通知が来る設定が完了したので、検証のためにインスタンスのCPU使用率を高めます。

:::note warn
下記コマンドはサーバスペックによっては瞬時にCPU使用率100%に到達します
検証時はシステム影響など十分に留意の上、実行してください
:::

3回ほど下記コマンドを実行します
```
yes > /dev/null &
yes > /dev/null &
yes > /dev/null &
```
停止させる場合は下記コマンドにて番号を確認します
```
jobs
```
下記コマンドでプロセスキルして停止します（番号はjobsコマンドで確認したものを指定してください）
```
kill %1 %2 %3
```

しばらくすると指定したメールアドレス宛に閾値を超過した旨のメールが届きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/34bd1921-492d-953a-acb8-65745a6174e2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/95986cab-7b1e-320a-841e-00ea2e2430b2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/ae02243a-58a0-3b35-8462-3bb2462ef1e0.png)

実際にOCIのコンソール画面を確認するとCPU使用率が向上していることが確認できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/06e9d03d-3138-6755-c0bf-511f8c428bb9.png)

# 最後に
AWS SNS＋CloudWatch AlarmをOCI Notifications+Alarmsで代替できるか検証しましたが、ほとんど同等の機能があるように思えました。
特にOCI側の通知メールは綺麗にフォーマットされているのが個人的には好みでした。

AWSにせよ、OCIにせよクラウド上で監視機能まで実装されているのはやはり便利だと感じました。
あまり運用関連のやってみた系をしたことがなかったので個人的にも良い勉強になりました。

OCIで監視関連の機能を実装しようとしている人の一助になれば幸いです。