AWS体験ハンズオン 〜セキュア&スケーラブルウェブサービス構築〜 に参加した

概要

AWS体験ハンズオン 〜セキュア&スケーラブルウェブサービス構築〜 に参加した
その際に学んだことや、調べたことを記載する。あくまでメモなのでざっくりと記載。また破棄するためパスワードやIPアドレスは惜しみもなく公開する
内容とは関係ないが、嬉しかったことはAWSマネジメントコンソールが2014年中くらいには日本語化されるとのこと

RegionとAvailabilityZone(AZ)

リージョン(Region):アジアパシフィック(東京)や米国東部(バージニア北部)など、地理的に離れたデータセンター群のこと
アベイラビリティゾーン(AvailabilityZone):リージョンに複数のそれぞれ独立したロケーションがあり、そのロケーションのこと。これらは距離が離れており独立した電源網やネットワークを利用している
異なったアベイラビリティゾーンは高速専用線でつながっているが、やはり同じアベイラビリティゾーンと比較すると転送速度は落ちる
Screenshot 2014-09-14 at 03.53.24

Amazon VPC(Virtual Private Cloud)とは

・仮想ネットワークのことで、クラウド内にプライベートネットワークを構築可能
・VPNや、キャリア閉域網からVPCに接続可能
・AmazonはEC2などを作成した時に、デフォルトでVPCを作成する仕様となっている
・VPCを作成することは、実世界ではルーターやハブを用意して環境を構築する作業と同じ
・VPCで作成した仮想ネットワーク内にいくつかのサブネットを切り出してそこにEC2構築することが通常の利用方法
・一度設定したVPCのサイズやサブネットは変更できないため注意

サブネットを切り出すメリット

 
・サブネットのAZを変更でき、あるサブネットに障害が発生したときに、他方に影響が及びにくい
・サブネットそれぞれにNACL(Network Access Control List – サブネットごとにセキュリティグループを設定できる、デフォルトはフルオープン)を設定できる
 これ利用して、外部からアクセスさせないサブネットを作成し、そこにDB構築するといったことができる
・それぞれのサブネットに別のルーティングテーブルを設定することが可能

コスト

・VPC利用料は無料。VPNconnectionを利用すると費用が発生する
Screenshot 2014-09-18 at 00.33.00

Phase1-EC2のみでサイトを構築-

以下が構成図
Screenshot 2014-09-14 at 23.40.40

1.VPCの作成

[VPC with a Single Public Subnet]を選択
Screenshot 2014-09-15 at 02.38.42

[Hardware tenancy]を[Dedicated]とすると物理サーバを専有(他ユーザーの仮想マシンがのらない)するため別途費用がかかる
[Enable DNS hostnames]にチェックするとAmazonVPCが提供するDNSサーバが利用される
独自のDNSサーバを利用したいときはチェックを外す
Screenshot 2014-09-15 at 03.04.47

VPCの確認画面
[Internet Gateway]のIDはランダムに⽣成される
Screenshot 2014-09-15 at 03.09.52

2.EC2の作成

[AWS Market]よりwordpressが設定してあるAMI(Amazon Machine Image)を選択
Screenshot 2014-09-15 at 03.26.08

[Auto-assign Public IP]はあとでパブリックIPを設定するためデフォルトのままにしておく
PrivateIPはStop/Startしても変わらない
Screenshot 2014-09-15 at 03.37.01

公開鍵はEC2起動時に自動的に埋め込まれる
インスタンスを破棄するときは、[Terminate]する。デフォルトでEBS(Elastic Block Store)も削除される
Screenshot 2014-09-15 at 03.40.11

3.Elastic IPの割当て

Screenshot 2014-09-17 at 00.22.53

[Reassociation]にチェックすると仮想IPを利用しやすくなる
Screenshot 2014-09-17 at 00.25.05

この作業でEC2にパブリックIPが割り振られる
Screenshot 2014-09-17 at 00.31.12

4.確認作業

