IBMクラウドのCodeEngineを利用して定期監視アプリケーションを作成してみた。
APL仕様(概要)
- 定期的に、Webスクレイピング処理を起動する。
- 抽出した情報に、事前に定義したKeywordが含まれているかチェックする。
- Keywordが含まれていた場合、SMSで情報を連携する。
作成背景
システム運用でアラートが大量に発生した場合に、AWS障害が発生していないか、Twitterのトレンドで障害発生有無を確認したりする。
都度、確認を行うのではなくpush型で通知してくれるようにアプリケーションを作成し、監視させることを想定。
APL作成に使用したもの
- Spring-Boot
- Apache Camel
- twilio (SMS送信の為のWeb-API)
ソースコード
- MySpringBootApplication.java:WebAP起動用class
- JsoupProcessor.java:Webスクレイピング&編集用class
- SmsCallProcessor.java:SMS送信用class
- CamelTrigger.xml:トリガー起動用ルート
- CamelTrendSearch.xml:メインルート
- CamelTwilio.xml:SMS送信用ルート
- MySpringBootApplication.java:WebAP起動用class
- JsoupProcessor.java:Webスクレイピング&編集用class
- SmsCallProcessor.java:SMS送信用class
- CamelTrigger.xml:トリガー起動用ルート
- CamelTrendSearch.xml:メインルート
- CamelTwilio.xml:SMS送信用ルート
各プロセッサーはCamel.xmlから呼び出せる様に、beans.xmlで定義し、Importしておく。
アプリケーション用のプロパティ定義のkeywordはUTF8で定義したいので、app.propertiesとして定義しUTF8エンコードしておく。
@SpringBootApplication
@ImportResource("classpath:beans.xml")
@Configuration
@PropertySource(value = "classpath:/app.properties", encoding = "UTF-8")
public class MySpringBootApplication {
/**
* A main method to start this application.
*/
public static void main(String[] args) {
SpringApplication.run(MySpringBootApplication.class, args);
}
}
起動用ルートは初回起動時に一度だけ、非同期でメインルートを呼び出す。
<routes xmlns="http://camel.apache.org/schema/spring">
<route id="cameltrigger">
<from uri="timer://foo?repeatCount=1"/>
<to uri="seda://CamelTrendSearch"/>
</route>
</routes>
メインルートでは、指定間隔でdelayしながらキーワード検出処理を繰り返す。
また、検出した場合も自己を再起呼び出しし、処理継続する。
ソースは以下にて公開
kajioka0404/trendpush
デプロイ環境
CodeEngine:IBMが提供するフルマネージド型のサーバーレス・プラットフォーム
【環境採用理由】
- 利便性:コンテナ等のインフラ知識不要でアプリケーションのデプロイが可能
- コストメリット:アプリの利用がないときにはリソース使用量をゼロにでき、課金されない程度での動作検証が可能
デプロイの流れ
(前提事項)
- IBM Cloudのアカウントが作成されていること
- 従量課金アカウントにアップグレードされていること
(※アプリケーションを試行する為にアップグレードはするものの、従量課金なので試行レベルであれば0コストで動作確認可能)
- Twilioの開発用アカウントを取得していること
1.CodeEngineの概要ページより、「ソースコードから始める」にgitのソースURLを設定し、「作成の開始」
2.ジョブ作成を選択してから、プロジェクトの作成を行います。
今回作成したアプリケーションはRestControllerを用いていない為、ジョブを選択していますがHttp要求の受け皿が用意された
アプリケーションを作成した場合は、ジョブではなくアプリケーションを選択します。
3.ビルド詳細の指定
基本はデフォルトでOK。ビルド戦略部分はDockerfileではなく、CloudNativeBuildpackを選択。
4.環境変数の設定
Twilio関連の認証情報や電話番号はアプリケーション上、環境変数から取得するようにしているので設定する。
5.ジョブの作成
ジョブの作成を行うと、ビルドが実行されます。
「イメージ・ビルドの待機中」をクリックするとビルド画面に遷移します。
Nameの部分のリンクをクリックすると、ビルドの実行ログが確認できます。
Mavenリポジトリから必要な情報をdownloadし、ビルドを行っているので結構時間が掛かります。(今回のアプリケーションで3分程度)
以上で、デプロイが完了し、ジョブ実行の準備が整った状態となります。
ジョブの実行
1.プロジェクトを開く
2.ログの確認をする為に、モニタリングを追加する。(※CLIから確認することも可能なので必須ではない)
3.ジョブ画面より、「ジョブの実行依頼」を実行する。
4.ジョブが実行される。
5.ロギングを起動すれば、Webからログ確認が出来る。
SMS送信実行結果
※twilioのアカウントがトライアル用のものなので、先頭に固定文言が出力されます。
開発の参考とした記事
Author And Source
この問題について(IBMクラウドのCodeEngineを利用して定期監視アプリケーションを作成してみた。), 我々は、より多くの情報をここで見つけました https://qiita.com/kajikun/items/1322dc06a4df9da75d64著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .