EC-CUBE on AWS (S3で共有編)

記事タイトルとURLをコピーする

ども、サービス開発グループの千葉(@kachina_t)です。 案件化の目処が立たず、めっきりサボっていた『EC-CUBE on AWS』シリーズですが ありがたいことに続稿のリクエストを頂きましたので。

気合を入れて、続きを書いていきたいと思います。

過去の記事は↓こちらを参照ください。

前回も触れましたが、ここでは実運用に耐えられる(商品の追加や変更ができる) EC-CUBE+AWSの環境を提案していきたいと思います。

それでは、進めていきましょう。

セッションについて

冗長構成を組むにあたり、セッションの管理方法について触れておきます。
EC-CUBEではセッション情報をDBにて管理するので、とくに特別な設定変更は必要はありません。

同期対象のディレクトリについて

EC-CUBEを冗長化する際に、同期すべきディレクトリを以下のとおりです。 - /html/user_data/ - /html/upload/ - /data/download/ - /data/downloads/

複数台構成とした場合に、このファイルをどうやって同期するかが"キモ"になります。

今回は簡易版として、定期的にS3と同期してみたいと思います。

outline

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分後には同期されるハズです。

最終的な構成は↓この図の様になります。

outline

【Shop-AMI】は、オートスケールを利用する際に使うので削除せずに取っておきます。

大抵の場合は『未公開』ステータスで商品マスタを作成 準備が整ってから『公開』ステータスへ更新の流れだと思います。 画像ファイルの同期に10分かかっても、問題ない場合が殆どだと思うので 設置・設定も簡単な、この方法で良いかと思います。 (緊急対応が必要な場合は、crontabの内容を手動実行して同期すれば良い)

同期に10分なんてありえない! ファイル更新の通知処理なんかを上手くつかって、リアルタイムで同期したい!って場合。。。 これは難易度が上がる上に、内容も長くなりそうなので別の機会に回します。

以上、次回は『S3とのファイル同期速度改善』か『オートスケールの設定』のどちらかを書こうと思います。