きなこもち.net

.NET Framework × UiPath,Orchestrator × Azure × AWS × SIer

AWS×初心者×初めてのEC2インスタンス作成

この記事の目的

この記事では、
EC2インスタンスを作成する取り組みのメモ
を目的としています。

EC2インスタンスを含め、VPCなどネットワーク周りの構成までをEC2サービスからちょいちょいと作成することができます*1。しかし、今回は、あえてすべて自分で作成していく方法での構築を目指しています。

本題

★全体構成図

こんなものを作ろうとしています。
f:id:kinakomotitti:20190528211315p:plain

今回は、以下の点について実験をしていこうと思います。

  • ①EC2にインターネット経由でSSHすることができること。
  • ②オートスケールグループを設定することでEC2がオートスケールしていること。
  • ③パブリックIPを持っていても、プライベートサブネットにあるEC2にはインターネット越しにSSHできないこと。


VPC作成

まずは、VPCの作成から始めます。
f:id:kinakomotitti:20190528212057p:plain

VPCの中で利用することができるプライベートIPアドレスを定義するネットワークアドレスは、10.0.0.0/24としました。ここら辺は、実験後はすぐ消す環境なので、わりとどうでもいいです。本番ではそうはいかないでしょうが…
ちなみに、もし、あらかじめ想定していたプライベートIPが枯渇しそうな場合、VPCのCIDRの編集により、サブCIDRを設定することができるようです。
f:id:kinakomotitti:20190528212229p:plain


★サブネットの作成

VPCを定義しただけでは、EC2のインスタンスを配置することはできません。EC2はサブネットに配置することになるため、1つ以上のサブネットが必要になります*2。ので、サブネットの作成を行います。ここでは上図に従い、インターネットから接続できない【プライベートサブネット】1つと、【パブリックサブネット】2つを作成します。

ちなみに、明示的にパブリックサブネット作成ボタンがあるわけではなく、サブネットとして作成した後、インターネットゲートウェイにルーティングさせるかさせないかで、呼び方がプライベートと、パブリックに分かれるようです。ここではいったんサブネットを作成するだけにとどめて、パブリック化するのは別のステップで実施します。


現在、利用可能なIPアドレスのネットワークアドレスは、10.0.0.0/24です。いくつかのサブネットを作成し、遊んでみたい気持ちがあるので、今回は、1つのサブネット毎に11個のIPアドレスが利用できるように設計します。※キャプチャ忘れてたので、三つ目のサブネット作成時のものになっていますが気にしないですw。
f:id:kinakomotitti:20190528212745p:plain

ここで、アベイラビリティゾーンを設定することができます。よく目にする言葉なので、リージョン、アベイラビリティゾーンについて簡単におさらいしておきます。

リージョンはそれぞれ、地理的に離れた領域です。
引用:https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html

各リージョンには、複数の独立したロケーションがあり、このロケーションをアベイラビリティーゾーンといいます。
引用:https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html

※ちなみに、アベイラビリティゾーンは、1個以上のデータセンターから構成されているようです。今回利用しているリージョンは、バージニア北部(us-east-1)です。以下の図から、このバージニア北部では、a~fまでの6つのアベイラビリティゾーンで構成されていることがわかります。これらのアベイラビリティゾーンに対しサブネットを配置していきます。
f:id:kinakomotitti:20190528212922p:plain


サブネットは、1つのアベイラビリティゾーンに対し、複数設定することができますが、1つのサブネットを複数のアベイラビリティゾーンにまたがって配置することはできないようです。
f:id:kinakomotitti:20190528213133p:plain



★EC2の作成

AWS内に、自分専用のローカルネットワークを作成したので、EC2インスタンスを作成していきます。今回、EC2自体は何でもよいですが、オートスケールするところなどを確認したいので、オートスケールの設定も併せて実施していきます。

基本的にお金がかからないようにしたいので、モニタリングなどのオプションはなし(デフォルト)のままで作成します。ネットワーク(VPC)、サブネット、パブリックIPの割り当てが無効になっていることを確認し、インスタンスを作成します。
f:id:kinakomotitti:20190528213249p:plain

ここまでで、先ほど作成したプライベートネットワーク内に、仮想マシン(EC2)のインスタンスを作成することができました。しかし、オートスケールの設定はまだされていません。オートスケールの設定をするためには、Auto Scalingグループの作成が必要となります。作成したEC2インスタンスを選択して、アクションの中から、「AutoScalingグループにアタッチする」を選択するか、AutoScalingグループサブメニューから操作することで作成することができそうです。今回は、前者のAutoScalingグループにアタッチするを選択し、その中で、新規グループを作成する方法で進めました。

