ども、サービス開発グループの千葉(@kachina_t)です。 案件化の目処が立たず、めっきりサボっていた『EC-CUBE on AWS』シリーズですが ありがたいことに続稿のリクエストを頂きましたので。
気合を入れて、続きを書いていきたいと思います。
過去の記事は↓こちらを参照ください。
前回も触れましたが、ここでは実運用に耐えられる(商品の追加や変更ができる) EC-CUBE+AWSの環境を提案していきたいと思います。
それでは、進めていきましょう。
セッションについて
冗長構成を組むにあたり、セッションの管理方法について触れておきます。
EC-CUBEではセッション情報をDBにて管理するので、とくに特別な設定変更は必要はありません。
同期対象のディレクトリについて
EC-CUBEを冗長化する際に、同期すべきディレクトリを以下のとおりです。 - /html/user_data/ - /html/upload/ - /data/download/ - /data/downloads/
複数台構成とした場合に、このファイルをどうやって同期するかが"キモ"になります。
今回は簡易版として、定期的にS3と同期してみたいと思います。
ELBの起動、DNSレコードの設定
はじめに、↓コレをちゃちゃっとやります。 ELBを起動し『DNS Name』を『shop.example.com』で引ける用にDNSを設定
s3cmdのインストール
起動中のインスタンスにSSHで接続し『s3cmd』をインストールします。
$ sudo yum -y --enablerepo epel install s3cmd
$ s3cmd --configure
Access Key: xxxxxxxx
Secret Key: yyyyyyyy
(※ 以降は全てデフォルトにしました)
初回転送
この状態で、S3バケットに既存ファイルをアップロードします。 ※:以下、S3バケット名を『example-ec-cube』とします。
s3cmd sync /home/eccube/html/upload/ s3://example-ec-cube/html/upload/
s3cmd sync /home/eccube/html/user_data/ s3://example-ec-cube/html/user_data/
s3cmd sync /home/eccube/data/download/ s3://example-ec-cube/data/download/
s3cmd sync /home/eccube/data/downloads/ s3://example-ec-cube/data/downloads/
s3cmd sync /home/eccube/data/upload/ s3://example-ec-cube/data/upload/
5分毎に同期する設定
『ec2-user』のcrontabに以下を追記します。(改行はありません)
*/5 * * * * s3cmd sync s3://example-ec-cube/html/upload/ /home/eccube/html/upload/; s3cmd sync s3://example-ec-cube/html/user_data/ /home/eccube/html/user_data/; s3cmd sync s3://example-ec-cube/data/download/ /home/eccube/data/download/; s3cmd sync s3://example-ec-cube/data/downloads/ /home/eccube/data/downloads/; s3cmd sync s3://example-ec-cube/data/upload/ /home/eccube/data/upload/; s3cmd sync /home/eccube/html/upload/ s3://example-ec-cube/html/upload/; s3cmd sync /home/eccube/html/user_data/ s3://example-ec-cube/html/user_data/; s3cmd sync /home/eccube/data/download/ s3://example-ec-cube/data/download/; s3cmd sync /home/eccube/data/downloads/ s3://example-ec-cube/data/downloads/; s3cmd sync /home/eccube/data/upload/ s3://example-ec-cube/data/upload/;
EC-CUBEの設定
EC-CUBEの設定ファイル『~/data/config/config.php』の以下の値を書き換えます。
define ('HTTP_URL', 'http://shop.example.com/');
define ('HTTPS_URL', 'http://shop.example.com/');
AMI化、別AZでのインスタンス起動、ELBの設定
この状態で、インスタンスをストップ → AMI作成 → 別のリージョンにインスタンスを起動します。
2つのインスタンスをELB配下に設置し、ヘルスチェックの『Ping Path』の値を"index.php"とし ステータスが『In Service』になることを確認します。
動作確認
以上で設定終了です、特に複雑な手順は無かったかと思います。
それでは http://shop.example.com/admin/ から 画像付きの新商品を追加してみて下さい。 送信、受信がそれぞれ5分毎なので、最大で10分後には同期されるハズです。
最終的な構成は↓この図の様になります。
【Shop-AMI】は、オートスケールを利用する際に使うので削除せずに取っておきます。
大抵の場合は『未公開』ステータスで商品マスタを作成 準備が整ってから『公開』ステータスへ更新の流れだと思います。 画像ファイルの同期に10分かかっても、問題ない場合が殆どだと思うので 設置・設定も簡単な、この方法で良いかと思います。 (緊急対応が必要な場合は、crontabの内容を手動実行して同期すれば良い)
同期に10分なんてありえない! ファイル更新の通知処理なんかを上手くつかって、リアルタイムで同期したい!って場合。。。 これは難易度が上がる上に、内容も長くなりそうなので別の機会に回します。
以上、次回は『S3とのファイル同期速度改善』か『オートスケールの設定』のどちらかを書こうと思います。