#前提
・クレジットカードを持っている
・AWSアカウントを作成している
##draw.io(無料)で仮想インフラ・アーキテクチャ図を書きます
今回は、インターネットやネットワークの専門用語が飛び交いますので、初学者の方はパニック必至であります。
迷子にならないために、仮想インフラ・アーキテクチャ図を書きながら進めていきます。
(後々、アーキテクチャの説明に図面が必要ですのでこの際覚えてしまいます)
・draw.io(無料)は、こちらの記事を参考にしました
draw.ioでAWSのインフラ構成図を書く
#1.VPC (Amazon Virtual Private Cloud)を作成する
・VPCは、AWSアカウントに紐づく仮想ネットワーク空間で、他のVPCとは論理的に区別されます。
・広大な敷地の中に、柵で囲った小さな敷地を作る感じです。
・VPCはAZ(データセンター)は跨げますが、リージョン(国)を跨いで作成できません。
・AWSアカウントを作成したらデフォルトVPCが設定されていますが、個別に設定するケースが多いそうです
AWSアカウントを作成したときの状態を図にするとこんな感じです。
AWSクラウドサービスがあり、その中に(国)東京リージョンがあり、その中にアカウント作成時のデフォルトVPCがあります。
今回、IPアドレスなどの任意の設定を持たせたVPCを作っていきます。
AWSマネジメントコンソールで、サービス、VPCをクリックします。
VPCウィザードの起動 ボタンを押します。
1 個のパブリックサブネットを持つ VPCを選択します。
イメージ的には、これをやりたいのです。
説明書きがありますが、難しすぎてわかりませんでした。
色々と調べてみて、咀嚼しますと、
・ネットにアクセスできるけど、AWSのクラウドの中で、さらに仕切られた安全な空間でEC2インスタンスを使えます。
・仮想サーバーを双方向に行き来する情報を厳重に管理する場合、ネットワークアクセスコントロールリスト (ACL)オプションとセキュリティグループサービスを使います。
・/24 や/16 のサブネットマスクを使えて Elastic IP またはパブリック IP を使用してインターネットにアクセスします。
/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.0~192.168.1.255 の256個作れる
/16 とは、
・255.255.0.0 のサブネットマスク
・IPアドレスの数が65536個 例えば192.168.0.0~192.168.255.255 の65536個作れる
参考にさせていただいた動画、記事
・動画で学ぶAWS講座 VPC編 【section2】ルートテーブル, プライベートサブネット, パブリックサブネット
・サブネットマスク計算(IPv4)
・公式ドキュメント
VPC名 : TEST VPC それ以外は、そのままで進めていきます。(公式の言うとおりにしてみます)
※サブネットの名前(Name)は、パブリックなのか、プライベートなのか判別しやすいネーミングが良いそうです。
・アベイラビリティーゾーン:
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が作成できたようです。
仮想インフラ・アーキテクチャ図だと、こんな感じでしょうか。
#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を作ったので、
そのまま、ひとつパブリックサブネットを作成します。
どうやら、デフォルトでサブネットは自動作成されているようです。
サブネットの名前(Name)は、パブリックなのか、プライベートなのか判別しやすいネーミングが良いそうです。
今回は、そのまま進めます。
仮想インフラ・アーキテクチャ図だと、こんな感じでしょうか。
#3.インターネットゲートウェイを作成して、VPCにアタッチする
インターネットゲートウェイは、インターネットとVPC間で通信をおこなう経路の出入り口です。
我が家にインターネットに接続するための回線を引き込むイメージです。
先ほど作成したパブリックサブネット(10.0.1.0/24)をインターネットと接続します。
自動でインターネットゲートウェイが作成され、”attached アタッチド アタッチ済み”になっています。
つまり、自動で VPC “TEST VPC” にあてがわれているようです。
仮想インフラ・アーキテクチャ図だと、こんな感じでしょうか。
#4.ルートテーブルを作成する
ルーターやネットワーク接続されたコンピュータが持つ、個々のネットワークの宛先への経路の一覧を保持しているテーブル状のデータ構造
出入り口はできたので、どのIPアドレス宛の通信をインターネットゲートウェイへ向ければ良いか、というルーティング情報「ルート」をルートテーブルに登録します。
インターネットで使われる「TCP/IP」というプロトコルでは、データを細切れにした「パケット(Packet)」単位のデータ送受信をします。
パケットの情報のうちヘッダー情報というものに「宛先IPアドレス」があり、ネットワーク機器のルーターが「宛先IPアドレス」を見ながら、最も宛先IPアドレスに近い方のネットワークに次々とパケットを転送します。
宛先アドレスのことは「デスティネーション」、ルーティングする先は「ネクストホップ」や「ターゲット」と呼ばれます。
左側のルートテーブルをクリックします。
こちらも、自動で設定されているようです。
ルーティングも自動設定のようで、送信先に” デフォルトルート = 0.0.0.0/0 ” がルーティングされていました。
” デフォルトルート = 0.0.0.0/0 ”を登録すると、すべてのネットワークのルート情報を登録していることになります。
そして、ターゲットに「igw-」から始まるインターネットゲートウェイのIDとすることで、
VPC内宛以外の通信はすべて、インターネットゲートウェイへ向くように設定できます。
インターネットゲートウェイを確認、IDも一致しています。
自動で設定されてはいるものの、2つルーティングがあって、サブネットと関連付けされている方が メイン:いいえ と
なっていたので、アクション、メインルートテーブルの設定 で メイン:はい に変更しています。
#5.ルートテーブルにサブネットを関連付ける
#6.パブリックサブネットの中に、サーバー(EC2インスタンス)を構築する
パブリックサブネットという安全な家を建てたので、家の中に仮想サーバーを置きます。
これが、まず一応の完成させたいイメージです。
(MYSQLはプライベートサブネットに置くのは、後々やります)
##カスタムセキュリティグループを作成する
AWSコンソールのEC2、インスタンスページにいきます。
左下のセキュリティグループをクリック、セキュリティグループの作成ボタンをクリックします。
セキュリティグループを作成します。
セキュリティグループ名 : TEST-custom-security-group
説明 : 本番環境でdockerを使用するための試験的なカスタムセキュリティグループ
Experimental custom security group for using docker in production
VPC : プルダウンで選択できます。 NameやVPC IDに間違いがないか確認しておきます。
インバウンドルールを追加します。
タイプ:SSH
プロトコル:TCP(自動選択)
ポート範囲:22(自動選択)
ソース:マイIP を選択します
マイIPは、AWS接続時に自身が使用しているIPアドレスのことで、この設定でインバウンド=EC2インスタンスへのアクセスは、SSH(マイIP)のみ許可することになります。
説明:Only allow MYID SSH connection
MYIDSSH接続のみ許可 と書いておきます(任意)
アウトバウンドルールはアウトバウンド向きの通信は全て許可するので、0.0.0.0/0 はそのままで良さそうです。
こんな感じです。セキュリティグループの作成ボタンを押します。
新しいセキュリティグループの作成ができました。
##EC2インスタンスのVPC、サブネットの設定を事後変更できませんでした(お詫び)
前回の記事でEC2インスタンスを作成したのですが、これを流用することができませんでした。
(当方の勉強不足です、お詫びします)
⑤AWS仮想サーバを利用する、AWSアカウント作成 + EC2インスタンス作成(2020.4時点)
・EC2 インスタンスを別のサブネット、アベイラビリティーゾーン、VPC に移動する方法を教えてください。
・EC2起動後に、後からできること・できないこと
#7.EC2インスタンスを作成する
##不要になったEC2インスタンスを停止削除
※不要なインスタンスがある方、以外は飛ばしてください。
インスタンスのページにいき、不要なインスタンスを選択して、アクション、インスタンスの状態、終了をクリックします。
料金が発生するといけないので、Elastic IP の解放 にチェックを入れます。
はい、終了します。をクリックします。
インスタンスの状態が”terminated”ターミネーテッド:終了しました になっています。
##インスタンスの作成ボタンをクリックして、新規作成する
今回は、Amazon Linux2 AMI 64ビットを使用します。選択ボタンをクリックします。
##インスタンスタイプの選択
インスタンスタイプについて:
T2.microは、1ヶ月毎日フル起動で1年間無料なのでお勧めです。
当方は、メルカリクローンのデプロイで使用中のため、t3.microを使用します。
※次のステップ:インスタンスの詳細の設定ボタンをクリックします。
VPC は、今回作成した”TEST VPC” を選択します。
サブネットは、自動で選択されますが、一応確認しておきます。
自動割り当てパブリック 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 インスタンスを起動する方法
こんな感じです。次のステップ:ストレージの追加ボタンをクリックします。
##ストレージの追加
ストレージの設定は、デフォルトのままで進めます。
次のステップ:タグの追加 ボタンをクリックします。
##タグの追加
今回は、キー : “Name” 、 値 : “TEST-webserver” としてみます。
##セキュリティグループの設定
このようなページに遷移します。
既存のセキュリティグループを選択すると、
先ほどカスタムしたセキュリティグループ ”TEST-custom-security-group” が選べました。
SSH接続のみ許可する、としたあれです。
確認と作成ボタンをクリックします。
確認を求められます。よければ起動ボタンをクリックします。
##キーペアを作成する
SSHログインに必要な、キーペアについて選択を求められます。
当方は、⑤AWS仮想サーバを利用する、AWSアカウント作成 + EC2インスタンス作成(2020.4時点)で作成していたキーペアをそのまま使いたいので、
既存のキーペアを選択しています。
EC2インスタンスが作成できました!
仮想インフラ・アーキテクチャ図だと、こんな感じでしょうか。
#Elastic IPの作成と紐付けをする
左側の Elastic IP をクリックして、Elastic IPアドレスの割り当てボタンをクリックします。
割り当てボタンをクリックします。
このようになるので、Elastic IPアドレスを関連付ける ボタンをクリックします。
・インスタンスは、プルダウンで作成したインスタンス名を選択します。
・プライベートIPアドレスは、インスタンスの詳細設定に出てきた、ネットワークインターフェイス、プライマリIPアドレスをプルダウンで選択しました。
#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 をコピペします。
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実装を進めつつ、その過程をわかりやすい記事で寄稿していきたいと考えています。