AWSを初めてさわってみたメモ 2015年版

AWS上でちょっとしたWebサービスをつくる必要があったのですが、**そもそもAWSって何するもんなの？**というところからして理解が怪しく、何はともあれさわってみよう、ということでドットインストールの動画を見ながらやってみました。

http://dotinstall.com/lessons/basic_aws

ほぼドットインストール通りだしこのあたりは既に多くの記事が出ているところなのですが、いろいろとダッシュボードのウィザードが変わっていて手順が違ったりとかもあったりしたので、**2015年2月17日現在に実際にやってみた最新手順**ということで「2015年版」と題しました。


##アカウント作成

割愛


##EC2インスタンスを立ち上げる

EC2 は何の略なんだろうと調べてみると "Elastic Compute Cloud" と余計わかりにくくなるが、とにかく仮想サーバーらしい。

- [AWS Dashboard] > [EC2 Dashboard] > [Launch Instance]ボタンをクリック

- 「Step 1. Choose AMI」 では Amazon Linux AMI を選んどけばOK（ドットインストールで言ってた）
- 「Step 2. Choose Instance Type」 とりあえず一番上ので。（ドットインストールで言ってた）
- Step 3, 4 そのまま
- 「Step 5. Tag Instance」適当に名前つける MyWeb1
- 「Step 6. Configure Security Group」ではデフォルトでSSHが入っているので、Add Rule でHTTPも追加（設定はそのまま）
- Review and Launch ボタンをクリック
- Laucn ボタン押すと鍵を選ぶポップアップが立ち上がるので、最初は Create a new key pair を選んで名前をつけて鍵をダウンロード
  - xxxx.pem というファイルをどっかに大事に保存しておく（~/.ssh/ 配下に置いとくのが後々便利そう）
- Launch Instances ボタンをクリック → インスタンスが立ち上がる

[EC2 Dashboard] > [Instances] みると、Status Checks の欄が途中なので完了するまでしばらく待つ

##サーバーに接続する

- インスタンスの行を右クリック > [Connect] ででてくるダイアログの SSH 接続の Example をコピーしておく

> ssh -i xxxx.pem xxxxx（長い）

- 秘密鍵（.pem）のパーミッションを600にする
- （秘密鍵のあるディレクトリで）コピーしたコマンドを実行
  - 初めてのホストですけどいいですかと聞かれるのでyes

```
The authenticity of host 'xx.xx.xx.xxx (xx.xx.xx.xxx)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xx.xx.xx.xxx' (RSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/
9 package(s) needed for security, out of 12 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-xxx-xx-xx-xxx ~]$ 
```

これで接続ok

システムのアップデートをしてくださいと言われるので、実行

```
$sudo yum update
```

また y か n か聞かれるので y

```
総ダウンロード容量: 22 M
Is this ok [y/d/N]: y
```

###いろいろインストール

httpd と php と mysql をインストール

```
$ sudo yum -y install httpd php mysql
```

-y オプションは yes/no 聞かれるところを全部 yes でやってくれる


###Webサーバー起動

```
$ sudo service httpd start
```

> Starting httpd:                                            [  OK  ]

再起動時に自動的にhttpdが立ち上がるようにする

```
$ sudo chkconfig httpd on
```

##Webサーバーが動いているかを確認する

Webページをつくってみる

```
$ sudo vim /var/www/html/index.html
```

```
<html>
Hello!
</html>
```

EC2ダッシュボードから、該当インスタンスを選択したときに下部に出る情報の中にある Public DNS をコピーする。これが URL になるので、ブラウザからアクセスしてみる

##イメージをつくる

設定内容をテンプレ化したもの

同じWebサーバーをつくりたいときに楽

- 右クリック > [Image] > [Create Image]
- 名前を入力して、あとはデフォルトでOK
- [Create Image] ボタンをクリック

（サーバーがシャットダウンされ、スナップショットがつくられ、イメージ作成が開始される。しばらく時間がかかる）

##IPアドレスを設定する

いまのままだと起動するたびにアドレスが変わってしまうので、IPアドレスを割り当てる

