2021.11.18

AWS

AWS VPCを学ぶ #2

今回は、AWSのElastic IP アドレスを使用したパブリックIPアドレスの固定化とNATゲートウェイの作成を行っていきます。

https://gmo-miyazaki-creators.com/aws/aws-vpc%e3%82%92%e5%ad%a6%e3%...


今回の内容はこちらの記事の続きとなります。

こちら前回の内容で作成したネットワークの構成図です。
今回はここにプライベートサブネットを1つ追加して、NATゲートウェイを経由してインターネットに接続させます。また現状だとtest-subnet-0内のEC2インスタンスがシャットダウンされた際にパブリックIPアドレスが変更されてしまいますのでElastic IP アドレスを使用して固定化していこうと思います。

Elastic IP アドレスを追加する

まずは、Elastic IP アドレスを作成するためにVPCのダッシュボードの左側の一覧からElastic IPを選択してElastic IP アドレスを割り当てるをクリックします。

ネットワークボーダーグループ
こちらはap-northeast-1になっていればそのままで大丈夫です。

タグ
タグは任意のもので大丈夫です。今回は、
Name : test-elastic-ipという名前で作っています。

タグの追加が完了したら割り当てをクリックします。

Elastic IP アドレスの一覧画面にtest-elastic-ipという名前で追加されているのが確認できると思います。

Elastic IP アドレスをEC2インスタンスにアタッチ

続いて アクション -> Elastic IPアドレスの関連付け をクリックします。

インスタンスのところにIPアドレスを固定化したいEC2インスタンスを選択します。今回の場合はtest-ec2になります。

インスタンスの一覧画面のパブリックIPアドレスが関連付けたElasticIPアドレスになっているかと思います。
これでパブリックIPアドレスの固定化ができました。

EC2インスタンスを再起動する

macの方はターミナル、windowsの方はTera Term等のLinuxコマンドが使えるコマンドラインインターフェースを立ち上げてください。
キーペアのあるディレクトリでSSH接続してみてください。


ssh -i tes-key-1.pem ec2-user@54.95.79.217
#結果

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

#https://aws.amazon.com/amazon-linux-2/

再起動する


# root権限に変更
sudo su -

#再起動
reboot

再度SSH接続してみてください。
ちゃんとSSH接続できるのが確認できると思います。

サブネットの作成

次は、NATゲートウェイを経由してプライベートサブネットをインターネット接続できるようにします。

前回の記事を参考にこちらのような内容でサブネットを作成してください。
今回、名前はtest-subnet-1、IPv4 CIDRブロックは10.0.1.0/24にしてあります。

これでtest-subnet-1が作成されたと思います。

EC2インスタンスの作成

先程作成したtest-subnet-1にEC2インスタンスを作成したいと思います。
こちらも前回の記事と同様に作成してください。

インスタンスの詳細設定のみ前回と変更点があるので気をつけてください。

サブネットはtest-subnet-1を選択、
自動割り当てパブリックIPは無効化を選択してください。

今回作成するEC2インスタンスは外部からの接続ではなくtest-subnet-0内のEC2インスタンスを踏み台としてSSH接続するのでパブリックIPアドレスは不要になります。

インスタンスの作成ができたらこちらの図のような構成になっていると思います。

NATゲートウェイの作成

VPCのダッシュボードの左側の一覧からNATゲートウェイを選択してNATゲートウェイを作成をクリックします。

名前 – オプション
任意の名前を付けてください。ここでは、test-nat-gatewayという名前で作成しています。

サブネット
サブネットはtest-subnet-0を選択します。

Elastic IPの割り当て
Elastic IPの割り当てを行ってください。EC2インスタンスを固定IP化したときと同様にElastic IPが必要になります。

ここまで完了したらNATゲートウェイを作成をクリックしてください。

ルートテーブルの作成

先程作成したNATゲートウェイをtest-subnet-1のサブネットに接続させるために新しくルートテーブルを作成してtest-subnet-1に紐付けます。

test-subnet-1に現状紐付いてるルートテーブルはtest-subnet-0と同じものなので編集ではなく新しく作成します。

ルートテーブルの編集画面からルートテーブルを作成をクリックします。

名前 – オプション
名前 – オプションは任意のもので大丈夫です。ここではtest-route-tableにしています。

VPC
VPCはtest-vpcです。

ここまでできたらルートテーブルを作成をクリックします。

サブネットにルートテーブルを紐付ける

