この記事の目的
この記事では、
EC2インスタンスを作成する取り組みのメモ
を目的としています。
EC2インスタンスを含め、VPCなどネットワーク周りの構成までをEC2サービスからちょいちょいと作成することができます*1。しかし、今回は、あえてすべて自分で作成していく方法での構築を目指しています。
本題
★全体構成図
こんなものを作ろうとしています。
今回は、以下の点について実験をしていこうと思います。
- ①EC2にインターネット経由でSSHすることができること。
- ②オートスケールグループを設定することでEC2がオートスケールしていること。
- ③パブリックIPを持っていても、プライベートサブネットにあるEC2にはインターネット越しにSSHできないこと。
★VPC作成
まずは、VPCの作成から始めます。
VPCの中で利用することができるプライベートIPアドレスを定義するネットワークアドレスは、10.0.0.0/24としました。ここら辺は、実験後はすぐ消す環境なので、わりとどうでもいいです。本番ではそうはいかないでしょうが…
ちなみに、もし、あらかじめ想定していたプライベートIPが枯渇しそうな場合、VPCのCIDRの編集により、サブCIDRを設定することができるようです。
★サブネットの作成
VPCを定義しただけでは、EC2のインスタンスを配置することはできません。EC2はサブネットに配置することになるため、1つ以上のサブネットが必要になります*2。ので、サブネットの作成を行います。ここでは上図に従い、インターネットから接続できない【プライベートサブネット】1つと、【パブリックサブネット】2つを作成します。
ちなみに、明示的にパブリックサブネット作成ボタンがあるわけではなく、サブネットとして作成した後、インターネットゲートウェイにルーティングさせるかさせないかで、呼び方がプライベートと、パブリックに分かれるようです。ここではいったんサブネットを作成するだけにとどめて、パブリック化するのは別のステップで実施します。
現在、利用可能なIPアドレスのネットワークアドレスは、10.0.0.0/24です。いくつかのサブネットを作成し、遊んでみたい気持ちがあるので、今回は、1つのサブネット毎に11個のIPアドレスが利用できるように設計します。※キャプチャ忘れてたので、三つ目のサブネット作成時のものになっていますが気にしないですw。
ここで、アベイラビリティゾーンを設定することができます。よく目にする言葉なので、リージョン、アベイラビリティゾーンについて簡単におさらいしておきます。
リージョンはそれぞれ、地理的に離れた領域です。
引用: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つのアベイラビリティゾーンで構成されていることがわかります。これらのアベイラビリティゾーンに対しサブネットを配置していきます。
サブネットは、1つのアベイラビリティゾーンに対し、複数設定することができますが、1つのサブネットを複数のアベイラビリティゾーンにまたがって配置することはできないようです。
★EC2の作成
AWS内に、自分専用のローカルネットワークを作成したので、EC2インスタンスを作成していきます。今回、EC2自体は何でもよいですが、オートスケールするところなどを確認したいので、オートスケールの設定も併せて実施していきます。
基本的にお金がかからないようにしたいので、モニタリングなどのオプションはなし(デフォルト)のままで作成します。ネットワーク(VPC)、サブネット、パブリックIPの割り当てが無効になっていることを確認し、インスタンスを作成します。
ここまでで、先ほど作成したプライベートネットワーク内に、仮想マシン(EC2)のインスタンスを作成することができました。しかし、オートスケールの設定はまだされていません。オートスケールの設定をするためには、Auto Scalingグループの作成が必要となります。作成したEC2インスタンスを選択して、アクションの中から、「AutoScalingグループにアタッチする」を選択するか、AutoScalingグループサブメニューから操作することで作成することができそうです。今回は、前者のAutoScalingグループにアタッチするを選択し、その中で、新規グループを作成する方法で進めました。
AutoScalingグループを作成する際には、どのサブネットをグループに含めるかが問われます。ここで、複数のアベイラビリティゾーンを設定できるようにサブネットを選択することで、複数アベイラビリティゾーンにまたがったEC2のオートスケールを実現することができます。まだまだいろいろ考慮することはありそうですが、一旦、EC2を作成して、オートスケールすることができるところまでもっていくことができました。
しかし、このままでは、ブラウザ越しでしかインスタンスにアクセスすることができません。オートスケール云々の前に、SSHでリモートログインできるところまでもっていく必要があります。
★インターネットゲートウェイの作成
ここまで作ってきたEC2にインターネット越しにリモート接続するためには、サブネットをパブリックサブネットとして定義する必要があります。パブリックサブネットは、VPCのサブネットの中で、インターネットゲートウェイへのルーティング設定を持っているものを指すそうです。まだ、今のVPCにはインターネットゲートウェイや、そこにルーティングする設定を定義する【ルートテーブル】がないため、それらを作成し、サブネットに割り当てていきます。
まず、インターネットゲートウェイを作成します。
作成した時点では、どこのVPCにもアタッチされていません。そのため、任意のVPCにアタッチしてインターネットゲートウェイを使えるようにする必要があります。ここでは、これまでに作成したVPCにアタッチします。
次に、ルーティングを設定します。
以下のように、ターゲットがインターネットゲートウェイになるようなルート設定をすることで、インターネットとのルーティングが可能なルーティング設定ができます。
送信先 | ターゲット |
---|---|
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
リモートログイン後のターミナルの様子↓
無事ログインができました。
また、キャプチャはないですが、パブリックIPアドレスを持っていても、インターネットゲートウェイへのルーティングが設定されていないプライベートサブネットのEC2へのSSHはできないことも確認できました。