概要
AWS体験ハンズオン 〜セキュア&スケーラブルウェブサービス構築〜 に参加した
その際に学んだことや、調べたことを記載する。あくまでメモなのでざっくりと記載。また破棄するためパスワードやIPアドレスは惜しみもなく公開する
内容とは関係ないが、嬉しかったことはAWSマネジメントコンソールが2014年中くらいには日本語化されるとのこと
RegionとAvailabilityZone(AZ)
リージョン(Region):アジアパシフィック(東京)や米国東部(バージニア北部)など、地理的に離れたデータセンター群のこと
アベイラビリティゾーン(AvailabilityZone):リージョンに複数のそれぞれ独立したロケーションがあり、そのロケーションのこと。これらは距離が離れており独立した電源網やネットワークを利用している
異なったアベイラビリティゾーンは高速専用線でつながっているが、やはり同じアベイラビリティゾーンと比較すると転送速度は落ちる
Amazon VPC(Virtual Private Cloud)とは
・仮想ネットワークのことで、クラウド内にプライベートネットワークを構築可能
・VPNや、キャリア閉域網からVPCに接続可能
・AmazonはEC2などを作成した時に、デフォルトでVPCを作成する仕様となっている
・VPCを作成することは、実世界ではルーターやハブを用意して環境を構築する作業と同じ
・VPCで作成した仮想ネットワーク内にいくつかのサブネットを切り出してそこにEC2構築することが通常の利用方法
・一度設定したVPCのサイズやサブネットは変更できないため注意
サブネットを切り出すメリット
・サブネットのAZを変更でき、あるサブネットに障害が発生したときに、他方に影響が及びにくい
・サブネットそれぞれにNACL(Network Access Control List – サブネットごとにセキュリティグループを設定できる、デフォルトはフルオープン)を設定できる
これ利用して、外部からアクセスさせないサブネットを作成し、そこにDB構築するといったことができる
・それぞれのサブネットに別のルーティングテーブルを設定することが可能
コスト
・VPC利用料は無料。VPNconnectionを利用すると費用が発生する
Phase1-EC2のみでサイトを構築-
1.VPCの作成
[VPC with a Single Public Subnet]を選択
[Hardware tenancy]を[Dedicated]とすると物理サーバを専有(他ユーザーの仮想マシンがのらない)するため別途費用がかかる
[Enable DNS hostnames]にチェックするとAmazonVPCが提供するDNSサーバが利用される
独自のDNSサーバを利用したいときはチェックを外す
VPCの確認画面
[Internet Gateway]のIDはランダムに⽣成される
2.EC2の作成
[AWS Market]よりwordpressが設定してあるAMI(Amazon Machine Image)を選択
[Auto-assign Public IP]はあとでパブリックIPを設定するためデフォルトのままにしておく
PrivateIPはStop/Startしても変わらない
公開鍵はEC2起動時に自動的に埋め込まれる
インスタンスを破棄するときは、[Terminate]する。デフォルトでEBS(Elastic Block Store)も削除される
3.Elastic IPの割当て
[Reassociation]にチェックすると仮想IPを利用しやすくなる
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
Phase2-EC2+RDSでサイトを構築
AmazonRDS(Relational Database Service)とは
・MySQLのセキュリティパッチ、バックアップ(35日間バックアップを取得でき、5分前まで戻ることが可能)の自動適用が可能
・AmazonRDSプロビジョンドIOPSストレージ(ディスク性能を確保)を使用している場合は、ストレージを最大3TB まで、IOPSを最大 30,000 までプロビジョニング可能
・データベースの容量増加やスペック増加が容易にできる(容量については無停止で実施可能)
・MultiAZを利用すると、スレーブがsyncしないと更新さず、マスタ障害時に自動でフェールオーバする
1.AmazonRDSの設定
DBサブネットグループを作成し、RDSに適用する
DBサブネットグループを作成する
先ほど作成した2つのサブネットを利用して、DB Subnet Groupを作成する
DBインスタンスの作成
小さく始めたいのならば、[No, this instance is intended for use outside of production or under the RDS Free Usage Tier
]で対応する
Maintenance Window
メンテンナンス設定時間に予め予約しておくと、自動スケールアップができる
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.確認作業
Phase3-ELB+EC2*2+RDSでサイトを構築
1.AMIの作成と、サーバ作成
AMIとは
・Amazon Machine Image、Amazon EC2で用いられるOSのディスクイメージ
・AMIを利用して全く同じ設定のサーバを何個でも起動できるようになる
・AMI の作成プロセスは、インスタンスのルートストレージデバイス(Amazon EBS ボリュームかインスタンスストアボリューム)により決まる
AMIの作成と、AMIからサーバ作成
[no reboot]にチェックすると、AMI作成時にEC2をシャットダウンしない
整合性が取れなくなる可能性があるため、できればチェックをせずにシャットダウンしたほうがよい
[Route Table]に[Internet Gateway]を含むようにする
2.ELB(Elastic Load Balancing)の作成
・ELBは複数のEC2間で、アプリケーショントラフィックの負荷を自動的に分散できる
・Amazon Route 53 のヘルスチェックとDNSフェイルオーバーの特徴を使用して、ELBで稼働するアプリケーションのアベイラビリティを向上させることができる
・障害発生時に片方のEC2だけで動作できる環境にしておく必要がある
[Create an internal load balancer]にチェックすると内部ロードバランサとして動作する
メンバに登録後、[Healthy Threshold]回成功したら正常な状態と判断し、メンバとしてトラフィックを流す
[Health Check Interval]間に[Unhealthy Threshold]回エラーとなったらメンバから外す
外れたらどうやら自動復旧しないらしい(ここらへんは今度追う)
ELBの属するSubnetを選択する。APサーバのSubnetである 10.0.0.0/24 と 10.0.2.0/24 を選択
最後に[Create]で作成する
[Instance]から状態を確認すると[Inservice]となっていることがわかる
APサーバのSecurity GroupにELBのSecurity GroupをSourceとして利用し(ELBのSecurity Group IDを指定)、80番はELBからしかアクセスできないようにすることで、セキュリティを向上できる
※EC2を停止する場合は、ELBから削除すること
ELBと紐づけたEC2を停止して、一定時間後に開始した後、[Out of Service]のままになることがある
理由は、EC2が起動したことをロードバランサが認識するまで時間がかかるとのこと
そのため停止する場合は、一度ELBから削除して、起動後再登録したほうがよいらしい
3.RDSのMulti-AZ化
[Multi-AZ Deployment]を[Yes]に変更する
4.確認作業
ロードバランサの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