LoginSignup
6
9

More than 3 years have passed since last update.

⑥ 知識ゼロからAWSインフラ構築・VPC + EC2 + SSHログイン する(2020.4時点)

Posted at

前提

・クレジットカードを持っている
・AWSアカウントを作成している

draw.io(無料)で仮想インフラ・アーキテクチャ図を書きます

今回は、インターネットやネットワークの専門用語が飛び交いますので、初学者の方はパニック必至であります。
迷子にならないために、仮想インフラ・アーキテクチャ図を書きながら進めていきます。
(後々、アーキテクチャの説明に図面が必要ですのでこの際覚えてしまいます)

・draw.io(無料)は、こちらの記事を参考にしました
 draw.ioでAWSのインフラ構成図を書く

1.VPC (Amazon Virtual Private Cloud)を作成する

・VPCは、AWSアカウントに紐づく仮想ネットワーク空間で、他のVPCとは論理的に区別されます。
・広大な敷地の中に、柵で囲った小さな敷地を作る感じです。
・VPCはAZ(データセンター)は跨げますが、リージョン(国)を跨いで作成できません。
・AWSアカウントを作成したらデフォルトVPCが設定されていますが、個別に設定するケースが多いそうです

AWSアカウントを作成したときの状態を図にするとこんな感じです。
AWSクラウドサービスがあり、その中に(国)東京リージョンがあり、その中にアカウント作成時のデフォルトVPCがあります。
image.png

今回、IPアドレスなどの任意の設定を持たせたVPCを作っていきます。
AWSマネジメントコンソールで、サービス、VPCをクリックします。
image.png
VPCウィザードの起動 ボタンを押します。
image.png
1 個のパブリックサブネットを持つ VPCを選択します。
image.png
イメージ的には、これをやりたいのです。
image.png

説明書きがありますが、難しすぎてわかりませんでした。
色々と調べてみて、咀嚼しますと、

・ネットにアクセスできるけど、AWSのクラウドの中で、さらに仕切られた安全な空間でEC2インスタンスを使えます。
・仮想サーバーを双方向に行き来する情報を厳重に管理する場合、ネットワークアクセスコントロールリスト (ACL)オプションとセキュリティグループサービスを使います。
・/24 や/16 のサブネットマスクを使えて Elastic IP またはパブリック IP を使用してインターネットにアクセスします。

CIDR(サイダーブロック)
/24 とは、
 ・IPアドレスに付く、192.168.1.0/24、の /24 の表記、
 CIDR (サイダー:Classless Inter-Domain Routing)はクラスを使わないIPアドレスの割り当てと経路情報の集成を行う技術
 2進数で桁数32桁のIPアドレスが、8(32-24)割り当てられるということを示す  11111111 11111111 11111111 00000000 ←/24
 255.255.255.0 のサブネットマスク 
 IPアドレスの数が256個 例えば192.168.1.0192.168.1.255 の256個作れる
/16 とは、
 ・255.255.0.0 のサブネットマスク
 ・IPアドレスの数が65536個 例えば192.168.0.0~192.168.255.255 の65536個作れる

参考にさせていただいた動画、記事
  ・動画で学ぶAWS講座 VPC編 【section2】ルートテーブル, プライベートサブネット, パブリックサブネット
  ・サブネットマスク計算(IPv4)
  ・公式ドキュメント

ステップ2の画面に遷移します。
image.png

VPC名 : TEST VPC  それ以外は、そのままで進めていきます。(公式の言うとおりにしてみます)

※サブネットの名前(Name)は、パブリックなのか、プライベートなのか判別しやすいネーミングが良いそうです。

image.png
公式ドキュメントはこんな感じです。
image.png

・アベイラビリティーゾーン:
AZ そのリージョン(国)の各データセンター
Amazon EC2 は、世界各地のロケーションでホスティングされています。
リージョンはそれぞれ、地理的に離れた領域です。各リージョンには、アベイラビリティーゾーンと呼ばれる複数の独立した場所があります。

・サブネット :
 VPCの中で、VPCの外部(インターネット)にアクセスする役割のパブリックサブネット、外部からのアクセスルートを持たせず完全に守るプライベートサブネットという区分けをするセキュリティレベルを高める仕組み。

・DNS ホスト名を有効化: はい
 VPC 内のインスタンスが パブリック DNS ホスト名を取得するかどうか。
 VPC内に起動されるインスタンスに名前解決可能なFQDNが付与されます。

