最近仕事で使うことになったので、AWS(Amazon Web Services)を急遽勉強している。さすがにネットに直に関係する分野なだけあり、入門的な記事は散らばっているが、AWSの変化が早いことや、立ち位置によって入門の意味が大きく違うために、どうにもイマイチ掴めない。
で、結局入門書を一冊購入し、そのとおりにやったつもりなのにやっぱりエラーが出て、原因を調べ調べ再構築繰り返してようやく朧気ながらわかってきような気がしないでもないいつもの感じである。
ひとまず、この記事ではVPCを作成してEC2を一つおき、Webサーバーとして起動するまでの最初の一歩について書く。
用語
まず基本的な用語等あれこれ。用語を通して、AWSの基本的なネットワークの概念を知る。
EC2インスタンス
Amazon Elastic Compute Cloud、略してEC2。AWSにおける仮想サーバー。
AMI
Amazon Machine Image。サーバー上の情報を1ファイルにおさめたもの。EC2インスタンスはAMIを一つ選んで起動する。用途にあわせて設定されたOSを最初から使える。構築の手間が省ける。
EBS
Amazon Elastic Block Store。EC2インスタンスで使うストレージシステム。SSDとかHDとか用途に合わせて選べる。
リージョン, region
サーバーの拠点。レイテンシのことを考えると、日本で使うなら基本的に東京でOK。ただし、サービスによっては展開されていないこともある。たとえばトランザクション・メールなどのメールサービスAmazon SESは東京リージョンでは使えないので、オハイオ州を選択したりする。サービス内容だけではなく、価格もリージョンによって異なる。
アベイラビリティゾーン, Availability Zone
各リージョン内にあるデータセンター群。ap-northeast-1aとap-northeast-1c(いずれも東京リージョン)など、末尾の文字が異なる。耐障害性を考えれば、異なるアベイラビリティゾーンに配置することが望ましい。各アベイラビリティゾーン間は専用線で結ばれており、インターネットに出るわけではにないので、速度・価格面においても基本的に問題ない…が、大規模科学計算など特殊な用途においては、同一アベイラビリティゾーンのほうが良いということもあるようだ。まぁ、普通に使う分には分散させるのがよさげ。
VPC
Virtual Private Cloud。AWSにおける仮想ネットワーク環境。イメージ的には、自分が使える島みたいな感じ。10.0.0.0/16など、大きくネットワークアドレスを確保して、それを10.0.0.0/20などサブネットに分割したうえで、サブネット内にEC2インスタンスを置く。
リージョン -> VPC -> サブネット -> EC2
ようなイメージ。サブネットはどこか一つのアベイラビリティゾーンに属するが、VPCはアベイラビリティゾーンをまたぐ。また、VPCとインターネットの接続点にインターネットゲートウェイがある。
同一リージョン内のVPC同士を接続することを、VPCピアリングと呼ぶ。異なるリージョンでVPC同士を繋ぐには、VPNを使う必要がある。
Elastic IP
AWSで利用できる固定のIPアドレス。
セキュリティグループ
仮想ファイアウォール。このIPアドレスのこのポートなら通す、といった具合にルールを定めたもの。各EC2に適用する。一方、サブネットに対して指定するルールをネットワークACL(Access Control)と言う。
参考「【AWS】セキュリティグループを設定してみた(そして関連する用語を調べてみた) - Qiita」
デフォルトのVPCを使ってWebサーバーを作成
用語についてざっと押さえたところで、早速Webサーバーを作成する。最初にざっと手順を。AWSは頻繁にUIが変わるようだが、何をするかがわかっていれば、どうなっても対応できるはず。
-
- EC2を作成する
- AMIの選択
- インスタンスタイプの選択
- インスタンスの詳細、ストレージの追加はそのまま
- セキュリティグループの設定
- キーペアの作成とダウンロード
- サーバーにアクセスし、Webサーバーを起動
- EC2を作成する
EC2を作成
サービス -> コンピューティング EC2 -> サイドバー インスタンス -> インスタンスの作成
次にAMIを選択する。一番最初に表示されているやつでよい。Amazon Linux AMI 2017.09.1 (HVM), SSD Volume Typeとかそんな感じ。
次にインスタンスタイプの選択。これはCPUとかメモリとか要はサーバースペックのプラン。とりあえずt2.micro(無料利用枠の対象だから)。で、「確認と作成」ではなくて、「次の手順:インスタンスの詳細の設定」にうつる。そのほうがわかりやすいから。
インスタンスの詳細の設定はそのままでよい。次のストレージの追加もそのまま。タグの追加は……そのままでもよいけれど、まぁキーにName、値にtestEC2とか名前くらいつけてあげるとわかりやすい。
次にセキュリティグループの設定。新しいセキュリティグループを作成するのだが、そのままだとSSHしか通さないので、HTTPとHTTPSあたり追加しておく。

セキュリティグループの設定
ここで、ソースに0.0.0.0/0を指定すると、すべてのIPアドレスからのアクセスを通す。それが嫌なら、ソースのプルダウンから「マイIP」を選択すると、今現在のグローバルIPアドレスが自動で設定される。
これでようやく「確認と作成」。作成すると、サーバーにアクセスする秘密鍵を作成(既存のものを使っても良い)して、ダウンロードできる。忘れずにダウンロードすること。
インスタンスの作成には数分かかるので、待つ。
サーバーにアクセスしてWebサーバー起動
作成したインスタンスの状態がrunningかつステータスチェックが完了したら、いよいよサーバーにアクセスする。
インスタンスを選択した状態で、右クリックして「接続」をクリックすると、アクセスの仕方が表示される。

右クリックする
例:のところにコマンドがあるので、それをコピペして、ターミナルから実行。具体的には以下のようなコマンドである。
chmod 400 秘密鍵.pem
ssh -i 秘密鍵.pem ec2-user@パプリックDNS
意味は、秘密鍵のパーミッションをread-onlyにする。で、sshコマンドでサーバーにアクセス。-iオプションは秘密鍵の指定。パブリックDNSの部分は、インスタンスを選択した時に下部に表示される「説明」タブにもあるので、確認しておくとよい。
そうしたらサーバーに入れるので、Webサーバーを起動する。まずindex.htmlを作成し、中にhelloとかなんとか記述。その後
sudo python -m SimpleHTTPServer 80
これでWebサーバーが起動。ブラウザから http://パブリックDNS/ に飛ぶと、index.htmlの中身が表示される。
以上。
自分でVPCやらサブネットやらを作成して、固定IPアドレスを付与するところまで書こうと思ったが、長くなったのでまた今度。
コメント