AutoScalingグループを作成する際には、どのサブネットをグループに含めるかが問われます。ここで、複数のアベイラビリティゾーンを設定できるようにサブネットを選択することで、複数アベイラビリティゾーンにまたがったEC2のオートスケールを実現することができます。まだまだいろいろ考慮することはありそうですが、一旦、EC2を作成して、オートスケールすることができるところまでもっていくことができました。
f:id:kinakomotitti:20190528213430p:plain

しかし、このままでは、ブラウザ越しでしかインスタンスにアクセスすることができません。オートスケール云々の前に、SSHでリモートログインできるところまでもっていく必要があります。


★インターネットゲートウェイの作成

ここまで作ってきたEC2にインターネット越しにリモート接続するためには、サブネットをパブリックサブネットとして定義する必要があります。パブリックサブネットは、VPCのサブネットの中で、インターネットゲートウェイへのルーティング設定を持っているものを指すそうです。まだ、今のVPCにはインターネットゲートウェイや、そこにルーティングする設定を定義する【ルートテーブル】がないため、それらを作成し、サブネットに割り当てていきます。

まず、インターネットゲートウェイを作成します。
f:id:kinakomotitti:20190528213543p:plain

f:id:kinakomotitti:20190528213623p:plain
作成した時点では、どこのVPCにもアタッチされていません。そのため、任意のVPCにアタッチしてインターネットゲートウェイを使えるようにする必要があります。ここでは、これまでに作成したVPCにアタッチします。
f:id:kinakomotitti:20190528213640p:plain


次に、ルーティングを設定します。
以下のように、ターゲットがインターネットゲートウェイになるようなルート設定をすることで、インターネットとのルーティングが可能なルーティング設定ができます。

送信先 ターゲット
0.0.0.0/0 igw-09・・・

最後に、ここで設定したルーティング設定をEC2が配置されているすべてのサブネット(公開したいサブネット)に紐づけます。紐づけられたサブネットはパブリックサブネットとして利用することができます。



★EC2へリモートログイン

準備ができたので、作成したEC2にSSHでリモートログインします。接続方法は、AWSのコンソールで案内してくれるので、それに従いコマンドを実行します。

※WSL(Windows Subsystem for Linux)でリモートログインしようとしたとき、プライベートキーファイル(*.pem)の権限が変更できずに、認証がうまくいかない現象が発生しました。これは、作業していたフォルダが/mnt/c/Users/Kinakomotitti/Download配下のディレクトリであったためでした。キーファイルをWSLのhomeフォルダに移動させてから権限を変更することで、無事に実行することができました。
参考)
qiita.com


リモートログイン後のターミナルの様子↓
f:id:kinakomotitti:20190528213723p:plain
無事ログインができました。

また、キャプチャはないですが、パブリックIPアドレスを持っていても、インターネットゲートウェイへのルーティングが設定されていないプライベートサブネットのEC2へのSSHはできないことも確認できました。


★オートスケールグループのEC2を手動で1つ削除してみた結果

こちらもキャプチャーはないですが、3つあるEC2インスタンスのうち、1つを手動で削除(終了)させた結果、いつの間にか新しいEC2インスタンスが1つ立ち上がってきたことを確認しました。オートスケールグループも正常に設定できているようです!



まとめ

今回のハイライトは以下の通りでした。
1)VPCを作成し、中にいくつかのサブネットを作成しました。
2)サブネットの中に、単体のEC2インスタンスを作成しました。
3)オートスケールさせるため、いくつかのサブネットを関連付けたオートスケールグループを作成しました。
4)インターネット越しのSSHをするためにインターネトゲートウェイを作成し、ゲートウェイまでのルーティング設定を追加したルーティングテーブルを、EC2インスタンスを作成したサブネットに関連付けました。

デフォルトのVPCを使えばこういうことはしなくて済むのはわかっていても、一つ一つやってみるとそれはそれで面白かったです!


*1:デフォルトで作成されている場合もありますが、自分の環境では、デフォルトVPCを含め消せるものはすべて消してからやっていました。若気の至り・・・

*2:サブネットがない状態のVPCにEC2を配置しようとすると、以下のメッセージが表示され、そもそも配置可能なVPCとして選択することができません。f:id:kinakomotitti:20190528212631p:plain