こんばんは、スタッフの平です。

盆休みでは夏休みの自由研究もとい、
今まで後回しになっていたAWS(Amazon Web Services)を活用した
Webサービスの構築をしていました。

過去の話
Amazon Web Servicesをお試し中

AWSはもちろんLinuxに触ったことも殆どなかったので
かかった時間は丸々4日間と盆休みの殆どを使ってしまいました。

↓URLがAWSになっているのが分かります。(セキュリティ対策が弱いと思うのでIPは伏せてます)

 

さて、せっかくAWSにWebサービスを立ち上げることも出来ましたので、
本日は自分へのメモも兼ねてAWS立ち上げ方法を書いていきます。
(再度サーバを立ち上げながら書いていますので2014/8/18日時点では本記事通りにすれば確実にできます)
ただタイトルにもある通り、私自身Linux初心者なので、
間違っていることや無駄なことも書かれている可能性も高いですが、そこはご了承ください。

なので本記事の対象は
AWSもLinuxもよく分からんけど、ローカルで動くPHPサービスをWebで立ち上げてみたい人向けです。
(ちなみにAWSのUI等は頻繁に変わりますので、半年後は本記事通りやっても上手くいかなかったり、
項目自体が変わっているかもしれません)

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ざっくりやったこと一覧
・EC2立ち上げ
・EC2からRDSに接続
・EC2にVNC接続確認
・VNC接続
・EC2とRDS(MySQL)を用いたWebサービスの立ち上げ
・ローカルマシンからEC2へファイル転送(FTP)
・ローカルマシンにDB(MySQLの)をインストールしてWebサービスの立ち上げ

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
1.AWSのアカウントを作ります
下記通りにすれば良いので特に迷うことはないはず。

http://aws.amazon.com/jp/register-flow/

AWS 無料利用枠については下記参照

http://aws.amazon.com/jp/free/

最初のサインアップから12ヶ月間は無料枠が多いが注目です。
ただし間違った項目(課金対象項目)を選択するといきなり課金が始まるのでご注意を
(私も少しばかり痛い目に合いました)

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
2.EC2をたちあげる
少し古いですがドットインストールの動画を見ながらすれば8割方問題なく進めることが出来ます。

http://dotinstall.com/lessons/basic_aws

Step 1: Choose an Amazon Machine Image (AMI)
LinuxといってもAmazon Linux、Red Hat、Ubuntu Server等と種類がありバージョンも違う。
私は↑3種類全て試した結果、最終的にRed Hat Enterprise Linux 6.5の64bitバージョンに落ち着きました。
AWS関連で検索すると色々記事が転がっていますが、その記事とOSが違っていると
異なる結果になることがよくあるのでOS選びは慎重に。

Step 2: Choose an Instance Type
無料枠はti.microしかないのでそのままこれを選びます

Step 3: Configure Instance Details
Subnetをap-northeast-1cに変更。
(RDSに1aがないため)

Step 4: Add Storage
ここも何も変更しない

Step 5: Tag Instance
インスタンス名を決めれますので、とりあえず
”testinstance”と入力しときます

Step 6: Configure Security Group
ポート開放やアクセス可能なIPアドレスを指定します。
初期状態だとSSH接続だけ可能なので
RDSへの接続用3306ポート、ファイル転送用21ポートと60000-60010、ブラウザ表示用の80ポート、VNC接続用の5901ポートを開放しときます。

Type、Protocol、Port Range、Source
Custom TCP Rule、TCP、5901、0.0.0.0/0
Custom TCP Rule、TCP、21、0.0.0.0/0
Custom TCP Rule、TCP、60000 – 60010、0.0.0.0/0
MYSQL、TCP、3306、0.0.0.0/0
SSH、TCP、22、0.0.0.0/0
HTTP、TCP、80、0.0.0.0/0
(本来ならIPアドレス等も限定したほうがセキュアですが今は気にせず先に進みます)

