💡 導入:なぜCode EngineでIP監視をするのか
従来の課題(オンプレミスPCでの実行)
これまで、変動する奉行サービスなどの接続先IPアドレスを把握し、セキュリティのためファイアウォールを適切に管理する必要がありました。
- 実行環境の不安定さ: PowerShellをタスクスケジューラで実行していたが、権限や終了ステータスなどで予期せぬエラーが頻発した。
- PCへの依存: 実行環境であるPCの電源が入っていないと実行できず、安定した運用が難しかった。
解決策と目標
この課題を解決するため、IBM Cloud Code Engine の ジョブ機能 を利用し、外部URLに依存せず、変動するIPアドレスを安定的に取得・記録するための基盤を構築しました。
⚙️ 技術選定:Code Engineジョブのメリット
Code Engineを選択した主な理由は、以下のメリットのためです。
- サーバーレスジョブ: 監視処理の実行時のみ課金され、常時起動する必要がないため、コスト効率が良い。
- 安定した実行環境: スクリプトをDockerコンテナで実行するため、OSやPowerShellのバージョンといった環境に左右されず、安定稼働が実現する。
- シンプルなアーキテクチャ: Pythonスクリプトをコンテナ化し、ジョブとして定期実行するだけで基盤が完成する。
💻 実装ステップ:IP取得基盤の構築
1. 接続先IPアドレスを取得するスクリプトの作成
IPアドレスの解決には、外部のWeb APIに依存せず、Python標準のDNS解決機能を利用しました。
-
ファイル名:
job.script.py -
利用技術: Python標準ライブラリ
socket - コードの抜粋:
# IPアドレスを取得し、結果をJSON形式で標準出力する
# Code Engineのログがこれを自動で取得します
import socket
# ...
for url in urls:
try:
ip_address = socket.gethostbyname(url)
results[url] = ip_address
# ...
print(results)
💻 コンテナ化とジョブ構成
2. コンテナ・イメージの作成と登録
作成した Python スクリプトを Code Engine で実行するために、コンテナイメージとしてパッケージ化し、登録します。
-
Dockerfile の役割:
実行に必要な Python 環境を定義し、作成したスクリプト(job.script.py)をコンテナに含めるための設定ファイルです。 -
ソースコード:
Code Engine のビルド機能を利用し、GitHub リポジトリ(https://github.com/mayname/url-ip-checker)から自動でソースコードを取得しました。 -
イメージの登録:
ビルドされたイメージは、IBM Cloud Container Registry(jp.icr.io/...)に自動で登録されます。
3. Code Engine ジョブの作成と定期実行の構成
Code Engine コンソール上で、登録したコンテナイメージを使用してジョブを定義し、定期的に実行されるように設定します。
-
ジョブの定義:
- Code Engine コンソールで 「ジョブの作成」 を選択します。
- 登録済みのコンテナイメージ(例:
jp.icr.io/my-url-checker/...)を指定します。
-
定期実行(サブスクリプション)の構成:
ジョブのサブスクリプション機能を利用し、実行したい間隔(例: 毎日定時)を設定することで、ジョブが完全に自動で定期実行されるように構成しました。
✅ まとめと今後の展望
結論 🎉
IBM Cloud Code Engine を利用することで、以下の目的を達成し、IP アドレス監視基盤の安定化とクラウド化に成功しました。
- 安定した IP アドレスの自動取得基盤の構築に成功。
- Windows PC の電源や環境に依存しない、クラウドベースの運用を実現。
- ジョブ実行ログ(標準出力)から、取得した IP アドレスの履歴を簡単に確認できるようになった。
今後の展望 🚀
現在は IP アドレスの取得と記録(ログへの出力)までですが、実運用に耐えうるシステムとするため、次のステップでは以下の機能拡張を行います。
- IP アドレスの変更検知ロジック(前回取得 IP との比較)の組み込み。
- Chatwork API との連携による、IP アドレス変更時の自動通知機能の実装。