AWSもくもく勉強会 新宿鮫:第7回&8回の成果物

水曜恒例な新宿鮫でもくもく。
 
今回は第7回目 (http://shinjukuzame.doorkeeper.jp/events/4089)


 
今回は先日、横浜のAWS勉強会でCDP本をいただいたので、その内容に沿ってやっていきます。
最初の方からパラパラめくっていって、”おっ”と思ったDirect Hostingパターンをやってみようと思います。
 
■ 今回やろうと思っていること
 
Direct Hostingパターンの例としてCDP本に書かれている
以下を試そうということで、EC2インスタンスとS3バケットを用意します。
 
・EC2インスタンスからS3バケットをマウント
・Ec2インスタンスにApacheと立ててMovable Typeを入れる
・MovableTypeで生成した静的ファイルは全てマウントしたS3へ
・S3はドメインを立ててエンドユーザーは参照系は全てS3のドメインに
・コメントや検索といった動的な仕掛けが必要なところはEC2上のApacheのドメインに
 
 
■ S3バケットの準備
 
CDP本の108ページから詳細に載っているのでソレに沿って。
 
S3のバケットを作って、アクセス権の設定をします。
Screen Shot 2013-05-29 at 7.46.28 PM
 
JSON形式での設定はジェネレータがあるのでソレを使って。

 
静的ファイルをアップロードして画面が見れることを確認。
Screen Shot 2013-05-29 at 7.50.10 PM
 
 
■ EC2インスタンスにApacheとMovableTypeをインストール
 
CDP本のAppendix Aに沿って。
t1.microで何かとデフォルトでグワっとインスタンス立てて、、
 
perlのバージョン確認。何か言ってるけど5.10.1が入ってる。

[ec2-user@ip-10-132-18-46 ~]$ perl -v
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_CTYPE = "UTF-8",
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi

Copyright 1987-2009, Larry Wall

 
MySQLサーバーのインストール

ec2-user@ip-10-132-18-46 ~]$ sudo yum install -y mysql-server
Failed to set locale, defaulting to C
Loaded plugins: priorities, security, update-motd, upgrade-helper
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package mysql-server.noarch 0:5.5-1.3.amzn1 will be installed

 
Apacheのインストールは1章に書いてありますから〜って事なので、
42ページの内容に沿ってインストールからhttpdの立ち上げまで。

[ec2-user@ip-10-132-18-46 ~]$ sudo yum install httpd
Failed to set locale, defaulting to C
Loaded plugins: priorities, security, update-motd, upgrade-helper
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.2.24-2.31.amzn1 will be installed
〜略〜
[ec2-user@ip-10-132-18-46 ~]$ sudo service httpd start
Starting httpd:                                            [  OK  ]
[ec2-user@ip-10-132-18-46 ~]$ sudo chkconfig httpd on

 
MovableTypeのインストールは、ダウンロードしてから、解凍してから、、

[ec2-user@ip-10-132-18-46 ~]$ cd /tmp
[ec2-user@ip-10-132-18-46 tmp]$ wget http://www.movabletype.org/downloads/stable/MTOS-5.2.3.zip
--2013-05-29 11:13:24--  http://www.movabletype.org/downloads/stable/MTOS-5.2.3.zip
Resolving www.movabletype.org (www.movabletype.org)... 175.41.253.248, 54.248.75.7
Connecting to www.movabletype.org (www.movabletype.org)|175.41.253.248|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9712324 (9.3M) [application/zip]
Saving to: 'MTOS-5.2.3.zip'

100%[===================================================================================>] 9,712,324   12.3MB/s   in 0.8s

2013-05-29 11:13:25 (12.3 MB/s) - 'MTOS-5.2.3.zip' saved [9712324/9712324]

