2021.11.17

AWS

AWS VPCを学ぶ #1

今回はAWS(アマゾン ウェブ サービス)でVPCを使用した仮想プライベートネットワークを構築していこうと思います。
VPCはAWSでEC2やRDS等のAWSリソースを利用する上で必須となる知識なので自分への備忘録を含めて解説していきます。

今回下の図のようなネットワークを構築します。
これを見ただけだとよくわからないと思うので1つ1つ解説していきながら進めていきます。

  • 今回の内容にサブネットマスクやCIDR ブロック等のネットワークに関する知識が必要になる部分がありますが説明は省かせて頂いています。
  • 今回作成するもので料金が多少発生する可能性があります。料金が発生する場合自己責任でお願いいたします。
    作成したリソースに関しては削除することを忘れないようにお願いします。

AWS無料枠に関するリンク

今回の記事の続きでNATゲートウェイやElastic IPを使用した解説もしてます。

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

VPCの作成

AWSマネジメントコンソールで「VPC」と検索してVPCの管理画面へ移動します。
VPCの画面へ移動すると僕の場合VPCIDが「vpc-e4d4df83」のVPCインスタンスが1つあるのですがデフォルトで設置されてるVPCになります。
基本的にはこれは使用せずに別でVPCを作成します。

VPCを作成のボタンをクリックしてVPCを作成していきます。

赤枠で囲んだ2つを記入します。

名前タグ
名前タグは作成するVPCの名前になります。今回は「test-vpc」という名前で作ってます。

IPv4 CIDR ブロック
IPv4 CIDR ブロックは確保するIPアドレスをCIDR ブロック表記で記述します。
今回の場合10.0.0.0/21にしてます。私の場合は基本的にVPCを作成するとき10.0.0.0/21で作成しています。

このあとにVPC内のネットワークを分割するためにサブネットを作成していくんですが、必要なサブネット + 予備のサブネット3つ分くらいを確保できるように作成しています。
下の図のようなイメージです。
IPアドレスの第3オクテッドを連番で記述してサブネットを複数作成していく感じになります。

※VPCのサブネットマスクの範囲は16〜28までという決まりがあります

作成できましたらtest-vpcという名前で新しく追加されていると思います。

サブネットを作成する

左側の一覧からサブネットを選択してサブネットの作成をクリックします。

VPC
VPCIDに先程作成したtest-vpcを選択します。

サブネット名
サブネット名は任意の名前で大丈夫です。ここではtest-subnet-0で作成します。

アベイラビリティーゾーン(AZ)
アベイラビリティーゾーンも任意のAZで大丈夫ですがここではアジアパシフィック (東京) / ap-northeast-1aを選択します。

IPv4 CIDR ブロック
CIDR ブロックはここでは10.0.0.0/24で作成します。理由についてはVPCのIPv4 CIDR ブロックを作成する際に説明したとおりです。

ここまで記載できましたらサブネットを作成をクリックします。
これでtest-subnet-0のサブネットができたかと思います。

ここまでを図で表すとこのような感じです。
test-vpcにtest-subnet-0のサブネットが出来上がった状態になります。

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

インターネットゲートウェイを作成して先程作成したサブネットにアタッチします。

左側の一覧からインターネットゲートウェイを選択してインターネットゲートウェイの作成をクリックします。

名前タグ
インターネットゲートウェイの名前を付けます。任意のもので大丈夫ですがここではtest-internet-gatewayという名前で作成します。
これでインターネットゲートウェイの作成をクリックすれば作成完了です。

test-vpcにアタッチさせる

test-internet-gatewayを選択して右上のアクションからVPCにアタッチを選択します。

使用可能なVPC
使用可能なVPCにtest-vpcを選択してインターネットゲートウェイのアタッチをクリックします。

インターネットゲートウェイの一覧を確認するとtest-internet-gatewayの状態がAttachedに変わってVPCIDにtest-vpcが書かれていると思います。

ルートテーブルの設定

サブネットのルートテーブルを選択してインターネットと接続できるようにしていきます。

左側の一覧からサブネットを選択してインターネットと接続をしたいサブネットを選択する。ここではtest-subnet-0を選択し、下の方にルートテーブルのタブがあるのでそこをクリックします。画像の赤丸で囲んでいるところです。

サブネットのルートテーブルが表示されます。
現状では送信先が10.0.0.0/21 ターゲットがlocalのものがあると思いますがこれはデフォルトで設定されているものなので削除できません。
赤丸で囲まれたリンクをクリックしてルートテーブルの画面に移動します。rtb-017da249d3fcce577の部分です。

ルートテーブルの一覧に遷移したら赤丸で囲まれた下部にあるルートを選択してルートを編集をクリックします。

ルートを追加を選択して

送信先 :0.0.0.0/0
ターゲット :インターネットゲートウェイを選択してtest-internet-gatewayを選択

ルートの変更をクリックします。

送信先 0.0.0.0/0のルートが追加されていると思います。
これでtest-subnet-0はインターネット通信ができるようになりました。

