LoginSignup
2
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-09-26

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を設定し、「作成の開始」
codeengine001.jpg
2.ジョブ作成を選択してから、プロジェクトの作成を行います。
  今回作成したアプリケーションはRestControllerを用いていない為、ジョブを選択していますがHttp要求の受け皿が用意された
  アプリケーションを作成した場合は、ジョブではなくアプリケーションを選択します。
codeengine002.jpg
3.ビルド詳細の指定
  基本はデフォルトでOK。ビルド戦略部分はDockerfileではなく、CloudNativeBuildpackを選択。
codeengine003-1.jpgcodeengine003-2.jpgcodeengine003-3.jpg
4.環境変数の設定
  Twilio関連の認証情報や電話番号はアプリケーション上、環境変数から取得するようにしているので設定する。
codeengine004.jpg
5.ジョブの作成
  ジョブの作成を行うと、ビルドが実行されます。
codeengine005-1.jpg
  「イメージ・ビルドの待機中」をクリックするとビルド画面に遷移します。
codeengine005-2.jpg
  Nameの部分のリンクをクリックすると、ビルドの実行ログが確認できます。
codeengine005-3.jpg
  Mavenリポジトリから必要な情報をdownloadし、ビルドを行っているので結構時間が掛かります。(今回のアプリケーションで3分程度)
  以上で、デプロイが完了し、ジョブ実行の準備が整った状態となります。

ジョブの実行

1.プロジェクトを開く
image.png
2.ログの確認をする為に、モニタリングを追加する。(※CLIから確認することも可能なので必須ではない)
codeengine006.jpg
3.ジョブ画面より、「ジョブの実行依頼」を実行する。
codeengine007.jpg
4.ジョブが実行される。
codeengine008.jpg
5.ロギングを起動すれば、Webからログ確認が出来る。
codeengine009.jpg

SMS送信実行結果

※twilioのアカウントがトライアル用のものなので、先頭に固定文言が出力されます。
output_image.jpg

開発の参考とした記事

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0