- EC2ダッシュボードの左メニューにある [Elastic IPs] > [Allocate New Address] ボタンをクリック
- ポップアップが出るので、 yes ボタンをクリック

###インスタンスにひもづける（Associate）

- 生成されたIPアドレスを選択して右クリック > [Associate Address]

- ポップアップするダイアログの Instance の欄から Associate したいインスタンスを選び、 Associate ボタンをクリック

- 左メニューの Instances からインスタンスの情報を確認すると、Elastic IPの欄に先ほどのIPアドレスが表示されている。

- そのアドレスでブラウザからアクセスできる


###インスタンスとのひも付けを解錠（Deassociate）

外すときは Elastic IPs の右クリックメニューから Deassociate

EC2に結びついていないアドレスは課金されてしまうので、Release Address でリリース（解放）する


##データベースの設定

AWSダッシュボードから RDS を選択

- [Get Started Now] ボタンをクリック（初回じゃなければ Launc a DB Instance ボタン？ドットインストールではそうなってた）

- MySQL を選択

- Step 2: Production? というので商用利用かどうかを聞かれる。（ここドットインストールにはなかったのでググった）

http://www.cloud-koubou.jp/%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89rds%E5%A7%8B%E3%82%81%E3%82%8B%E4%BA%BA%E5%BF%85%E8%A6%8B%EF%BC%81%E2%91%A5rds%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E8%B5%B7%E5%8B%95/

デフォルトがyesになってるが、今回はお試しなのでnoに

###Step 3: Specify DB Details

- [DB Instance Class] は一番小さいものにする（一番上）
- [Multi-AZ Deployment] 練習中は no （本番は yes にすべきだがお金がかかる）
- [Allocated Storage] 最小が5Gなので、とりあえず5
- [DB Instance Identifier] 適当に、MyDBInstance とか
- [Master Username][Master Password] DBにアクセスするためのユーザー名とパスワード


###Step 4: Configure Advanced Settings

- [Availability Zone] EC2で選んだのと同じにする
- [Security Group] EC2で選んだのと同じにする
- [Databace Name] 適当に

あとはデフォルトで、Launch DB Instance ボタンをクリック

（作成完了までしばらく時間がかかる）

##EC2からDBに接続する

- DB Instance を選択すると表示される詳細情報から、Endpointをコピーしておく

> xxxx.cniwpuihdejp.ap-northeast-1.rds.amazonaws.com:3306

左メニューから「Security Groups」を選択

→ ドットインストールの話とは違って、下記のエラーが出た

> Your account does not support the EC2-Classic Platform in this region. DB Security Groups are only needed when the EC2-Classic Platform is supported. Instead, use VPC Security Groups to control access to your DB Instances. Go to the EC2 Console to view and manage your VPC Security Groups. For more information, see AWS Documentation on Supported Platforms and Using RDS in VPC.


- VPC Dashboard に行って、左メニューから [Security Groups] で EC2 / RDS で選択したグループを選択

- [Inbound Rules] タブの [Edit] ボタンクリック [Add another rule] ボタンクリック
  - Type: All Trafic, Protocol: ALL, Port Range: ALL, Souce: sg-xxxxx
  - Saveボタンクリック

（参考）http://mycode.snow69it.net/945/


sshでEC2に接続して、

```
$ mysql -h xxxx.cniwpuihdejp.ap-northeast-1.rds.amazonaws.com:3306 -u username -p
```

-h はホスト指定。上記でコピーしておいたRDSインスタンスのエンドポイントを指定する

ただ

> ERROR 2005 (HY000): Unknown MySQL server host 'xxxx.cniwpuihdejp.ap-northeast-1.rds.amazonaws.com:3' (0)

ってエラー


最終的にこの記事に行き着いて、

http://recipe.kc-cloud.jp/archives/397

```
$ mysql -h mydbinstance1.cniwpuihdejp.ap-northeast-1.rds.amazonaws.com -P 3306 -u shu223 -p MyDB1
```

これで行けた。ポート指定のやり方が違ってたのと、DB名を指定してなかった


###チェック項目

- Availability Zone が EC2 と RDS で合っているか？
- Security Group が EC2 と RDS で合っているか？
- Security Group の設定はできているか？