概要
外部公開しているサイトにおいて、日時開閉局が必要というシステム要件を想定した自動開閉局の構成を考えてみました。
システム概要
- 環境コードは以下 GitHub にあげてますので、よかったら覗いてみてください
システム構成
対象とするWEBサイト構成は以下の通りです。
非常にシンプルな構成で、FLB で外部接続を受け付け、後段の Compute Instance でリクエストを処理します。
FLB には Regional WAF がアタッチされています。

自動開閉局構成
開閉局のワークフローは以下の通りです。
- 開局、閉局の起点となるFunctionsをResource Scheduler で呼び出す
- Functionsは 成功時・失敗時 それぞれに
Notifications / Stream / Queueのいずれかにイベントをプッシュできるため、Notificationsにプッシュ - 処理が必要な部分は、Functionsをサブスクライブしたトピックを選択し、それ以外はEmailをサブスクライブしたトピックを選択
本構成の改善点
コード内エラーハンドリング
今回は実装していないところで、コード内でエラーが発生した場合(try-catchで拾われるケース)のハンドリングはしていません。Functionsのエラーはあくまでコード外に関するところなので、仮に本構成においてコード内エラーが発生しても通知はされません。
そのため、本構成を商用等で利用する場合は、Functionsの実行ログからConnector Hubでログ監視することをおすすめします。
非同期処理ハンドリング
こちらもコードに関するところですが、Compute Instanceを起動するFunctionsコードにおいて、Compute InstanceがRunningになるまで処理を待っていません。基本的にリクエストを送ったら処理は完了となります。
そのため、本構成を商用等で利用する場合は、コード内でwhile文などを活用し、対象インスタンスの状態を確認する処理を追加することをおすすめします。もしくは開局実施の時間に余裕をもたせることによる運用対処でも良いかと思います。
FLB のヘルスチェック考慮
こちらもコードに関するところですが、開局処理時にFLBのヘルスチェックを考慮していません。
そのため、本構成を商用等で利用する場合は、コード内でwhile文などを活用し、FLBのバックエンドセットのステータスを確認する処理を追加することをおすすめします。もしくは開局実施の時間に余裕をもたせることによる運用対処でも良いかと思います。
おわりに
本記事では、自動開閉局構成を提案しました。
サービスと言うよりコードの改善点はあるものの、少しは役立ちそうなものができたかと思っています。
基本的にはFunctionsで構成されているため、Oracle Integration Cloud でも同じようなことができるのではないかと考えています。
その点はいずれ試してみたいなと思います。
🌟この記事が誰かの役に立てば幸いです!
また、ご質問やフィードバックもお待ちしています。


