EC-CUBEとローカルの基幹システムを安全な通信で連携させる。
最近、EC-CUBE(WEBサーバ)と社内の基幹システムとの連携カスタマイズのお仕事が増えています。
もう何年も前から思っているのですが、システムの肝は他のシステムとどれだけシームレスに連携出来るかだと思っています。*1
全部繋がった時のパフォーマンスは素晴らしい物があり、もはやそのシステムを手放せなくなります。
EC-CUBEには各種CSV出力機能など、他のシステムと連携させるための機能がいくつもあります。
あまり知られていませんが、売上情報の集計やメール配信等をバッチで処理するインターフェイスも準備されています。
ただ、自動で社内の販売管理システムなどの基幹システムと連携させるには、もう少し工夫が必要です。
単純な定期バッチで、社内のサーバからFTPでファイルを取りに行くだけなら簡単ですが、FTPはネットワーク上をデータが暗号化されない状態で流れるため、セキュリティ上あまりよろしくありません。
また、社内のローカルシステムとデータセンターにあるEC-CUBEのサーバとを定期バッチで連携させる為には、タイミング等難しい問題もあります。
EC-CUBE(WEBサーバ)を連携処理の起点として社内のサーバにアクセスさせるのも、社内ネットワークに穴を開ける事になるので、出来れば社内のサーバからWEBのデータを取りに行きたい所です。
社内のサーバからWEBサーバにアクセスして、データの集計、出力処理を実行し、データを社内のサーバにダウンロード、基幹システムに取り込む、といった感じです。
では、安全に確実これらの処理を自動で実行する為にはどうしたら良いでしょうか?
まず、WEBサーバのデータ出力スクリプトは社内のサーバから実行します。*2
WEBサーバには安全に接続、データの送受信を行うため、SSH(SFTP)*3というプロトコルを使います。
sshでWEBサーバにアクセスするのは簡単です。他のサイトで詳細に説明されているので、そちらをご参照ください。
sshでアクセスする際に重要なのが、「鍵認証を使う」という事です。
これによりセキュリティも向上しますし、バッチスクリプトからもパスワードの入力無しで接続出来る様になります。*4
WEBサーバに接続して、データ出力スクリプトを実行し、ダウンロードするバッチスクリプトはシェルスクリプトで書きます。*5
例*6:
#!/bin/sh#まずWEBサーバに接続してWEBサーバのデータ出力スクリプトを実行します。
#WEBサーバ側で実行するスクリプト(get_order_data.php)はフルパスで指定しておきます。
ssh -q -o BatchMode=yes hoge@example.com /home/batch/get_order_data.php
#次にWEBサーバ上で作成したデータをSFTPでダウンロードします。
#SFTPのコマンドは別のファイル(get_ecdata.command)にまとめて書いておきます。
sftp -b get_ecdata.command
あとはこれをローカルのサーバでcronとかで定期的に自動実行してやれば、安全に確実にWEBサーバとデータのやり取りが出来るようになります。