#はじめに
この記事はJAWS-UG関西女子会「はじめて女子応援企画!事例から学ぶもくもく&もぐもぐ会」で
もぐもぐ 1 もくもくする際のテキストとなります。
#本記事での目標
- EC2でWEBサーバーを構築すること
- RDSでデータベースサーバを構築すること
- EC2インスタンスへEC-CUBEインストール及び疎通確認
- ELBでWEBサーバーの負荷分散をすること
#EC2でWEBサーバーを構築すること
###EC2でWEBサーバーを構築するまでのながれ
- 事前準備・確認
- セキュリティグループの作成
- EC2インスタンスの起動
- EC2インスタンスへの疎通確認と初期設定
- 2つ目のEC2インスタンスの起動
- 2つ目のEC2インスタンスの疎通確認
#EC2の用語について
- VPC:
- Virtual Private Cloudの略
- プライベートなネットワーク空間を作ることができるのでオンプレの社内LANと同じような環境となる
- 今回はAWSアカウント作成時にデフォルトで作成されているVPCを使います
- プライベートなネットワーク空間を作ることができるのでオンプレの社内LANと同じような環境となる
- subnet:
- VPCの中につくるネットワークのこと
- 今回はAWSアカウント作成時にデフォルトで作成されているサブネットを使います
- 本番運用時はサブネットの範囲をもっと狭くしたサブネットを使用します
- 今回はAWSアカウント作成時にデフォルトで作成されているサブネットを使います
- セキュリティグループ:
- インスタンスに対するファイヤーウォール機能のこと
- インスタンスに対するInbound方向とOutbound方向の通信許可設定ができます。
- 拒否設定はできません。また戻り通信に対する許可は考慮しなくてOKです
- インスタンスに対するInbound方向とOutbound方向の通信許可設定ができます。
- ELB:
- Elastic Load Balancerの略
- 負荷に応じてELB自身のスペックアップが自動でされます
- ※本手順では独自ドメインとの割当て方は省いています。
- 独自ドメインをしたい場合はサポートメンバーに言ってください!!
- 負荷に応じてELB自身のスペックアップが自動でされます
#構築手順
##1.事前準備・確認
デフォルトVPCやサブネットといった環境を構築する為に必要なネットワーク環境がそろっているかの確認をします。
1.1.VPCの確認をします。 
1.2.VPCメニューで「Your VPCs」をクリックします。 
1.3.デフォルトVPCができていることを確認します。 「Default VPC」欄が「Yes」となっているものがデフォルトVPCとなります。 「VPC CIDR」欄に表示されているネットワークアドレスをどこかにメモします。 
1.4.左メニューで「Subnet」をクリックします。 
1.5.「Default Subnet」欄が「Yes」となっているサブネットが2つあることを確認します。 それぞれの「CIDR」欄に表示されているネットワークアドレスをどこかにメモします。 
##2.セキュリティグループの作成 ロードバランサ用、WEBサーバ、DBサーバ用の3つのセキュリティグループを作成します。
2.1.左メニューで「Security Groups」をクリックします。 
2.2.「Create Security Group」ボタンをクリックします。 
2.3.WEBサーバ用のセキュリティグループを作成します。 以下のように入力して下さい。 VPC欄は手順1.3.でメモをしたVPC CIDRと同じものを選択します。 
2.4.「Yes, Create」ボタンをクリックします。 
2.5.セキュリティグループができあがっていることを確認します。 RDS用とELB用のセキュリティグループも作成するので「Create Security Group」ボタンをクリックします。 
2.6.RDS用のセキュリティグループは以下のように入力して作成します。 
2.7.ELB用のセキュリティグループは以下のように入力して作成します。 
2.8.合計3つのセキュリティグループができあがっていることを確認します。 
2.9.EC2メニューへ移ります 
2.10.左メニューで「Security Groups」をクリックします。 
2.11.作成したセキュリティグループに通信許可を与えます。 先ほど作成したセキュリティグループが表示されていることを確認し、Webサーバ用に作成した「eccube-public」セキュリティグループの左の「四角」をクリックし画面下側ペインの「Inbound」タブをクリックします。 
2.12.「Edit」ボタンをクリックします。 
2.13.「Type」で「SSH」を選択します。 
2.14.「Source」で「My IP」を選択します。 選択後、右側の枠内にIPアドレスが表示されていることを確認します。 
2.15.「Save」ボタンをクリックします。 
2.16.設定が反映されていることを確認します。 
##3.EC2インスタンスの起動
WEBサーバ用のEC2インスタンスを作成します。
3.1.EC2左メニューで「Instances」をクリックします。 
3.2.「Launch Instance」ボタンをクリックします。 
3.3.今回はOSがAmazon Linuxの仮想サーバインスタンスを作成するので、Amazon Machine Image選択画面で 「Amazon Linux AMI 2015.03 (HVM), SSD Volume Type - ami-cbf90ecb」と表示されている部分の横の「Select」ボタンをクリックします。 
3.4.インスタンスのスペックの選択画面で今回は「t2.micro」の左にチェックを入れ、「Next Configure Instande Details」ボタンをクリックします。 
3.5.インスタンスの詳細画面で「Network」はデフォルトVPCが選択されているのを確認します。 「Subnet」では東京リージョンのアベイラビリティゾーンAのデフォルトサブネットであるap-northeast-1aのデフォルトサブネットを選択します。 
3.6.「shutdown behavior」で「STOP」となっていることを確認します。 ※ここが「terminate」となっている場合、インスタンスのシャットダウンをした際にインスタンスを削除してしまいます。 インスタンスの利用用途で1度だけ起動してシャットダウンをする際に削除をしたい場合はterminateでも良いのですが、シャットダウンをしても削除をしたくない場合はSTOPとします。 
3.7.Enable termination protectionで「Protect against accidental termination」にチェックを入れます。 こうしておくと、間違えてterminate(削除)ボタンを押してしまった場合でも削除は実行されません。 ※本当に削除したい場合はあらかじめtermination protectionを解除しておく必要があります。 
3.8.「Next Add Storage」ボタンをクリックします。 
3.9.ストレージ追加画面で「size」を「30GB」にし、「Next Tag Instance」ボタンをクリックします。 ※本番運用する場合は「Add New Volume」ボタンをクリックし、新たにユーザ領域用のEBSボリュームを追加します。 また、ボリュームタイプがGeneral purpose(汎用SSD)の場合、ボリュームの容量により秒辺りのディスクIOの値が変化します。 今回は30GBとしていますが、本番運用時は最低100GBぐらいを目安にして十分なディスクIOを確保します。 
3.10.タグをインスタンスに付けます。 「Name」keyのValueとして「web01」と入力し、「Create Tag」ボタンをクリックします。 
3.11.次のKeyには「Domain」と入力し、Valueには「mokumokugirls」と入力し「Next Configure Security Group」ボタンをクリックします。 ※Billing &Cost Management画面であらかじめ「Preferences」メニューで「Receive Billing Reports」をオンにしておくと、請求が確定した際にS3に請求明細レポートがcsvファイルで保存されます。 タグを付けておくと請求明細レポートで一つ一つの請求項目に対してタグが表示されるようになります。 Nameはサーバー名、Domainはシステム名としておくと複数システムを同じAWSアカウントで運用する場合にシステム毎、サーバ毎の費用の算出がしやすくなります。
■請求明細レポートで使用量を理解する
http://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/detailed-billing-reports.html
3.12.セキュリティグループ設定画面であらかじめ作成しておいたセキュリティグループを指定します。 「Select an existing security group」にチェックを入れます。 
3.13.あらかじめ作成しておいたWEBサーバ用のセキュリティグループの行にチェックを入れ、「Review and Launch」ボタンをクリックします。 
3.14.設定内容が正しいかを確認し「Launch」ボタンをクリックします。 
3.15.キーペアと呼ばれるサーバへSSH接続をする際に必要となる秘密鍵を作成します。 ドロップダウンリストで「Create a new key pair」を選択します。 
3.16.「Key pair name」に「mokumokugirls」と入力し「Download Key Pair」ボタンをクリックします。 
3.17.pemファイルのダウンロードが完了したら「Launch Instances」ボタンをクリックします。 ※秘密鍵のダウンロードができるタイミングはここだけですので、ダウンロードした秘密鍵は無くさないようにしましょう。 ただし、この秘密鍵があるとサーバへSSH接続ができてしまうため、他人にわからない所に保存しましょう。 **秘密鍵の公開ダメ!!絶対!!** 
3.18.Launch Instancesボタンをクリックした後にインスタンスの作成が始まります。 インスタンスIDがリンク表示されるのでクリックをします。 
3.19.インスタンス一覧でInstance Stateが「pending」と表示され、一番左側がグルグルしている間はインスタンスの作成中となります。 
3.20.作成が完了したらInstance Stateの表示が「running」と変わります。 
※Instance Stateの表示が「running」となっていても「Status Checks」が完了するまではSSH接続でログインが出来ません。
※「Status Checks」の表示が「2/2 checks passed」となるとインスタンスの正常性が確認できたことを表します。
もしもStatus checksでエラーが出ていた場合はインスタンスの起動に失敗しています。
##4.EC2インスタンスへの疎通確認と初期設定
4.1.作成したWEBサーバへ接続できるかの確認をします。
PublicIPをどこかにメモします。
4.2.SSH接続をします。 **Windowsの場合** [こちらを参照して下さい](http://qiita.com/tam-midori/private/4d27f9eeba6d1e59c75e)
Macの場合
こちらを参照して下さい
4.3.初期設定をします。 【タイムゾーン変更】 デフォルトではタイムゾーンがUTCとなっているため日本時間に変更します。
$ sudo su - root
# cp /usr/share/zoneinfo/Japan /etc/localtime
cp: overwrite ‘/etc/localtime’?`「y」を入力します
また、これだけだとyumでupdateするとutcに戻るので/etc/sysconfig/clockのZONEをAsia/Tokyoにします。
# vi /etc/sysconfig/clock
「i」のキーをタイプするとBackspaceや文字の入力ができるようになります。
「ZONE="UTC"」と表記されているのを以下に変更します。
ZONE="Asia/Tokyo"
保存する場合は「ESC」キーをタイプし「:wq」を入力してEnterキーをタイプします。
この後crond再起動します。
# service crond restart
Stopping crond: [ OK ]
Starting crond: [ OK ]
【OSパッチ適用】
EC2インスタンスを起動させる際にAMIを選びますが、AmazonLinuxのAMIは約半年ごとのリリースとなります。
このため、適用されていないOSのパッチがあるので一度、全体のアップデートします。
# yum update
…
Is this ok [y/d/N]: 「y」を入力します。
…
Complete!
その後、全体の再起動をします。
# reboot
【ec2-user パスワード付与】
初期設定ではec2-userにはパスワードが設定されていません。
SSHの秘密鍵が万が一漏れた場合に備えて、ec2-userのパスワードを設定します。
passwd ec2-user
Changing password for user ec2-user.
New password: 好きなパスワードを入力して下さい
Retype new password: 同じパスワードを入力して下さい
passwd: all authentication tokens updated successfully.
【ec2-user sudoパスワード必須化】
ec2-userでrootユーザーにしか実行権限のないコマンドを実行する際にコマンドの前に
「sudo」を付けて実行するのですが、その際にec2-userのパスワードを入力しないと
コマンドの実行をできないように設定します。
visudo -f /etc/sudoers.d/cloud-init
以下のように表示されているのを・・
ec2-user ALL = NOPASSWD: ALL
# User rules for ec2-user
ec2-user ALL=(ALL) NOPASSWD:ALL
以下のように変更して保存します。
ec2-user ALL = NOPASSWD: ALL
# User rules for ec2-user
#ec2-user ALL = NOPASSWD: ALL
ec2-user ALL=(ALL) ALL
【root パスワード付与】
rootユーザーにもパスワードを付与します。
passwd root
Changing password for user root.
New password: 好きなパスワードを入力して下さい
Retype new password: 同じパスワードを入力して下さい
passwd: all authentication tokens updated successfully.
【history時刻表示】
historyコマンドでそれまでにユーザーが実行したコマンドの履歴を確認することができます。
デフォルトでは実行した時間は表示されないため、時刻表示をさせるように設定します。
※複数名でサーバーを構築・管理している場合にこの設定を入れておくと
大体の時刻から誰がどのようなコマンドを実行したかがわかるようになります。
# vi /etc/profile
↓を一番下に追記
export HISTTIMEFORMAT='%F %T '
/etc/profileの変更を反映させます。
※hisotryに時刻表示設定をしたタイミング以降の時刻が記録されるので、それ以前のhistoryの時刻は上記設定をした時刻となります。
# source /etc/profile
これで初期設定は完了です。
本番運用時はこれらに加えてアンチウィルスソフトのインストール、インターネットへ公開するサーバであれば
DeepSecurityなどのインストールも行います。
※今回は割愛します
4.4.ECサイトに必要となるミドルウェアをインストール・設定します。
【Apacheインストール】
以下コマンドを実行します
# yum -y install httpd
…
Complete!
# service httpd start ←Apacheを起動します
# chkconfig httpd on ←サーバを再起動しても自動でApacheが起動するようにします
【phpインストール】
以下コマンドを実行します
# yum -y install php
…
Complete!
# service httpd restart ←Apacheを再起動します
4.5.Apache、phpのインストール確認をします
以下の内容を実行します。
# vi /var/www/html/info.php
以下の内容を追加して保存する
<?php
phpinfo();
?>
4.6.WEBサーバー用セキュリティグループに自分のPCのIPからhttp接続ができるように設定します
4.7.ブラウザから以下のURLにアクセスしてphpinfoが表示されることを確認します
http://EC2インスタンスのPublic IPアドレス/info.php
4.8.EC-CUBEのインストール ECサイトをEC-CUBEを使って構築します。 [こちらを参照して下さい](http://qiita.com/naotinn74/private/83ccefd08bbea796f359)
##5.ふたつめのEC2インスタンスの起動
今回はWEBサーバが2台構成となるため、もう1台EC2インスタンスを起動します。
もう一回さっきと同じことをやるの?と思うと面倒ですよね!
そこで先ほど作成したEC2インスタンスをコピーしちゃいましょう!
5.1.先ほど作成したインスタンスにチェックを入れ「Actions」ボタンをクリックし「image」→「Create Image」をクリックします。 
5.2.「image name」、「image description」を入力し「Create Image」ボタンをクリックします。 
5.3.「Close」ボタンをクリックします。 
5.4.左メニューで「AMIs」をクリックします。 
5.5.AMIの作成が進んでいることがわかるかと思います。 Statusが「Available」となると作成完了です。 
5.6.作成完了までの間、ちょっと暇になるのでAMIに名前をつけましょう。 「Name」の部分にカーソルを合わせると鉛筆マークが出てくるので鉛筆マークをクリックします。 
5.7.AMIの名前を入力し、チェックマークをクリックします。 
5.8.これでAMIに名前がつきました。 
5.9.Statusが「Available」となったら作成完了です。 
5.10.作成したAMIからEC2インスタンスを起動します。 そうすると出来上がったEC2インスタンスのOS設定はAMIを取ったEC2インスタンスと同じものになります。 「Launch」ボタンをクリックします。 
5.11.インスタンスタイプはそのままで「Next…」ボタンをクリックします。 
5.12.2台目のWEBサーバーは別のAvailability Zoneに作成したいので、Subnetの選択で「ap-north-1c」と表示されているSubnetを選択します。 
5.13.画像と同じように設定をして「Next…」ボタンをクリックします。 
5.14.ストレージも元々のEC2インスタンスを同じ容量(30GB)となっていることを確認して「Next…」ボタンをクリックします。 
5.15.タグを付けます。 2台目なので名前は「web02」とします。 Domainのタグも付けます。 一度入力したことのある文字列はテキストボックスにある程度入力すると下に候補として表示されるようになります。 クリックで選択します。 
5.16.「Next…」ボタンをクリックします。 
5.17.セキュリティグループを選択し「Review and Launch」ボタンをクリックします。 
5.18.設定内容を確認して「Launch」ボタンをクリックします。 
5.19.キーペアの画面では先ほど作成した際に作ったキーペアを使うため以下のようにして選択します。 
5.20.チェックを入れ「Launch Instance」ボタンをクリックします。 
5.21.インスタンスIDのリンクをクリックしましょう。 
5.22.web02が作成中なのがわかるかと思います。 ここで「さっき作ったweb01は?」と思われるかと思います。 
5.23.サーチボックスにインスタンスIDが表示されていますが、その右端にある✕をクリックすると作成したインスタンスすべてが見えるようになります。 
5.24.Instance Statusが「running」となりInstance Checksも「2/2 passed」となれば作成完了です。
##6.ふたつめのEC2インスタンスの疎通確認
web02へのアクセス、内容が同じとなっているかの確認をしましょう。
※OSの初期設定時にec2-userにパスワードを付与したので、接続する際に「パスフレーズ」には設定したパスワードを入れましょう。
6.1.確認コマンド
# sudo su - root
パスワード入力を求められ、WEB01で設定したrootのパスワードでrootにスイッチできればOK
# date
日本時間で現在の時刻が表示されればOK
# history
自分がWEB01で打ち込んだコマンドが表示されればOK
# chkconfig --list httpd
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off ←が表示されればOK
# rpm -qa | grep php
php-5.3.29-1.8.amzn1.x86_64
php-common-5.3.29-1.8.amzn1.x86_64
php-cli-5.3.29-1.8.amzn1.x86_64 ←この3つが表示されればOK
これでEC2インスタンスの作成は完了です。
EC-CUBEの同期設定で少し変える部分があるので以下を参照して下さい
こちら
次はRDSの作成に移ります。
こちら
-
節子!それは懇親会や!! ↩