IBMクラウドのCodeEngineを利用して定期監視アプリケーションを作成してみた。


APL仕様(概要)

  1. 定期的に、Webスクレイピング処理を起動する。
  2. 抽出した情報に、事前に定義したKeywordが含まれているかチェックする。
  3. 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送信用ルート

各プロセッサーはCamel.xmlから呼び出せる様に、beans.xmlで定義し、Importしておく。
アプリケーション用のプロパティ定義のkeywordはUTF8で定義したいので、app.propertiesとして定義しUTF8エンコードしておく。

MySpringBootApplication.java
@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);
    }
}

起動用ルートは初回起動時に一度だけ、非同期でメインルートを呼び出す。

CamelTrigger.xml
<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のアカウントがトライアル用のものなので、先頭に固定文言が出力されます。

開発の参考とした記事