Step 7: Review Instance Launch
世界中からアクセスされる状態だよと言われていますが気にせずLaunch!

そうすると、秘密鍵を作るダイアログが表示されます。
Create a new key pairを選択して
”testkeypair”と入力してtestkeypair.pemをダウンロードしておきます。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
3.EC2へ接続
↓の通りしていけば迷わずいけます
PuTTY を使用して Windows コンピュータから Amazon EC2 インスタンスに接続する

http://docs.aws.amazon.com/ja_jp/gettingstarted/latest/computebasics-linux/getting-started-deploy-app-connect.html

↓からPuTTY と PuTTYGen をダウンロードしましょう

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

★ポイント
・host nameに”ec2-user@”を付け忘れてハマるケースがありますのでご注意を
・AMIによって@マークの前が変わるので注意

http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html#TroubleshootingInstancesConnectingPuTTY

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
4.EC2の設定
無事にEC2にアクセスできたら簡単に初期設定します。
ドットインストールを参考にしたらすんなりいけます。

http://dotinstall.com/lessons/basic_aws

4-1.最初にルートパスワード変更
sudo passwd

4-2 ルートログイン
su

4-3.とりあえずのアップデート
sudo yum update

★ポイント OSによってyumコマンドがなかったり,apt-getコマンドがなかったりと
Linuxに慣れていない人間からすれば非常に大変。

4-4 Webサービスのためのソフトをインストール
2つ目がサービスを立ち上げて
3つ目が再起動してもソフトが自動で立ち上がるためのコマンド

sudo yum -y install httpd php mysql
sudo service httpd start
sudo chkconfig httpd on
sudo nano /var/www/html/index.html
hello
Ctrl+xでYでファイル作成

ブラウザに↓のようなURLを入力しhelloと表示されれば、ここまではOK!

http://ec2-54-64-53-179.ap-northeast-1.compute.amazonaws.com/index.html

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
5.RDS立ち上げ
次にRDSを立ち上げます。

その前にDBのテーブルの値に日本語を入れたい場合
↓サイトの説明通りにParameter Groupsを作っておく必要があります。

http://dotnsf.blog.jp/archives/2211314.html

4b-1 Parameter Groupsでprodを作り、
character_set_database と character_set_server の値としてどちらにも utf8 を指定しておきます。

Step 1:Select Engine
mysqlを選択

Step 2:Production?
Noを選択
★超重要、ここでYesを押しちゃうと、お金がかかる項目を選んでしまうので気をつけましょう

Step 3:Specify DB Details
以下の項目を設定し、後はそのまま
DB Instance Class db.t2.micro
Multi-AZ Deployment No
Allocated Storage 5GB
DB Instance Identifier testdb
Master Username testuser

Step 4:Configure Advanced Settings
以下の項目を設定し、後はそのまま
Availability Zone ap-norheast-1c
VPC Security Group(s) EC2と同じもの
Database Name testdb
Parameter Group prob
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
6.EC2からRDSに接続確認
statusがavailableになったらさっそくputtyを使ってEC2からRDSにアクセスしてみます。

testdbのEndpointが↓のようになっているので
”testdb.xxxx999xxxxx.ap-northeast-1.rds.amazonaws.com”

↓のようなコマンドを入力するとパスワードを聞かれるので、先ほど設定したパスを入力すればOK
mysql -h testdb.xxxx999xxxx.ap-northeast-1.rds.amazonaws.com -u testuser -p

show databases;と入力して
mysql>show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| innodb |
| mysql |
| performance_schema |
| testdb |
+——————–+
こんな感じに反応があればOK!です。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
7.VNC接続
ローカルマシンで作ったPHPファイルをEC2に転送する前に、
GUI操作ができるようにしておくと楽なので先にVNC接続できる環境を構築します。
↓のサイト自体はリモートデスクトップ接続の説明をしていますが、
この通りすればVNC接続出来ました。(中身は完全に理解しているわけではありません^^;)

