EC2インスタンスの生成
AWSアカウントのリージョン設定
リージョンとは、AWSの物理的なサーバの場所を指定するもの。リージョンは世界各地に10箇所以上存在し、そのうちの一つは東京にある。
リージョン間でEC2の設定は独立していて、あるリージョンのEC2を他のリージョンへ移動することはできない。
なので、EC2を立ち上げる際には、「どのリージョンの設定か」を意識するようにする。
以下の指示に従って、リージョンを選択する
まずはAWSアカウントにログイン。以下の画像の手順に従い、リージョンを東京に設定する。
ページを更新した際に、「東京」と表示されていれば、正しく設定出来ている。
あるリージョンで作成したEC2や他の設定は、他のリージョンでは表示されないので、注意する。
EC2インスタンスを作成
「サーバーを生成する」といっても、AWSが全てのサーバを物理的に用意しているわけではなく、実際には「仮想マシン」と呼ばれるソフトウェアを利用して、仮想的に一つのLinuxサーバを利用できる仕組みを利用する。この「仮想マシン」のことをAWSでは「EC2インスタンス」と呼んでいる。
EC2インスタンス作成の作業が2回目以降の方は、費用が発生する場合がある。
以下の指示に従って、EC2インスタンスを作成
まずは、AWSアカウントにログインします。トップページに遷移したら、左上の「サービス」から「EC2」を選択。
操作画面を旧バージョンに切り替えるため、左上のスイッチのアイコンをクリック。
アンケート用のダイアログが開くのでキャンセルする。
以下の画像のように「インスタンスの作成」をクリック。
AMIの選択
AMIとは、「Amazon Machine Image」の略語で、サーバのデータをまるごと保存したデータのこと。この中には、OSやWEBサーバなどが事前にインストールされているものもあり、自分でゼロからインストールする手間を削減することができる。
今回は「 Amazon Linux AMI 」という、AWSが独自にカスタマイズしたAMIを利用する。
「 Amazon Linux2 AMI 」ではなく、「 Amazon Linux AMI 」を選択する。
EC2インスタンスのタイプ選択
EC2インスタンスのタイプを選択。EC2ではさまざまなインスタンスタイプが用意されており、CPUやメモリなどのスペックを柔軟に指定することができる。
今回は、無料枠で利用できる「t2.micro」を選択する。
起動をクリック。
キーペアのダウンロード
内容を確認する際に、「キーペア」をダウンロードすることが出来る。こちらはインスタンスにSSHでログインする際に必要となる「秘密鍵」。これがないとEC2インスタンスにログインできないので、必ずダウンロードしてパソコンに保存しておく。また、間違って他人に渡さないよう気をつける。
キーペアの名前はご自身で決めて構わない。
キーペアの名前にスペースが含まれているとこの後の作業でエラーが発生する可能性がある。 スペースを含まない名前の秘密鍵を作成する!
インスタンスの作成
キーペアのダウンロードが完了すると、クリック出来ない状態になっていた「インスタンスの作成」が、クリックできるように変更される。そちらをクリックして、EC2インスタンスを作成する。
その後、インスタンス一覧画面に戻り、作成した「インスタンスID」をコピーしてメモしておく。
Elastic IPの作成と紐付けをする
作成したEC2インスタンスには、作成時にIPアドレスが自動で割り振られている。これをパブリックIPと言う。しかし、サーバーを再起動させるたびにこのパブリックIPが変わってしまうという欠点を持っている。IPが変わってしまうということは、設定ファイル等をその都度書き換えなければならない。これを解決してくれるのが、Elastic IPである。
Elastic IP
Elastic IPとは、AWSから割り振られた固定のパブリックIPアドレスのことを言う。このパブリックIPアドレスをEC2インスタンスに紐付けることで、インスタンスの起動、停止に関わらず常に同じIPアドレスで通信をすることが可能になる。
以下の指示に従って、Elastic IPの作成と紐付けをする
まずはElastic IPを取得するために、以下の画像の手順に従って作業する。
「使用範囲を選択して新しいelastic ip アドレスを割り当てる」と表示され、「AWSプール」か「ユーザー保有」の選択をする必要がある場合は、「AWSプール」を選択。
次に、取得したElastic IPアドレスを、作成したEC2インスタンスと紐付ける。
上の画像のようにインスタンスを選択すると、その下にあるプライベートIPアドレスが自動で選択される。
再びインスタンス一覧画面に戻り、作成したインスタンスの「パブリック IP」と「Elastic IP」が同じものに設定されていることを確認。
以降、このIPアドレスはあなたの所有物のようになり、意図的にAWSに返却しない限り、変更されることはない。
ポートを開く
立ち上げたばかりのEC2インスタンスはSSHでアクセスすることはできるが、HTTPなどの他の接続は一切つながらないようになっている。そのため、WEBサーバとして利用するEC2インスタンスは事前にHTTPがつながるように「ポート」を開放する必要がある。
セキュリティグループとは
ポートの設定をするためには、「セキュリティグループ」という設定を変更する必要がある。
セキュリティグループとは、EC2インスタンスが属するまとまりのようなもので、複数のEC2インスタンスのネットワーク設定を一括で行うためのもの。
セキュリティグループのポートを設定
下図の手順に従って、セキュリティグループのポートを設定する。
まず、EC2インスタンス一覧画面から、対象のインスタンスを選択し、「セキュリティグループ」のリンク(図中では「launch-wizard-1」)をクリック。
すると、インスタンスの属するセキュリティグループの設定画面に移動するので、「インバウンド」タブの中の「編集」をクリック。
モーダルが開くので、「ルールの追加」をクリック。
タイプを「HTTP」、プロトコルを「TCP」、ポート範囲を「80」、送信元を「カスタム / 0.0.0.0/0, ::/0」に設定する。「0.0.0.0」や「::/0」は「全てのアクセスを許可する」という意味。
必ず「ルールの追加」を行い、元の「ssh」の設定がなくならないよう注意
以上で、ポートの開放が完了。
この作業が終わっていないと、WEBサーバを起動した時にアクセスできなくなるので注意。
EC2インスタンスへのログイン
EC2インスタンスを作成すると、ec2-userというユーザーと対応するSSH秘密鍵が生成された。本来はこのec2-userではなく、サービスを稼働させるためにより権限を小さくしたユーザーを作成して運用していくが、ここでは簡易化のためにこのec2-userを使って作業を進めていく。
ec2-userでログイン
1. 以下の「ダウンロードした鍵の名前」の部分は、直前に自身がダウンロードした.pem
というファイルの名前に置き換える。
2. pemキーが本当にDownloads以下に存在するかFinderで確認。
※存在しなければ他のディレクトリを確認する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ cd ~
$ mkdir ~/.ssh
# .sshというディレクトリを作成
# File existsとエラーが表示されたとしても、.sshディレクトリは存在しているのということなので、そのまま進みましょう。
$ mv Downloads/ダウンロードした鍵の名前.pem .ssh/
# mvコマンドで、ダウンロードしたpemファイルを、ダウンロードディレクトリから、.sshディレクトリに移動します。
$ cd .ssh/
$ ls
# pemファイルが存在するか確認しましょう
$ chmod 600 ダウンロードした鍵の名前.pem
$ ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスと紐付けたElastic IP
#(例えばElastic IPが123.456.789であれば、shh -i ダウンロードした鍵の名前.pem ec2-user@123.456.789 というコマンドになります)
#(ダウンロードした鍵を用いて、ec2-userとしてログイン)
|
Elastic IP は、以下の画像を参考に、各自のAWSアカウントから確認する。
以下の様なメッセージが表示されることがあるが、「yes」と入力。
1 2 3 4 |
ターミナルのコマンド待ちの際の左側の表示が、以下の画像のように
[ec2-user| ...
となればログイン成功!
ssh接続は一定時間操作をせずにいると、タイムアウトしてしまう。その場合は、同じコマンドを実行することで、サーバに接続できる。
まとめ
- AWSのリージョンは世界中にあり、その中から一つ選んでサーバ構築をする
- EC2インスタンスとは、クラウド上に存在する仮想サーバーである
- Elastic IPとは、EC2インスタンスに設定できる固定のパブリックIPアドレスである
- EC2インスタンス作成時に ec2-user というユーザーと秘密鍵が自動で生成される
- 生成された秘密鍵でec2-userのSSHログインができる
AWSには非常に多くの仕組みがあり、サーバに関して必要な問題をほとんど解決してくれる。しかし、EC2インスタンスを作ってサービスを公開することにフォーカスすれば覚えることはとても少なく、他のクラウドサービスを使っても流用できる知識となる。