先程作成したルートテーブルをサブネットに紐付けます。

アクション -> ルートテーブルの関連付けを編集を選択してください。

ルートテーブルID
先ほど作成したtest-route-tableを選択してください。

選択したら保存してください。

ルートの編集を選択してください。

ルートの追加
送信先 : 0.0.0.0/0
ターゲット : NATゲートウェイ(test-nat-gateway)
こちらの内容を追加してください。

以上でNATゲートウェイを経由してインターネットに接続できるようになりました。

図で表すとこうのような感じです。

では、test-subnet-0にSSH接続して、さらにそこからtest-subnet-1にSSH接続してインターネット通信ができているか確認していきます。

SSH接続して確認

接続する前にtest-subnet-0からtest-subnet-1へSSHするためのキーペアをtest-subnet-0へ送信します。
macの方はターミナル、windowsの方はTera Term等のLinuxコマンドが使えるコマンドラインインターフェースを立ち上げてください。


#scpコマンドでtest-subnet-0の/tmp/ディレクトリ内にtes-key-1.pemを送信する。
scp -i tes-key-1.pem tes-key-1.pem ec2-user@54.95.79.217:/tmp/

#ログインして確認
ssh -i tes-key-1.pem ec2-user@54.95.79.217
# 結果
#       __|  __|_  )
#       _|  (     /   Amazon Linux 2 AMI
#      ___|\___|___|

# 確認
[ec2-user@ip-10-0-0-122 ~]$ ls /tmp/
# 結果
#systemd-private-ec62cc2709734d85a61f9cb8e27ca46e-chronyd.service-QD73v4  tes-key-1.pem

tes-key-1.pemが/tmp/内に存在すれば無事送信されています。


[ec2-user@ip-10-0-0-122 ~]$ ssh -i /tmp/tes-key-1.pem ec2-user@10.0.1.64

続いてtest-subnet-0からtest-subnet-1へSSH接続してい行きます。
10.0.1.64の部分はtest-subnet-1のプライベートIPアドレスを指定してください。


[ec2-user@ip-10-0-1-64 ~]$ ping youtube.com
#PING youtube.com (216.58.220.110) 56(84) bytes of data.
#64 bytes from nrt12s30-in-f14.1e100.net (216.58.220.110): icmp_seq=1 ttl=103 time=4.51 ms
#64 bytes from nrt12s30-in-f14.1e100.net (216.58.220.110): icmp_seq=2 ttl=103 time=3.91 ms
#64 bytes from nrt12s30-in-f14.1e100.net (216.58.220.110): icmp_seq=3 ttl=103 time=3.93 ms
#64 bytes from nrt12s30-in-f14.1e100.net (216.58.220.110): icmp_seq=4 ttl=103 time=3.94 ms
#64 bytes from nrt12s30-in-f14.1e100.net (216.58.220.110): icmp_seq=5 ttl=103 time=3.98 ms
#64 bytes from nrt12s30-in-f14.1e100.net (216.58.220.110): icmp_seq=6 ttl=103 time=3.94 ms

これでログインすることができたらping通信でインターネット通信ができるか確認します。
ping youtubeでこちらのように通信が帰ってきたら無事インターネット接続ができています。

AWSリソースの削除

EC2インスタンス等を起動したままにしていると料金が発生してしまうのでAWSリソースの削除を行っていきます。

まずEC2インスタンスを前回記事同様に終了させてください。

NATゲートウェイの削除

NATゲートウェイの一覧からtest-nat-gatewayを選択して アクション -> NATゲートウェイの削除 を選択して削除してください。

Elastic IP の解放

Elastic IPの一覧からtest-elastic-ipを選択して アクション -> Elastic IP アドレスの解放を選択して開放してください。
私はElastic IPを開放し忘れて500円ほど課金が発生してしまいました・・・

ここまで完了したらVPCを前回記事と同じように削除して今回使用したAWSリソースの削除が完了です。

削除するリソースは
・EC2インスタンス
・NATゲートウェイ
・VPC
・Elastic IPの解放
です。

最後に

いかがだったでしょうか?
覚えることがたくさんあって最初はなかなか覚えるのが大変です。

私の場合は何度も繰り返し作り直して体に染み込ませました。

以上でAWS-VPC編は終了になります。

この記事を書いた人

まだつぼみ

フロントエンドエンジニア

難しい案件やってるときが一番生きていると感じます