無事にEC2にログインできた、またVPC内のDNSを利用していることが確認できた

Welcome to Ubuntu 12.04.4 LTS (GNU/Linux 3.2.0-61-virtual x86_64)
       ___ _ _                   _
      | _ |_) |_ _ _  __ _ _ __ (_) 
      | _ \ |  _| ' \/ _` | '  \| | 
      |___/_|\__|_|_|\__,_|_|_|_|_| 

  *** Welcome to the Bitnami WordPress 3.9.1-0      ***
  *** Bitnami Wiki:   http://wiki.bitnami.com/      ***
  *** Bitnami Forums: http://community.bitnami.com/ ***
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

bitnami@ip-10-0-0-6:~$ sudo su
root@ip-10-0-0-6:/home/bitnami# cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.0.0.2
search ap-northeast-1.compute.internal

またサイトも動作しており、Phase1は完了
Screenshot 2014-09-17 at 00.44.21

Phase2-EC2+RDSでサイトを構築

Screenshot 2014-09-17 at 00.48.14

AmazonRDS(Relational Database Service)とは

・MySQLのセキュリティパッチ、バックアップ(35日間バックアップを取得でき、5分前まで戻ることが可能)の自動適用が可能
・AmazonRDSプロビジョンドIOPSストレージ(ディスク性能を確保)を使用している場合は、ストレージを最大3TB まで、IOPSを最大 30,000 までプロビジョニング可能
・データベースの容量増加やスペック増加が容易にできる(容量については無停止で実施可能)
・MultiAZを利用すると、スレーブがsyncしないと更新さず、マスタ障害時に自動でフェールオーバする

1.AmazonRDSの設定

DBサブネットグループを作成し、RDSに適用する

DBサブネットグループを作成する

サブネットを2つ作成する
Screenshot 2014-09-18 at 01.14.15
Screenshot 2014-09-18 at 01.16.15

先ほど作成した2つのサブネットを利用して、DB Subnet Groupを作成する
Screenshot 2014-09-18 at 01.21.08

DBインスタンスの作成

小さく始めたいのならば、[No, this instance is intended for use outside of production or under the RDS Free Usage Tier
]で対応する
Screenshot 2014-09-18 at 01.26.38

パスワードを忘れても管理画面からなんとかなるらしい
Screenshot 2014-09-18 at 01.30.03

Maintenance Window
メンテンナンス設定時間に予め予約しておくと、自動スケールアップができる
Screenshot 2014-09-18 at 01.33.58
Screenshot 2014-09-18 at 01.34.25

2.データの移行

### バックアップを取得 ###
root@ip-10-0-0-6:/opt/bitnami/apps/wordpress/htdocs# mysqldump --default-character-set=utf8 -ubn_wordpress -p6a9cc6ece7 bitnami_wordpress > db.sql
### 試しにDBに接続 ###
root@ip-10-0-0-6:/opt/bitnami/apps/wordpress/htdocs# mysql -hwp-db.ccre52breram.ap-northeast-1.rds.amazonaws.com -uawsuser -pmypassword ### 試しに接続。。感動。
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 266
Server version: 5.6.19-log MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| innodb             |
| mysql              |
| performance_schema |
| wordpress          |
+--------------------+
5 rows in set (0.01 sec)

mysql> quit;
Bye
### リストア ###
root@ip-10-0-0-6:/opt/bitnami/apps/wordpress/htdocs# mysql -hwp-db.ccre52breram.ap-northeast-1.rds.amazonaws.com -uawsuser -pmypassword wordpress < db.sql
### wordpressのデータベース情報を変更する ###
root@ip-10-0-0-6:/opt/bitnami/apps/wordpress/htdocs# vi wp-config.php

3.確認作業

WPサイトが閲覧できた
Screenshot 2014-09-19 at 00.13.26

Phase3-ELB+EC2*2+RDSでサイトを構築

Screenshot 2014-09-21 at 21.03.43

1.AMIの作成と、サーバ作成