・FQDN(Fully Qualified Domain Name:完全修飾ドメイン名)
 IPアドレスはインターネット上のコンピュータを特定するための番号。
 数字の羅列であるIPアドレスは、人間にとっては覚えづらく扱いにくいという欠点がある。
  IPアドレスと同じくネットワーク上のコンピュータを特定できるFQDN(Fully Qualified Domain Name:完全修飾ドメイン名)は、
 文字列に意味を持たせることができるため、この問題を解決するものと言えます。 ただし、FQDNはあくまで人間のためのものです。
 コンピュータ同士が通信する時はIPアドレスが使われます。
 そのため、FQDNとIPアドレスを互いに変換できる仕組みが必要でした。この仕組みを「DNS(Domain Name System)」と言います。

参考にさせていただいた記事
IPアドレスとFQDNの関係

・テナンシー:ハードウェアを占有(物理的に確保)するかどうか

VPCが作成できたようです。
image.png
image.png
仮想インフラ・アーキテクチャ図だと、こんな感じでしょうか。
image.png

2.VPCにサブネットを作成する

サブネットとは、
・大きなネットワークを複数の小さなネットワークに分割管理してセキュリティレベルを高める仕組みです。
・サブネットはAZ:アベイラビリティゾーン(データセンター)を跨いで作成できません。
・サブネットは/24が推奨され、10.1.0.0/24 ~ 10.1.0.255/24 0~255までの256個のアドレスが確保できます
・256個のうち、初めの4つのIPアドレスと最後の1つのIPアドレスはAWSが使用予約があり使用できません。

今回、1個のパブリックサブネット(外部とのアクセスをする役割)を持つVPCを作ったので、
そのまま、ひとつパブリックサブネットを作成します。

左側のサブネットをクリックします。
image.png

どうやら、デフォルトでサブネットは自動作成されているようです。

サブネットの名前(Name)は、パブリックなのか、プライベートなのか判別しやすいネーミングが良いそうです。
今回は、そのまま進めます。
image.png
仮想インフラ・アーキテクチャ図だと、こんな感じでしょうか。
image.png

3.インターネットゲートウェイを作成して、VPCにアタッチする

インターネットゲートウェイは、インターネットとVPC間で通信をおこなう経路の出入り口です。
我が家にインターネットに接続するための回線を引き込むイメージです。
先ほど作成したパブリックサブネット(10.0.1.0/24)をインターネットと接続します。

左側のインターネットゲートウェイをクリックします。
image.png

自動でインターネットゲートウェイが作成され、”attached アタッチド アタッチ済み”になっています。
つまり、自動で VPC “TEST VPC” にあてがわれているようです。
image.png
仮想インフラ・アーキテクチャ図だと、こんな感じでしょうか。
image.png

4.ルートテーブルを作成する

公式ドキュメント:ルートテーブル

ルーターやネットワーク接続されたコンピュータが持つ、個々のネットワークの宛先への経路の一覧を保持しているテーブル状のデータ構造

出入り口はできたので、どのIPアドレス宛の通信をインターネットゲートウェイへ向ければ良いか、というルーティング情報「ルート」をルートテーブルに登録します。

インターネットで使われる「TCP/IP」というプロトコルでは、データを細切れにした「パケット(Packet)」単位のデータ送受信をします。

パケットの情報のうちヘッダー情報というものに「宛先IPアドレス」があり、ネットワーク機器のルーターが「宛先IPアドレス」を見ながら、最も宛先IPアドレスに近い方のネットワークに次々とパケットを転送します。
宛先アドレスのことは「デスティネーション」、ルーティングする先は「ネクストホップ」や「ターゲット」と呼ばれます。

左側のルートテーブルをクリックします。
image.png
こちらも、自動で設定されているようです。
image.png
ルーティングも自動設定のようで、送信先に” デフォルトルート = 0.0.0.0/0 ” がルーティングされていました。
” デフォルトルート = 0.0.0.0/0 ”を登録すると、すべてのネットワークのルート情報を登録していることになります。
そして、ターゲットに「igw-」から始まるインターネットゲートウェイのIDとすることで、
VPC内宛以外の通信はすべて、インターネットゲートウェイへ向くように設定できます。

インターネットゲートウェイを確認、IDも一致しています。
image.png
自動で設定されてはいるものの、2つルーティングがあって、サブネットと関連付けされている方が メイン:いいえ と
なっていたので、アクション、メインルートテーブルの設定 で メイン:はい に変更しています。
image.png
image.png
image.png

5.ルートテーブルにサブネットを関連付ける

これも、自動で設定されているようです。
image.png

仮想インフラ・アーキテクチャ図だと、こんな感じでしょうか。
image.png

6.パブリックサブネットの中に、サーバー(EC2インスタンス)を構築する

パブリックサブネットという安全な家を建てたので、家の中に仮想サーバーを置きます。

これが、まず一応の完成させたいイメージです。
(MYSQLはプライベートサブネットに置くのは、後々やります)
image.png