EC2インスタンスの作成

次にサブネットの中にEC2インスタンスを作成していきます。
EC2インスタンスについては別途詳しく解説した記事をあげようと思いますので今回は細かい説明は省いてさーっと作っていきます。

AWSの検索部分から「EC2」と検索し↑の画面まで移動します。
移動できたらインスタンスの起動をクリックしてインスタンスを作成していきます。

Amazon マシンイメージ (AMI)

AMIを選択します。(AMIはサーバーでいうOSになります)
ここではAmazon Linux 2を選択します。

インスタンスタイプ

インスタンスタイプはデフォルトのt2.microを選択し、次のステップをクリックします。
インスタンスタイプはメモリ、CPUの部分になります。

インスタンスの詳細の設定

ここでは赤丸で囲んだ部分を入力していきます。

ネットワーク : test-vpcを選択
サブネット : test-subnet-0
自動割り当てパブリック IP: 有効

次のステップをクリックします。

ストレージの追加

ストレージはデフォルトのままで次のステップをクリックします。

タグの追加

インスタンスの任意の名前を入力します。ここでは
Name : test-ec2にして次のステップをクリック

セキュリティグループの設定

セキュリティグループはAWSの仮想ファイヤーウォールになります。
デフォルトのままだとssh接続のみ許可された状態なのでもしWebサイト等をEC2インスタンスに作成する場合はHTTPの許可も必要になります。
今回はSSH接続しか行わないので、デフォルトのままで大丈夫です。

確認と作成をクリックします。

確認画面がでてきますので起動をクリック

キーペアを作成する画面がでてきますので新しいキーペアの作成を選択してキーペア名はここではtest-key-1にしてキーペアのダウンロードをクリックします。
ダウンロードしたキーペアはEC2インスタンスにログインする際に使用する鍵になりますのでなくさないように保管しておいてください。のちほど使用します。

キーペアのダウンロードが完了したら、インスタンスの作成をクリックしてインスタンスが作成されるまで待ちます。

約3〜5分程でインスタンスの作成が完了します。インスタンスの状態が実行中になったら作成された状態となります。

これで冒頭で紹介したこちらの図の状態ができあがりました。

SSHでEC2インスタンスへログインする

macの方はターミナル、windowsの方はTera Term等のLinuxコマンドが使えるコマンドラインインターフェースを立ち上げてください。


ls -l
#結果 -rw-r--r--@ 1 usr0102859  staff  1700 11 16 17:41 tes-key-1.pem

先程作成したキーペアがあるディレクトリに移動してキーペアがあるかls -lコマンドで確認します。


chmod 400 tes-key-1.pem

# 確認する
ls -l
# 結果 -r--------@ 1 usr0102859  staff  1700 11 16 17:41 tes-key-1.pem

確認できたらこちらのコマンドでtes-key-1.pemファイルの実行権限を変更しておきます。
変更がない場合はSSHログインが通りません。

パブリックIPアドレスを確認

EC2のインスタンス一覧画面でtest-ec2を選択して下部にあるパブリックIPアドレスをコピーする(赤丸の部分)


# ssh -i tes-key-1.pem ec2-user@[コピーしたパブリックIPアドレスを入力]
ssh -i tes-key-1.pem ec2-user@54.250.74.36
# 結果
# he authenticity of host '54.250.74.36 (54.250.74.36)' can't be established.
# ECDSA key fingerprint is SHA256:3raEywPfogwyQSxgDMYnez8cxEyWFSQ44krZSOBK30g.
# Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

yes
# 結果
#        __|  __|_  )
#        _|  (     /   Amazon Linux 2 AMI
#       ___|\___|___|
# 
#https://aws.amazon.com/amazon-linux-2/

上記のようにsshコマンドでログインする。ユーザーがec2-userになってますがこれはec2インスタンスのデフォルトユーザーです。
初回の接続時は確認が入りますのでyesを入力します。

これでEC2インスタンスにログインできれば接続成功となります。

AWSリソースの削除

EC2インスタンスやVPCが残ったままだと料金がかかってしまいますので削除しておきます。

EC2インスタンスの削除

EC2のインスタンス一覧画面でtest-ec2を選択してインスタンスの状態 -> インスタンスの削除をクリックします。

確認画面が表示されると思いますので終了をクリックしたらシャットダウンされます。

VPCの削除

VPCの一覧画面でtest-vpcを選択してアクション -> VPCの削除をクリック

確認画面が出てくるので削除してください。
VPCを削除するとき関連のあるサブネットやインターネットゲートウェイも一緒に削除してくれます。

これで今回作成したAWSリソースの削除が完了しました。

最後に

AWSは使用しただけ料金が発生しますのでEC2などリソースを起動したままだと料金が発生し続けるのでなれるまで結構怖いです・・・
私自身、どこまでが無料でどこから料金かかるのかまだ知識が曖昧なためとにかくテストで起動したものは最終的にすべて削除するようにしています。

この記事を書いた人

まだつぼみ

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

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