AMIとは

・Amazon Machine Image、Amazon EC2で用いられるOSのディスクイメージ
・AMIを利用して全く同じ設定のサーバを何個でも起動できるようになる
・AMI の作成プロセスは、インスタンスのルートストレージデバイス(Amazon EBS ボリュームかインスタンスストアボリューム)により決まる

AMIの作成と、AMIからサーバ作成

[Create Image]する
Screenshot 2014-09-21 at 01.24.11

[no reboot]にチェックすると、AMI作成時にEC2をシャットダウンしない
整合性が取れなくなる可能性があるため、できればチェックをせずにシャットダウンしたほうがよい
Screenshot 2014-09-21 at 01.24.11

セキュリティグループを作成し、AMIからEC2を作成する
Screenshot 2014-09-21 at 01.44.37

[Route Table]に[Internet Gateway]を含むようにする
Screenshot 2014-09-21 at 01.51.15

[Launch]から起動する
Screenshot 2014-09-21 at 02.03.17

Screenshot 2014-09-21 at 02.07.34

2.ELB(Elastic Load Balancing)の作成

・ELBは複数のEC2間で、アプリケーショントラフィックの負荷を自動的に分散できる
・Amazon Route 53 のヘルスチェックとDNSフェイルオーバーの特徴を使用して、ELBで稼働するアプリケーションのアベイラビリティを向上させることができる
・障害発生時に片方のEC2だけで動作できる環境にしておく必要がある

[Create an internal load balancer]にチェックすると内部ロードバランサとして動作する
Screenshot 2014-09-21 at 13.46.54

メンバに登録後、[Healthy Threshold]回成功したら正常な状態と判断し、メンバとしてトラフィックを流す
[Health Check Interval]間に[Unhealthy Threshold]回エラーとなったらメンバから外す
外れたらどうやら自動復旧しないらしい(ここらへんは今度追う)
Screenshot 2014-09-21 at 13.49.46

ELBの属するSubnetを選択する。APサーバのSubnetである 10.0.0.0/24 と 10.0.2.0/24 を選択
Screenshot 2014-09-21 at 13.51.47

Screenshot 2014-09-21 at 13.53.11

Screenshot 2014-09-21 at 13.53.57

最後に[Create]で作成する

[Instance]から状態を確認すると[Inservice]となっていることがわかる
APサーバのSecurity GroupにELBのSecurity GroupをSourceとして利用し(ELBのSecurity Group IDを指定)、80番はELBからしかアクセスできないようにすることで、セキュリティを向上できる
Screenshot 2014-09-21 at 14.21.54

※EC2を停止する場合は、ELBから削除すること
 ELBと紐づけたEC2を停止して、一定時間後に開始した後、[Out of Service]のままになることがある
 理由は、EC2が起動したことをロードバランサが認識するまで時間がかかるとのこと
 そのため停止する場合は、一度ELBから削除して、起動後再登録したほうがよいらしい

3.RDSのMulti-AZ化

[Multi-AZ Deployment]を[Yes]に変更する
Screenshot 2014-09-21 at 20.51.23

4.確認作業

Screenshot 2014-09-21 at 20.53.10

ロードバランサのIPにアクセスすると画面が表示された
http://wp-elb-2019996715.ap-northeast-1.elb.amazonaws.com/

Security Group

ファイヤーウォールにはステートフルとステートレスがある
ステートフルはパケットの前後の流れを確認して通過するか決める(例えば、いきなり通信を始めると拒否する)
ステートレスはパケットだけを確認する
Security Groupはセミステートフルで動作する。通常のTCP通信はステートフルに処理する

参考

Amazon Web Services 基礎からのネットワーク&サーバー構築 日経BP社

リージョンとアベイラビリティーゾーン
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html

ELBの動作
http://docs.aws.amazon.com/ja_jp/ElasticLoadBalancing/latest/DeveloperGuide/US_DeReg_Reg_Instances.html

メニューを閉じる