カスタムセキュリティグループを作成する

AWSコンソールのEC2、インスタンスページにいきます。
image.png
左下のセキュリティグループをクリック、セキュリティグループの作成ボタンをクリックします。
image.png
セキュリティグループを作成します。
image.png
セキュリティグループ名 : TEST-custom-security-group
説明 : 本番環境でdockerを使用するための試験的なカスタムセキュリティグループ
Experimental custom security group for using docker in production
VPC : プルダウンで選択できます。 NameやVPC IDに間違いがないか確認しておきます。
image.png
インバウンドルールを追加します。
タイプ:SSH
プロトコル:TCP(自動選択)
ポート範囲:22(自動選択)
ソース:マイIP を選択します
マイIPは、AWS接続時に自身が使用しているIPアドレスのことで、この設定でインバウンド=EC2インスタンスへのアクセスは、SSH(マイIP)のみ許可することになります。
説明:Only allow MYID SSH connection
MYIDSSH接続のみ許可 と書いておきます(任意)
アウトバウンドルールはアウトバウンド向きの通信は全て許可するので、0.0.0.0/0 はそのままで良さそうです。

こんな感じです。セキュリティグループの作成ボタンを押します。
image.png
新しいセキュリティグループの作成ができました。
image.png

EC2インスタンスのVPC、サブネットの設定を事後変更できませんでした(お詫び)

前回の記事でEC2インスタンスを作成したのですが、これを流用することができませんでした。
(当方の勉強不足です、お詫びします)
⑤AWS仮想サーバを利用する、AWSアカウント作成 + EC2インスタンス作成(2020.4時点)
EC2 インスタンスを別のサブネット、アベイラビリティーゾーン、VPC に移動する方法を教えてください。
EC2起動後に、後からできること・できないこと

7.EC2インスタンスを作成する

不要になったEC2インスタンスを停止削除

※不要なインスタンスがある方、以外は飛ばしてください。

インスタンスのページにいき、不要なインスタンスを選択して、アクション、インスタンスの状態、終了をクリックします。
image.png
料金が発生するといけないので、Elastic IP の解放 にチェックを入れます。
はい、終了します。をクリックします。
image.png
インスタンスの状態が”terminated”ターミネーテッド:終了しました になっています。

インスタンスの作成ボタンをクリックして、新規作成する

今回は、Amazon Linux2 AMI 64ビットを使用します。選択ボタンをクリックします。
image.png

インスタンスタイプの選択

インスタンスタイプについて:
T2.microは、1ヶ月毎日フル起動で1年間無料なのでお勧めです。
当方は、メルカリクローンのデプロイで使用中のため、t3.microを使用します。

※次のステップ:インスタンスの詳細の設定ボタンをクリックします。
image.png

インスタンスの詳細設定

このような設定画面になります。
image.png

VPC は、今回作成した”TEST VPC” を選択します。
image.png
サブネットは、自動で選択されますが、一応確認しておきます。

自動割り当てパブリック IP : ”有効” を選択します。
Amazon のパブリック IP アドレスプールからパブリック IP アドレスをリクエストし、インターネットからインスタンスにアクセスできるようにします。ほとんどの場合、パブリック IP アドレスは、そのインスタンスが使用できなくなってから停止または終了されるまでそのインスタンスに関連付けられます。自由に関連付けと関連付け解除を実行できる固定パブリック IP アドレスが必要な場合は、代わりに Elastic IP アドレス (EIP) を使用します。独自の EIP を割り当てて、それを起動後にインスタンスに関連付けることができます。

T2/T3 無制限  : ”有効化” のチェックを外します。(バースト機能はおそらく不要なので)
T2/T3 無制限を有効にすると、いつでも必要に応じた期間、アプリケーションがベースラインを越えてバーストできます。インスタンスの平均 CPU 使用率がベースライン以下の場合は、インスタンスの 1 時間ごとの料金ですべての使用量が自動的にカバーされます。また、ベースラインを越えた使用量にはすべて課金されます。詳細はこちら

ネットワークインターフェイス、プライマリIP : 10.0.0.5 (/24 サブネットのCIDER) にしてみます。  (初めのIP4つは使用不可なので5番目にしようと思い)

下記の条件で、EC2 インスタンスにカスタム IP アドレスを設定できるようなので、設定してみます。
 ・有効な IPv4 アドレスであること
 ・選択したサブネットの CIDR 範囲にあること
 ・利用可能であること。つまり、他のリソースに関連付けられていないこと

デフォルトは自動割り当てなっています、これでも問題はないと思われます。

[小ネタ] プライベートIPアドレスを指定して EC2 インスタンスを起動する方法

こんな感じです。次のステップ:ストレージの追加ボタンをクリックします。
image.png
image.png