[ec2-user@ip-10-132-18-46 tmp]$ unzip MTOS-5.2.3.zip
Archive:  MTOS-5.2.3.zip
   creating: MTOS-5.2.3/
   creating: MTOS-5.2.3/tools/
  inflating: MTOS-5.2.3/tools/rebuild-benchmark
  inflating: MTOS-5.2.3/tools/mt-tmpl-preview
  inflating: MTOS-5.2.3/tools/remove-object
  inflating: MTOS-5.2.3/tools/permission-viewer

 
所定の位置に配置。静的ファイル用のディレクトリと管理用ディレクトリ。

[ec2-user@ip-10-132-18-46 tmp]$ sudo mkdir /var/www/mt
[ec2-user@ip-10-132-18-46 tmp]$ cd MTOS-5.2.3
[ec2-user@ip-10-132-18-46 MTOS-5.2.3]$ sudo mv mt-static /var/www/mt/
[ec2-user@ip-10-132-18-46 MTOS-5.2.3]$ sudo mkdir /var/www/mt/admin
[ec2-user@ip-10-132-18-46 MTOS-5.2.3]$ sudo mv * /var/www/mt/admin/

 
HTML配置用ディレクトリと権限設定。書き込み権限が必要なところもありますよ、と。

[ec2-user@ip-10-132-18-46 MTOS-5.2.3]$ sudo mkdir /var/www/mt/html
[ec2-user@ip-10-132-18-46 MTOS-5.2.3]$ sudo chmod 755 /var/www/mt/
[ec2-user@ip-10-132-18-46 MTOS-5.2.3]$ sudo chmod 755 /var/www/mt/admin/*
[ec2-user@ip-10-132-18-46 MTOS-5.2.3]$ sudo chmod 777 /var/www/mt/admin
[ec2-user@ip-10-132-18-46 MTOS-5.2.3]$ sudo chmod 777 /var/www/mt/html/
[ec2-user@ip-10-132-18-46 MTOS-5.2.3]$ sudo chmod 777 /var/www/mt/mt-static/support/

 
で、Apacheのconfを追加して、
Screen Shot 2013-05-29 at 8.28.25 PM
 
reloadして、、

[ec2-user@ip-10-132-18-46 MTOS-5.2.3]$ sudo service httpd reload
Reloading httpd:

 
MTキターーーッ的な。
Screen Shot 2013-05-29 at 8.30.18 PM
 
アレ、CGIダメじゃんw
Screen Shot 2013-05-29 at 8.31.11 PM
 
コピペでマイナス付けたまんま的な…汗

  Alias /mt "/var/www/mt/admin/"
  <Directory "/var/www/mt/admin">
    Options FollowSymLinks -Indexes ExecCGI

 
んで、大丈夫そうな画面が出て来ましたが、
Screen Shot 2013-05-29 at 8.38.08 PM
 
画像系の処理でGDかImageMagick入れとけや〜って事みたいなので、
Screen Shot 2013-05-29 at 8.38.46 PM
 
GDライブラリを入れておきます。(今日そこまでイケるか甚だ疑問ですが…w)

[ec2-user@ip-10-132-18-46 conf.d]$ sudo yum install -y perl-GD
Failed to set locale, defaulting to C
Loaded plugins: priorities, security, update-motd, upgrade-helper
amzn-main                                                                                             | 2.1 kB     00:00
amzn-updates                                                                                          | 2.3 kB     00:00
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package perl-GD.x86_64 0:2.44-3.2.amzn1 will be installed

 
続いてMySQLのサービス立ち上げて、、

[ec2-user@ip-10-132-18-46 conf.d]$ sudo service mysqld start
Initializing MySQL database:  Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

 
rootのパスワードを変更する

[ec2-user@ip-10-132-18-46 conf.d]$ mysqladmin -u root password
New password:
Confirm new password:

 
mtっていうテーブルを作って

[ec2-user@ip-10-132-18-46 conf.d]$ mysqladmin create --default-character-set=utf8 -u root -p mt

 
権限つけます

mysql> grant all on mt.* to mtuser@localhost identified by 'mtpasswd';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

 
MovableTypeの諸々の設定をして、、
Screen Shot 2013-05-29 at 8.46.58 PM
Screen Shot 2013-05-29 at 8.48.06 PM
Screen Shot 2013-05-29 at 8.51.24 PM
Screen Shot 2013-05-29 at 8.51.48 PM
Screen Shot 2013-05-29 at 8.52.08 PM
 
最後のS3をWebsiteにする設定を忘れてたので。。
Screen Shot 2013-05-29 at 8.56.03 PM
 
 
■ S3バケットをEC2にマウントする
 
s3fsをインストールしようと思ったら、、イロイロとインストールしなきゃなのね、、
[ec2-user@ip-10-132-18-46 conf.d]$ history | grep “sudo yum install”
〜略〜
74 sudo yum install gcc
75 sudo yum install libstdc++-devel
76 sudo yum install gcc-c++
77 sudo yum install fuse
78 sudo yum install fuse-devel
79 sudo yum install curl-devel
80 sudo yum install libxml2-devel
81 sudo yum install openssl-devel
82 sudo yum install mailcap
84 sudo yum install make
 

第7回はココにてタイムアップ
他の日にキャッチアップしようと思ったものの、
カンファレンスや飲み会等大忙しで、第8回に持ち越し。

 
第8回(http://shinjukuzame.doorkeeper.jp/events/4354)


 
 
■ s3fsのダウンロード&インストール
 
s3fsは先週のAWS Game Dayで@czkukが壊されたS3のデータを復旧する際にインストールするの
隣でみてたのでイイ感じに出来るはずw ↓はその植木さんのブログ記事。
s3fsを使ってEC2からS3をマウントしたときにうまくいかなくて調べた事まとめ
 
wgetで落としてきて、、

[ec2-user@ip-10-132-18-46 ~]$ sudo wget https://s3fs.googlecode.com/files/s3fs-1.70.tar.gz
--2013-06-12 10:13:07--  https://s3fs.googlecode.com/files/s3fs-1.70.tar.gz
Resolving s3fs.googlecode.com (s3fs.googlecode.com)... 74.125.31.82, 2404:6800:4008:c00::52
Connecting to s3fs.googlecode.com (s3fs.googlecode.com)|74.125.31.82|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 166791 (163K) [application/x-gzip]
Saving to: 's3fs-1.70.tar.gz'

100%[======================================================================================================================================>] 166,791      292KB/s   in 0.6s

2013-06-12 10:13:09 (292 KB/s) - 's3fs-1.70.tar.gz' saved [166791/166791]

解凍して

[ec2-user@ip-10-132-18-46 ~]$ tar xvf s3fs-1.70.tar.gz
s3fs-1.70/
s3fs-1.70/README
s3fs-1.70/doc/
s3fs-1.70/doc/man/
s3fs-1.70/doc/man/s3fs.1
s3fs-1.70/doc/Makefile.am
s3fs-1.70/doc/Makefile.in
〜略〜

いつものアレ

[ec2-user@ip-10-132-18-46 s3fs-1.70]$ ./configure
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
〜略〜
[ec2-user@ip-10-132-18-46 s3fs-1.70]$ echo $?
0
[ec2-user@ip-10-132-18-46 s3fs-1.70]$ make
Making all in src
make[1]: Entering directory `/home/ec2-user/s3fs-1.70/src'
g++ -DPACKAGE_NAME=\"s3fs\" -DPACKAGE_TARNAME=\"s3fs\" -DPACKAGE_VERSION=\"1.70\" -DPACKAGE_STRING=\"s3fs\ 1.70\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE=\"s3fs\" -DVERSION=\"1.70\" -I.  -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse -I/usr/include/libxml2     -g -O2 -Wall -D_FILE_OFFSET_BITS=64 -MT s3fs.o -MD -MP -MF .deps/s3fs.Tpo -c -o s3fs.o s3fs.cpp
s3fs.cpp: In function 'int s3fs_check_service()':
s3fs.cpp:3665:7: warning: variable 'result' set but not used [-Wunused-but-set-variable]
s3fs.cpp: In function 'int main(int, char**)':
〜略〜
[ec2-user@ip-10-132-18-46 s3fs-1.70]$ echo $?
0
[ec2-user@ip-10-132-18-46 s3fs-1.70]$ sudo make install
Making install in src
make[1]: Entering directory `/home/ec2-user/s3fs-1.70/src'
make[2]: Entering directory `/home/ec2-user/s3fs-1.70/src'
test -z "/usr/local/bin" || /bin/mkdir -p "/usr/local/bin"
  /usr/bin/install -c s3fs '/usr/local/bin'
〜略〜
make[1]: Leaving directory `/home/ec2-user/s3fs-1.70'
[ec2-user@ip-10-132-18-46 s3fs-1.70]$ echo $?
0

めでたしめでたし。
 
 
■ s3fsの権限周りの設定
 
s3fsはfuseというファイルシステムを使っていて、
デフォルトではrootしか使えないようになっています。
ということで↓のように user_allow_other してやります。

[ec2-user@ip-10-132-18-46 s3fs-1.70]$ sudo vim /etc/fuse.conf
[ec2-user@ip-10-132-18-46 s3fs-1.70]$ cat /etc/fuse.conf
# mount_max = 1000
 user_allow_other

 
次にセキュリティクレデンシャルの設定。
なんかSecurity CredentialsのUI変わってる…。
Screen Shot 2013-06-12 at 7.29.15 PM
 
Secret Access Keyが必要なのでLegacyの方で。。
Screen Shot 2013-06-12 at 7.29.35 PM
 

ec2-user@ip-10-132-18-46 s3fs-1.70]$ sudo vim /etc/passwd-s3fs
[ec2-user@ip-10-132-18-46 s3fs-1.70]$ sudo chmod 640 /etc/passwd-s3fs
[ec2-user@ip-10-132-18-46 s3fs-1.70]$ ls -l /etc/passwd-s3fs
-rw-r----- 1 root root 61 Jun 12 10:30 /etc/passwd-s3fs

 
S3バケットをマウントします。

[ec2-user@ip-10-132-18-46 s3fs-1.70]$ sudo mv /var/www/mt/html /var/www/mt/html-old
[ec2-user@ip-10-132-18-46 s3fs-1.70]$ sudo mkdir /var/www/mt/html
[ec2-user@ip-10-132-18-46 s3fs-1.70]$ sudo /usr/local/bin/s3fs shinjukuzame.shinodogg.com /var/www/mt/html -o allow_other

 
んで、ファイル読もうとすると、、、読めませんがな、、と。。。

[ec2-user@ip-10-132-18-46 mt]$ cd html
[ec2-user@ip-10-132-18-46 html]$ ls -l
ls: reading directory .: Operation not permitted
total 0

 
で、上記、植木さんのブログチェックすると、、、

これを解決するにはv1.69(2013/5/16リリース)で追加されたuid/gidマウントオプションを使います。このオプションによりメタデータが設定されていないファイルについては、指定したuid/gidがオーナー(グループ)として扱われるので読み書きできるようになります。

さすが、神だぜ…
 
ってことでuidとgidは↓こんな感じなので

[ec2-user@ip-10-132-18-46 html]$ id ec2-user
uid=222(ec2-user) gid=500(ec2-user) groups=500(ec2-user),10(wheel)

 
アレ、、、、

[ec2-user@ip-10-132-18-46 html]$ sudo /usr/local/bin/s3fs shinjukuzame.shinodogg.com /var/www/mt/html -o allow_other,uid=222,gid=500
mount: according to mtab, s3fs is already mounted on /var/www/mt/html

 
s3fsのプロセスkillしてやってもっかい試みるも、、

[ec2-user@ip-10-132-18-46 html]$ ps -ef | grep s3fs
root      5464     1  0 10:39 ?        00:00:00 /usr/local/bin/s3fs shinjukuzame.shinodogg.com /var/www/mt/html -o allow_other
ec2-user  5478  4733  0 10:44 pts/0    00:00:00 grep s3fs
[ec2-user@ip-10-132-18-46 html]$ kill -9 5464
-bash: kill: (5464) - Operation not permitted
[ec2-user@ip-10-132-18-46 html]$ sudo kill -9 5464
[ec2-user@ip-10-132-18-46 html]$ sudo /usr/local/bin/s3fs shinjukuzame.shinodogg.com /var/www/mt/html -o allow_other,uid=222,gid=500
s3fs: unable to access MOUNTPOINT /var/www/mt/html: Transport endpoint is not connected

 
htmlディレクトリ消そうとしたら、、どういう事ですの?w

[ec2-user@ip-10-132-18-46 mt]$ sudo rm -rf html
rm: cannot remove `html': Is a directory
[ec2-user@ip-10-132-18-46 mt]$ ls -l
ls: cannot access html: Transport endpoint is not connected
total 12
drwxrwxrwx 13 root     root     4096 May 29 11:49 admin
d?????????  ? ?        ?           ?            ? html
drwxrwxrwx  2 root     root     4096 May 29 11:18 html-old
drwxr-xr-x 17 ec2-user ec2-user 4096 Jan 18 06:35 mt-static

 
一番下の怪しいなと。

[ec2-user@ip-10-132-18-46 mt]$ mount -l
/dev/xvda1 on / type ext4 (rw,noatime) [/]
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
s3fs on /var/www/mt/html type fuse.s3fs (rw,nosuid,nodev,allow_other)

 
アンマウントしました。

[ec2-user@ip-10-132-18-46 mt]$ sudo umount -l /var/www/mt/html
[ec2-user@ip-10-132-18-46 mt]$ mount -l
/dev/xvda1 on / type ext4 (rw,noatime) [/]
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
fusectl on /sys/fs/fuse/connections type fusectl (rw)

 
で、もっかい、、、マジすか…汗

[ec2-user@ip-10-132-18-46 mt]$ ls -l
total 16
drwxrwxrwx 13 root     root     4096 May 29 11:49 admin
drwxr-xr-x  2 root     root     4096 Jun 12 10:33 html
drwxrwxrwx  2 root     root     4096 May 29 11:18 html-old
drwxr-xr-x 17 ec2-user ec2-user 4096 Jan 18 06:35 mt-static
[ec2-user@ip-10-132-18-46 mt]$ sudo /usr/local/bin/s3fs shinjukuzame.shinodogg.com /var/www/mt/html -o allow_other,uid=222,gid=500
[ec2-user@ip-10-132-18-46 mt]$ cd html
[ec2-user@ip-10-132-18-46 html]$ ls -l
ls: reading directory .: Operation not permitted
total 0

 
なんかイロイロやったけど何かダメでもっかい/etc/passwd-s3fsみたら最後のセキュリティIDの最後の一文字抜けてた…w
ってことで、、キターーー的な。

[ec2-user@ip-10-132-18-46 mt]$ sudo cat /etc/passwd-s3fs
shinjukuzame.shinodogg.com:Access Key ID:Secret Access Key
[ec2-user@ip-10-132-18-46 mt]$ sudo vim /etc/passwd-s3fs
[ec2-user@ip-10-132-18-46 mt]$ sudo /usr/local/bin/s3fs shinjukuzame.shinodogg.com /var/www/mt/html -o allow_other,uid=222,gid=500
[ec2-user@ip-10-132-18-46 mt]$ ls
admin  html  html-old  mt-static
[ec2-user@ip-10-132-18-46 mt]$ cd html
[ec2-user@ip-10-132-18-46 html]$ ls -l
total 1
---------- 1 ec2-user ec2-user 47 May 29 10:48 index.html

 
で、MovableTypeしようと思ったら、、、、ログインパスワード忘れた…w
まぁ、イイや。。MT入れたし、S3マウント出来たし…orz

シェアする

  • このエントリーをはてなブックマークに追加

フォローする