http://tanyaolinux.blogspot.jp/2014/08/aws-linux-rdp.html

常にルートログインした状態でコマンド入力しています

・SELinux/iptables無効化
nano /etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled

chkconfig iptables off; chkconfig –list iptables
chkconfig ip6tables off; chkconfig –list ip6tables

・TimeZoneとHostName変更
date; cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime;
y
nano /etc/sysconfig/network
#HOSTNAME=ip-xxx-xxx-xxx-xxx.ap-northeast-1.compute.internal
HOSTNAME=rhel65-rdp
reboot

・GnomeGUIインストール
yum groupinstall “X Window System” “GNOME Desktop Environment” “Desktop”

・vncserverのインストールと起動準備
yum install tigervnc-server
nano /etc/sysconfig/vncservers
VNCSERVERS=”1:root”
VNCSERVERARGS[1]=”-geometry 1024×768″
chkconfig vncserver on; chkconfig –list vncserver
vncpasswd
/etc/init.d/vncserver start

・EPELリポジトリのインストール
rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
sed -i ‘s/enabled=1/enabled=0/g’ /etc/yum.repos.d/epel.repo

・xrdpのインストール(いらないかも)
yum –enablerepo=epel install xrdp

・日本語キーボード対応
cd /etc/xrdp/
wget http://www.mail-archive.com/xrdp-devel@lists.sourceforge.net/msg00263/km-e0010411.ini
mv km-e0010411.ini km-0411.ini
ln -s km-0411.ini km-e0010411.ini
ln -s km-0411.ini km-e0200411.ini
ln -s km-0411.ini km-e0210411.ini

・xrdp起動(いらないかも)
/etc/init.d/xrdp start

・GUIを日本語化
yum groupinstall “Japanese Support”
cp -p /etc/sysconfig/i18n /
etc/sysconfig/i18n.org
nano /etc/sysconfig/i18n
#LANG=en_US.UTF-8
LANG=”ja_JP.UTF-8″
cd ~
nano .bash_profile
export LANG=ja_JP.UTF-8

UltraVNCをダウンロードしてインストール(VNC接続できるなら他のアプリでも可)

http://www.forest.impress.co.jp/library/software/ultravnc/

VNCサーバにtestinstanceのPublic IP:5901と入れて接続する
↓こんな画面が表示されます

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
8.ローカルマシンのPHPファイルをEC2に転送する
↓のサイトを参考にすることでWinSCPというソフトを利用して転送することが出来ました

http://blog.genies-ag.jp/2011/07/amazon-ec2-amazon-linux-vsftpd.html

http://www.forest.impress.co.jp/library/software/winscp/

su
yum -y install vsftpd
nano /etc/vsftpd/vsftpd.conf
設定ファイルの修正の仕方は参照サイトを参考にしてください
(pasv_address=固定IPは設定しませんでした)
nano /etc/vsftpd/chroot_list
webadminを入力
★ポイント 空ファイルでいいのでファイルを作っていないと接続時に接続できないです
adduser webadmin
passwd webadmin
service vsftpd start
chkconfig vsftpd on

WinSCPアプリを起動して、
転送プロトコル FTP 暗号化なし
ホスト名にPublic IP、ポート番号21
ユーザ名 Webadmin パスワード
でログインを押すとローカルマシンとEC2上のエクスプローラーが開いてくれます。

↓のようにtest.txtを格納すると、VNC上にtest.txtが現れます

/var/www/html/にphpファイルを直接転送したい場合、
アクセス権限が足りないのでVNC接続し
htmlフォルダを右クリックして、プロパティ→アクセス権の
ファルダのアクセス権をアクセスのみから作成と削除に変更するとWinSCP上でhtmlフォルダに
phpファイルを置くことが出来ます(セキュリティ上望ましくはないですが)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
9.ローカルのMySQL環境をRDSに移行
GUIで操作したかったので、MySQL Workbenchをインストールしました。
(オラクルアカウント作成が必要です)