ストレージの追加

ストレージの設定は、デフォルトのままで進めます。
次のステップ:タグの追加 ボタンをクリックします。
image.png

タグの追加

今回は、キー : “Name”  、 値 : “TEST-webserver” としてみます。

次にステップ:セキュリティグループの設定をクリックします。
image.png

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

このようなページに遷移します。
image.png
既存のセキュリティグループを選択すると、
先ほどカスタムしたセキュリティグループ ”TEST-custom-security-group” が選べました。
SSH接続のみ許可する、としたあれです。

確認と作成ボタンをクリックします。
image.png
確認を求められます。よければ起動ボタンをクリックします。
image.png

キーペアを作成する

SSHログインに必要な、キーペアについて選択を求められます。

当方は、⑤AWS仮想サーバを利用する、AWSアカウント作成 + EC2インスタンス作成(2020.4時点)で作成していたキーペアをそのまま使いたいので、

既存のキーペアを選択しています。

インスタンスの作成ボタンをクリックします。
image.png

EC2インスタンスが作成できました!
image.png
仮想インフラ・アーキテクチャ図だと、こんな感じでしょうか。
image.png

Elastic IPの作成と紐付けをする

左側の Elastic IP をクリックして、Elastic IPアドレスの割り当てボタンをクリックします。
image.png

割り当てボタンをクリックします。
image.png
このようになるので、Elastic IPアドレスを関連付ける ボタンをクリックします。
image.png

・インスタンスは、プルダウンで作成したインスタンス名を選択します。
・プライベートIPアドレスは、インスタンスの詳細設定に出てきた、ネットワークインターフェイス、プライマリIPアドレスをプルダウンで選択しました。

関連付けるボタンをクリックします。
image.png
このようになりました。
image.png

VPCの中にあるEC2インスタンスにSSHログインする

ターミナルで以下のコマンドを実行します。

ターミナル

      #cdコマンドで ローカルPCのホームディレクトリに移動
cd ~
      #mkdir(メイクディア)コマンドで.sshというディレクトリを作成
      # もしFile exists(存在します)とエラーがでた時は、そのままでOK

mkdir ~/.ssh

      /# mvコマンドでキーペア作成時にダウンロードしたpemファイルをダウンロードディレクトリから、.sshディレクトリに移動
      #mv Downloads/ダウンロードした鍵の名前.pem .ssh/
       #(※)既存のキーペアを既に移動している場合は省略します

mv Downloads/*******.pem .ssh/

      # .sshディレクトリに移動

 cd .ssh/

      #lsコマンドで .sshディレクトリのファイル一覧を表示
      # pemファイルの移動ができたか確認
 ls

      # chmod(チェンジモード)コマンドで、パーミッション(アクセス権限) 600 -rw- --- ---  を設定
      #所有者権限 (6 読込・書込み可能)・グループ権限(0 権限なし)・その他のユーザーの権限(0 権限なし)
      #chmod 600 ダウンロードした鍵の名前.pem

chmod 600 *******.pem

      #ダウンロードした鍵を用いて、ec2-userとしてログイン
      # ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスと紐付けたElastic IP

ssh -i *******.pem ec2-user@**.****.****.**

EC2インスタンスと紐付けたElastic IP をコピペします。
image.png
image.png

SSHログインできました!

8.参考にさせてただいた動画・記事一覧(ありがとうございます!)

動画で学ぶAWS講座 VPC編シリーズ
AWS VPCによるネットワーク構築とEC2によるサーバー構築
初めてEC2を触ってみたので手順をまとめた
[初心者向け]VPC作成からEC2インスタンス起動までを構成図見ながらやってみる(その1)
[初心者向け]VPC作成からEC2インスタンス起動までを構成図見ながらやってみる(その2)
【AWS入門】ゼロからVPCを作ってみる
AWS入門者向け 初心者が最初に理解すべきEC2とVPCの基本的な用語解説
AWSでWebサーバー構築!VPC設計に必要なIPアドレスとサブネットの基礎知識(第1回)
AWSでWebサーバー構築!専門用語の解説とVPC環境を構築する手順(第2回)
AWSでWebサーバー構築!EC2を作成してSSH接続する(第3回)
(下準備編)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで

9.最後に

当方、
実務未経験+初学者+テッ○キャンプ卒業+転職活動中であります。
EC2インスタンス単独で本番環境とすることは知っていましたが、
VPCを後から作った場合、既存のEC2インスタンスは流用できませんでした。
(再度お詫びします)

ようやく、EC2にDockerをインストールする手前まで来たのかと思います。
この先も、本番環境でのdocker実装を進めつつ、その過程をわかりやすい記事で寄稿していきたいと考えています。

6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9