keisyuのブログ

最近めっきりエンジニアリングしなくなった厄年のおじさんがIT技術をリハビリするブログ。

AWSを使ってみる. ( EC2 編 )

AWS*1 を利用するとインターネットシステムを構成するさまざまな物理的リソースを手軽に入手することができます。昔はレンタルサーバを借りて...とかしているとそんなに贅沢なリソースは確保できなしロードバランサーとかネットワークストレージとかDNSとかは個人レベルで構築するのって大変でしたが、そんな悩みをAWSは全て解決してくれます。個人でも(月額利用料さえはらえば)大規模なウエブサービスのシステムを簡単に構築できるなんて便利な世の中ですね。

EC2

今回は初めてということでAWSの基本となるサービスである仮想サーバ EC2 *2 を使ってみようと思います。AWSのアカウントを作成して事前準備(Paymentの設定など)をしてAWS Management Console を開きます。こんな画面です。

f:id:keisyu:20140223100138j:plain:w300

EC2を選択します。AWSはWorld-Wideにデータセンタがあり仮想サーバを使用する際にどのリージョン(データセンターのロケーション)を利用するかを選択します。今回はTokyoを選びます。(AWSはリージョンおよびインスタンスタイプ(仮想サーバのスペック)によって時間単位の利用料金が異なりますので注意)
f:id:keisyu:20140223100704j:plain:w200

「Launch Instance」というボタンをクリックして仮想サーバを取得してみます。

  • Step 1: Choose an Amazon Machine Image (AMI)

という画面がまず出ます。あなたの欲しいサーバ(Machine Image)は何ですか(Linuxですか?Windowsですか?64/32bitOSどちら?とか聞かれます)。AWSが提供する初期構成のものがデフォルトの選択肢で表示されますが、それ以外にもすでに特定のパッケージ(ソフトウエア)インストール済みのイメージも選択できます(物によっては追加時間費用がかかります)。また、自分であらかじめ作成したイメージや他の人が作成して公開したイメージとかも選択できます。自分で作成したイメージを選択するとサーバ増強などの場合に同じ構成のインスタンスを速攻で作成できます。

今回はAWSが提供するAmazon Linux 64bit を選択します (Amazon Linux はほぼ CentOS と同等+AWS Toolsのようです)
f:id:keisyu:20140223102622j:plain:w300

  • Step 2: Choose an Instance Type

次に仮想サーバのマシンスペックについて選択します。とりあえずお試しの超低スペックなものから化け物級の超高性能のマシンまであります。当然時間単位の利用料金が異なりますのでそれを踏まえて選択します。選択の表でスペックが確認できますので用途に応じて(かつ値段に応じて)選択します。今回は最低スペックの t1.micro を選択します。
f:id:keisyu:20140223103422j:plain:w300

  • Step 3: Configure Instance Details

Step 2:の段階で起動をすることもできますが、Detailの設定をすることもできます。ここでは Network (あらかじめ構築してあるプライベートネットワーク(VPCに属するように立ち上げるか) や、AZ(Availability Zone: リージョン内でも複数の物理的に離れたデータセンターゾーンがある。同一リージョン内でも対障害性を高めるために分散したりする)を選択できたりします。今回は項目を確認するだけで全てデフォルトで次に行きます。

  • Step 4: Add Storage

ルートディスクサイズや拡張ストレージのボリュームを追加できます。これも今回は触らないで次に行きます。

  • Step 5: Tag Instance

仮想サーバに対してTagがKey/Valueが追加できます。AWSツールなどでこの仮想サーバを特定したり,サーバを用途ごとにグルーピングして管理しやすいような名称をつけれます。用途は各自。

  • Step 6: Configure Security Group

セキュリティポリシーを選択できます。このサーバに対して外部からの接続Port(SSH,HTTP,etc)の開放状況を指定します。
SSHがデフォルトでAnyになっているので MyIPを選択します(そうすると自動で自分が接続している外部IPを調べてセットしてくれます).
HTTP/80をAnyで追加してみます。
f:id:keisyu:20140223105329j:plain:w500

  • Step 7: Review Instance Launch

最後に構成の確認をして「Launch」をクリックすれば仮想サーバが起動します。が、最初の起動直前にKeyPair の選択をします。これはSSH等で接続するための公開鍵認証のセキュリティキーを指定してください。ということです、既存に作成済みのKeyPairを選択するか新しいKeyPairを作成します。新規作成した場合は秘密鍵(*.pemファイル)もここでダウンロードできますのでココで保存しときます(再ダウンロードできないので注意)。

LaunchするとManagement Console で戻ってきたら立ち上げたインスタンスが表示されます。Selectすると下部のパネルに情報が表示されます。こんな感じに。
f:id:keisyu:20140223140614j:plain:w300

注意すべきは立ち上がった状態はもちろんのこと Stopした状態でも課金は発生します。使い終わったら(不要になったら)Terminateの状態にしましょう。右グリックでActionパネル開いてTerminateを選択します。
f:id:keisyu:20140223140832j:plain
ただし、Terminateとは仮想サーバ上のデータも含めて全て消去(捨てる)して利用を終了するという意味なのでその辺も注意。

SSHでログイン

ログインするにはコンソールからSSH接続します

$ ssh -i xxxxxxx.pem ec2-user@ec2-54-238-115-217.ap-northeast-1.compute.amazonaws.com                                                                                                                               
The authenticity of host 'ec2-54-238-115-217.ap-northeast-1.compute.amazonaws.com (54.238.115.217)' can't be established.
RSA key fingerprint is 6d:07:4a:aa:30:e7:71:35:88:18:d4:42:41:7e:34:f8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ec2-54-238-115-217.ap-northeast-1.compute.amazonaws.com,54.238.115.217' (RSA) to the list of known hosts.

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

https://aws.amazon.com/amazon-linux-ami/2013.09-release-notes/
9 package(s) needed for security, out of 30 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-134-152-93 ~]$ 
  • 起動時に指定したSSH秘密鍵を指定(パーミッションを400にしておく)
  • 接続ユーザは ec2-user
  • 接続先はManagement Consoleで表示された Public DNS のホスト名

つながりました。 ec2-user ってなんか嫌だな。セキュリティ的にもこのまま使うのもイマイチなのでこれを変える場合は

# useradd keisyu
# password keisyu
# vi /etc/sudoers  # sudo 設定
# mkdir /home/keisyu/.ssh
# cp /home/ec2-user/.ssh/authorized_keys
# chown -R keisyu:keisyu /home/keisyu/.ssh

これで自分のアカウントでログインできますし ec2-userは userdel ec2-user で消せます。とりあえずログイン時に言われたとおり

$ sudo yum update

するとよいですね。

ec2へHTTPアクセス

せっかくなのでapacheでもインストールして公開設定したHTTP/80を外部から確認できるかやってみます。apacheをインストールします

$ sudo yum install httpd
$ sudo /sbin/service httpd start

これでapacheが立ち上がりました。

# cat /var/www/html/index.html 
<html><body>
Hello! AWS World! by keisyu
</body></html>

簡単にhtmlを作成してブラウザでアクセスしたら閲覧できました
f:id:keisyu:20140223144317j:plain:w300

インスタンスの停止

  • マネージメントコンソールで仮想サーバを選択してStop
  • shutdown -h now

前にも書きましたがこのまま放置は課金されます。必要なければ Terminate しましょう。再び起動するなら右クリックでStartです。
再スタートの場合 Public DNS, IPは前回の起動と異なる場合があります(というか大抵は異なる)。