http://dev.mysql.com/downloads/workbench/

インストールできたらDatabase->Connect to Databaseの
HostnameにtestdbのEndpointを入力
Userにtestdbと入れてOKを押してパスワードを入力すれば接続完了!

Server->DataImport
Import from Self-Contained Fileに予めエクスポートしといたsqlファイルを指定して、
default Schema to be Imported toにtestdbを指定してstart Importすれば以降完了です。

PHPファイル側の接続文字列は↓な感じにすればOK!
詳しくはドットインストールでどうぞ
define(‘DSN’, ‘mysql:host=testdb.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com;port=3306;dbname=testdb’);
define(‘DB_USER’, ‘testuser’);
define(‘DB_PASSWORD’, ‘xxxxx’);

function connectDb() {
try {
return new PDO(DSN, DB_USER, DB_PASSWORD);
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
10.RDSを使わずEC2上にMySQLをインストールして環境を整える場合
DB使用料すら節約したいという方にはEC2上にMySQLを用意する方法があります。

下記あたりのサイトを参考にすれば簡単に構築できます

http://d.hatena.ne.jp/Yosuke_Taka/20130519/1368924602

http://docs.aws.amazon.com/ja_jp/gettingstarted/latest/computebasics-linux/getting-started-deploy-app-download-app.html

sudo yum install mysql-server
sudo chkconfig mysqld on
sudo service mysqld start

mysql_secure_installation
最初にエンター後rootのパスワード入力

mysql -u root -p
先ほど設定したパスワードで入れたらOK!

show databases;
testdbがない
create database testdb;
show databases;
testdbが作られていればOK

9b EC2上のMySQLへインポート
下記サイトを参考

http://napzak.com/tips/?MySQL%E3%81%AE%E3%83%80%E3%83%B3%E3%83%97%EF%BC%88%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%EF%BC%89%E3%80%81%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%80%81%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97

事前に/tmpにsqlファイル(dump.sql)を転送しておく
後は↓のコマンドを叩けばOK
mysql -u root -p –default-character-set=utf8 testdb < /tmp/dump.sql

PHPファイルの設定は↓のようにすればOK
define(‘DSN’, ‘mysql:host=localhost;dbname=testdb’);
define(‘DB_USER’, ‘root’);
define(‘DB_PASSWORD’, ‘xxxxx’);

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
おまけ
MySQLを扱う際、PDOが初期状態では使えないらしく↓のサイトを参考にすることで稼働確認

http://tech-gym.com/2011/04/%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC/262.html

http://blog.be-style.jpn.com/article/73397659.html

sudo yum -y install php-pdo
sudo yum install php php-devel php-pdo php-pear php-mcrypt php-mysql php-mbstring
sudo nano /etc/php.ini
extension=pdo.so
extension=pdo_mysql.so

PHPのエラーを表示させる方法

http://pupnpupa.hatenablog.com/entry/2013/12/24/125041

nano /etc/php.ini
display_errors = On
公開時にはOFFにするのを忘れてはいけません。

↑の設定を反映するためにphpの再起動
/etc/rc.d/init.d/httpd restart

★重要ポイント
テーブル名に大文字を使っていると、ローカルでは上手く動いていても
RDS上ではうまく動かない可能性がありますので、基本小文字だけで構成しましょう
私はここでかなりハマりました。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ざっくりした説明になりましたが、
今後AWSを試してみたいという方は本記事や本記事が参照しているサイトを参考に
ぜひ頑張ってみてください!

役に立ったよ、という方は、
Facebookページにいいね!もして頂けると嬉しいです

受付中イベント情報はこちら

まだの方は、ビジネスクリエーターズへの会員登録をどうぞ。
会員登録は無料です。

明日は平田君です。