AWS 無料利用枠で何かやってみる Day 6 〜VPC設定とEC2構築
- Day 6 で何やる?
- 参考にしたサイト/書籍は以下の通り(感謝)
- まずVPC周りを構築する
- EC2起動
- EC2にSSH接続するための設定(インターネットゲートウェイ/ルートテーブル)
- EC2にSSH接続
- 後述
Day 6 で何やる?
【再掲】ようやく、EC2建ててみます。サーバを作りたいというよりは、AWSのVPC関連の設定に重きを置いて。(Day 5で言いました。)
参考にしたサイト/書籍は以下の通り(感謝)
サイト
- (1) 【AWS VPC入門】1.VPC/Subnet - Qiita
- (2) 【AWS VPC入門】2.EC2/Internet Gateway/Route Table - Qiita
- (3) 弊社で使っているAWSリソースの命名規則を紹介します | DevelopersIO
- (4) IPアドレスの基礎知識 - Qiita
- (5) でのインスタンスのテナンシーの設定 Amazon EC2 Auto Scaling - Amazon EC2 Auto Scaling (日本語)
※(5)のAWSのサイトは自動翻訳が不十分で「Amazon EC2 Auto Scalingでのインスタンスのテナンシーの設定」が正しいです。
作業自体はほぼ(1)(2)のまんまです。ありがとうございます。
実業務で、既存のインスタンス名などネーミングルールがばらばらで嫌だなと思っていたら、(3)にてかなりいい感じのルールを見つけたので踏襲させて頂きました。標準化って大事ですよね。
書籍
- 今回もなし
まずVPC周りを構築する
AWSアカウントを作成すると、default VPC及び周辺の設定が用意されているが、とりあえず構成を理解することが目的であるため、一から作ります。
VPC設定
文章で書くと、「VPCを作成」ボタンが2回出てきて、ちょっと「お、おぅ」ってなりますね。
前述の通り、名前(Nameタグの値)は、サイト(3)に倣ってます。
CIDRブロックで、VPCに割り当てるネットワーク領域を設定する。CIDR表記については、サイト(4)を参考に。なお、今回設定した「10.0.0.0/16」は、IPアドレス数:65536 (ホストアドレス数:65534)のネットワークとなります。
無料利用枠とか関係なしに、そんなに使いません。※厳密にはこの後サブネット作るので、その範囲だと100ちょいになります。
テナンシーの詳細は以下参照。仮想サーバを物理的にどう配置するかという設定で、defaultだと物理ハードウェアを共有する設定となり、それ以外は専有となり別料金も掛かるようです。
サブネット設定
- ①:「サブネット」タグを選択
- ②:「サブネットを作成」ボタンを押す
- ③:先程作成したVPCを選択する(=VPC内のサブネットを作る)
- ④:サブネットの設定を行う(サイト(1)に倣い、public用とprivate用を作成)
- ⑤:「サブネットを作成」ボタンを押す
文章で書くと、「サブネットを作成」ボタンが2回出てきて、ちょっと「お、おぅ」ってなりますね。
CIDRブロックで「/26」としているので、IPアドレス数:64 (ホストアドレス数:62)のネットワークとなります。
ポイントは、サブネット指定時にAZの指定がある点。
VPCは仮想環境かつ、その範囲は利用者によって規定された仮想的なネットワークとなるが、このネットワークを複数AZに跨って設定することが可能であり、この構成を「マルチAZ構成」と呼ぶ。
AWS 無料利用枠で何かやってみる Day 3 〜AWSキーワード整理 - Reverse[re:verse|re:birth] engineering
とDay 3 で何故か断言しているが、VPCにおけるマルチAZ構成は、サブネットを複数のAZに作成し、そのAZ内に冗長構成を作ることで実現するという事になるはず。
EC2起動
ようやくEC2に取りかかれます。
EC2のダッシュボードから、
- ①:「インスタンス」タグを選択
- ②:「インスタンスを起動」ボタンを押す
※起動ってイメージ湧きにくいですが、すでにあるマシンイメージを「起動」するからだと思います。 - ③:Amazon マシンイメージ(AMI)を選択(OS+αのテンプレートですね)
【重要】無料利用枠ユーザーは「無料利用枠の対象」を選んでくださいね - ④:インスタンスタイプを選択(起動するEC2のスペックですね)
【重要】無料利用枠ユーザーは「無料利用枠の対象」を選んでくださいね - ⑤:「確認と作成」ではなく、「次のステップ」ボタンを押す
追記
一番大事な、「インスタンス詳細の設定」のキャプチャが漏れています。
ここでは、ネットワーク(つまりVPC)とサブネットの指定が必要になります!!
追記終わり
- ⑥:ストレージサイズはデフォルト8Gですが、無料利用枠は30Gまであるので必要に応じ増やします → 「次のステップ」ボタンを押す
- ⑦:インスタンス名をNameタグでつけて、「次のステップ」ボタンを押す
- ⑧:セキュリティグループを設定しますが、既存では未作成なので新規で作成します。ここは用途によって異なりますが、SSH/HTTP/HTTPSの設定を行います。(インバウンドルールのみ設定)
- SSH:ソースに「マイIP」を設定すると、現在AWSコンソールに接続している環境のグローバルIPアドレスが割当られます。ただ、このグローバルIPは固定じゃないはずなので、今後不便になりそうです。(後述)
- HTTP/HTTPSはどこからでも。
- 「確認と作成」を押します。
- ⑨:確認画面で設定確認後、「起動」を押します。 ※「起動」出てきましたね!!
- ⑩:ただ、まだ起動はせずキーペアの選択or作成を要求されます。EC2に接続するための、公開鍵(EC2に自動配置)と秘密鍵(SSH接続元のローカルに配置)となるので、新規で作成します
- ⑪:キーペア(秘密鍵、.pemファイル)をダウンロードします。 ※ssh接続に必要となります
- ⑫:「インスタンスの作成」ボタンを押す → EC2構築done!!
EC2にSSH接続するための設定(インターネットゲートウェイ/ルートテーブル)
SSH接続するには、通常インターネットを介する必要があります。一方で、VPCはあくまでAWS上の仮想ネットワークであるため、その橋渡し役の仮想ルーターであるインターネットゲートウェイを設定します。
- ①:「インターネットゲートウェイ」タグを選択
- ②:「インターネットゲートウェイの作成」ボタンを押す
- ③:インターネットゲートウェイの設定(名前だけ)を行い、「インターネットゲートウェイの作成」ボタンを押す
- ④:一覧から作成したインターネットゲートウェイを右クリックし、「VPCにアタッチ」を選択
- ⑤:先程作成したVPCを選択し、「インターネットゲートウェイのアタッチ」を押す
次に、作成したEC2がインターネット接続=ローカルIP以外はインターネットゲートウェイを通してインターネットに接続するために設定を行います。そのためには、ルートテーブルを設定する必要があります。
- ⑥:「ルートテーブル」タグを選択
- ⑦:「ルートテーブルの作成」ボタンを押す
- ⑧:ルートテーブルの設定(名前と紐づくVPC)を行い、「作成」ボタンを押す
- ⑨:一覧から作成したルートテーブルを選択肢し、「ルートの編集」を選択
- ⑩:送信先:「0.0.0.0/0」、ターゲット:上記で設定したインターネットゲートウェイを指定し、「ルートの保存」を押す
ようやく終わりかと思いましたが、ルートテーブルはサブネットにも関連付ける必要があります。これはサブネット単位で、セキュリティ面からルーティングを変えるためと思われます。(あまり詳しくないです。)
- ⑪:「サブネット」タグを選択
- ⑫:EC2を構築したサブネットを指定し、「ルートテーブルの関連付けを編集」を押す
- ⑬:作成したルートテーブルを指定し、「保存」を押す
EC2にSSH接続
.pemを配置の上、SSH接続すると、
chmod 400 trial-dev-ec2.pem $ ssh -i "trial-dev-ec2.pem" ec2-user@[*EC2のパブリック IPv4 アドレス(インスタンス概要で確認できます)*] The authenticity of host '[*上記のIPアドレス*]' can't be established. ECDSA key fingerprint is SHA256:********************************** Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '[*上記のIPアドレス*]' (ECDSA) to the list of known hosts. __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| https://aws.amazon.com/amazon-linux-2/ [ec2-user@ip-10-0-193-21 ~]$
お疲れ様でした!!
後述
いやー、AWS触るよりブログ用の画像作ったり、理解を確認しながら文章書くのが大変でしたね。
そう考えると、 Qiitaさん(https://qiita.com/) とか、 クラスメソッドさん(https://dev.classmethod.jp/)、及び執筆者の皆さんにはマジで感謝だなとしみじみ思いました。
感謝
なお、今回の投稿内で述べた自宅PCのIP変わる問題について、Lambda使ってマイIPの変更を反映している方がいらしゃったので、紹介しておきます。面白いこと考えるな〜。