EC2 x S3 x ECCUBE 同期@AWS

AWS EC2において、ECCUBEが構築出来た。(現在、シングル構成)

ELBは上に付けているので、
いつでもインスタンス追加で、冗長化が可能だが、
今は、アクセス過多ということもないため、
当分、シングルで動かす予定だが、準備だけはしておきたい。

***

ホントは、EFSを使って、自動同期をしたいのですが、
「File System Mount Using Mount Target DNS Name Fails」という、エラーが出て、先に進めず。

ええ、わかっているんですよ。

EC2の?DHCP Options Sets とDNS Options Sets をいじることは。
でも、そうなっていても、このエラーが出てるから、困っているわけで・・・

今回は諦めて、遅いと定評のあるS3で実装。

※また、時間があるときにやってみます。


S3でデータ共有

概要は、こんなかんじ。

ただ、情報が少なすぎて、イミフで・・・

Access Key / Secret Keyって、いつ設定したっけ?&なんだっけ?
ってことで、そこから。

IAMで、アカウント作成すると、AccessKey & SecretKeyが手に入ります。

***

S3と同期するためには、S3cmdのインストールと設定が必要。

基本、Access Key / Secret Key以外は、デフォルトで良いようですが、
S3にアクセス権がないと、ダメみたい。

で、その設定方法ですが、S3のPermisshonにて、設定できるのですが、
AIMで設定しました。

参考

AIM > Users > Permissions

IAM USER S3 Permissions

AmazonS3FullAccessを割り当てると、s3cmd ls で、
s3のバケットリストが表示されます。

s3cmd ls aws

 

今回は、対象のバッケットのみに割当るのは、また後で。
とりあえず、全バケットに対して、フルアクセスを与えます。

***

画像など、第三者によって書き換えられる箇所だけ、同期するか、

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/

全体を同期するか、悩むところですが、data/logs が、ちょっと曲者ですが、
当然、そんなことも出来ちゃうようです。

?exclude を試す

ある特定のディレクトリ・ファイルを sync の対象から外したい時は ?exclude を付ける。
特定のファイル名なら ?exclude=”testfile01.txt” とすればよいのだけど、特定のディレクトリ配下のファイルすべて除外するという指定する時が結構やっかいだった。
結局、?exclude=”*exclude-dir/*” で動いた。

↑ このサイト、分かり易い


 

さて、更新する対象フォルダーは、こんなところ。

  • data
    • download
    • downloads(モジュールやプラグインファイル)
    • upload
    • smarty
      • templates
  • html
    • upload(商品写真など)
    • user_data

***

あとは、Cronで実行するか、ってところなんですが、
初動で、手動でやってみたところ、たしかに遅い・・・

でも、そんなに、頻繁にファイルを書き換えるわけじゃないから、
これで十分かもしれない。

ホントは、EFSを使いたい(心の声)

自動同期設定 Cron or Lambda

Lambda AWSで書くのが正解?

だと思うのですが、ちょっと読んだ感じ、すぐにはできそうにないので、
今回は、また断念して、Cronで自動同期の設定。

sudo vim /etc/crontab

で、Cronの設定ファイルを開き、

*/5 * * * * s3cmd sync /var/www/html/****/_data/download/ s3://****/_data/download/
*/5 * * * * s3cmd sync /var/www/html/****/_data/upload/ s3://****/_data/upload/
(以下省略)

と、記述。(5分毎に、s3cmd sync・・・を実行の意)

ホントは、s3cmd 以降を ; で区切り、1行で書くのが正解のようですが、
醜いので、ということで、行を分けております。

/var/www/html/***+/の箇所は、醜いのでナントカならないかな?
と思っていたら、ちゃんとそんあのも、用意されています。

BIN_DIR="/home/dqneo/bin"
LOG_DIR="/home/dqneo/logs"
0 9 * * * /bin/bash $BIN_DIR/hoge.sh >> $LOG_DIR/hoge.log
0 10 * * * /bin/bash $BIN_DIR/fuga.sh >> $LOG_DIR/fuga.log

早速実践!
さらに、スッキリしましたね!

動いているかは、

tail -f /var/log/cron

で、要観察。記述にミスがあると、エラーにも表示してくれます。

[ec2-user@ip-10-0-0-179 etc]$ sudo tail -f /var/log/cron
Sep 20 19:05:01 ip-10-0-0-179 crond[2479]: (CRON) bad username (/etc/crontab)
Sep 20 19:05:01 ip-10-0-0-179 crond[2479]: (CRON) bad username (/etc/crontab)

実行ユーザー名が抜けているので、rootを追記。
(だって、いらないって書いてあったじゃん・・・)

*/5 * * * * root s3cmd sync ・・・・

これで、洗濯機の回転をみるように、監視していたのですが、
5分毎に動いているようですが、S3で消したファイルが反映されてない・・・
逆に、EC2側のファイルを変えてみても、変化なし・・・

うーん、とりあえず、今日はここまで。

でも、S3側のファイルを消しても、EC2側には反映されない。
名前を書き換えると、コピーされるだけ。
ミラーリングとは、ほど遠い仕様だな・・・


EC2 x S3 x ECCUBE 同期@AWS