Help us understand the problem. What is going on with this article?

(下準備編)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで

More than 1 year has passed since last update.

世界一丁寧なAWS解説シリーズ 項目表

No. タイトル
1 〜〜下準備編(今ここ)〜〜
2 DB・サーバー構築編
3 デプロイ編①
4 デプロイ編②
5 Capistrano編

はじめに

Railsに限らず、ローカルでアプリケーションを作成し終え、
「うぉーー!!アプリ完成したよっしゃーーーー!!」
と歓喜に打ちひしがれた3秒後に必ずぶち当たる壁がありますよね。

そう。サーバーへのアップロード。

「せっかく作ったし世の中に公開したい!」 
「...でも、サーバー構築ややこしすぎファックオワタw」
と思っている方も多いのでは無いでしょうか?

僕自身自作のアプリを作成し、
そしてAWSにアップロードをしようとした結果、
かれこれ1ヶ月程経ってしまいました 笑

AWSは本当にサービスが豊富です。
豊富故に、何からしたらいいのか、どうしたらいいのか、取っつきにくいという反面もあります。

そこでこの記事では、

・AWSにサーバーを構築し、そこに作成したアプリをあげる過程で
・AWSをはじめとした、ネットワークに関する大まかな知識をつけてしまおう

という趣旨のもと、
筆者のオリジナルアプリ「Mu-Mu」をアップロードするまでの過程を、
「世界一丁寧な」解説付きで作成しました。

これからサーバーにアプリをアップロードされる方の一助となれば幸いです。

(※アカウントの作成等、事前の準備は既に終わっているものとし、実際の操作から解説をさせて頂きます!)

それでは早速順を追って見ていきましょう!

1. VPCの作成

VPC_PP.png

VPCとは、Virtual Private Cloudの略です。
AWSというひろーーーーーい土地の中で「ここからここは俺の領域だからお前ら立ち入んなよ!」と、自分の土地を勝手に作ってしまうようなイメージですかね。
この自分の土地の中に、サーバーやDBなど、アプリケーションをあげるために必要なものを作っていきます。

トップ画面より「VPC」をクリックして
詳細ページの左上「VPCの作成」をクリックしてください。

VPC.png

すると必要な項目の入力画面が出てくるかと思います。
それぞれ、

・ネームタグ:作成したいVPCの名前
・CIDR(サイダー)ブロック:このVPCが使用できるIPの範囲を決める(10.0.0.0/28(16IPアドレス) ~ 10.0.0.0/16(65,536IPアドレス)まで選択可能)
・テナンシー: VPCを作る際にハードウェアを占有するかどうかを選択できる(占有すると追加料金がかかる)

といった意味合いになりますので、入力していきましょう。

今回は、

・ネームタグ:VPC_for_MuMu
・CIDRブロック:10.0.0.0/16
・テナンシー:デフォルト

こちらで進めていきます。

2.サブネットの作成

subnet_PP.png

続いてサブネットです。
サブネットとは、一言で言えば 「ネットワークグループ」 といったところでしょうか。

「これらは外部との通信だけを行う」「これらは内部通信だけを行う」
といった具合に、同じVPCの中でも役割の異なるいくつかのグループが出来上がります。
このグループを「外部接続グループ」「内部接続グループ」といった具合に単位毎に分けてくれるものが、サブネットと呼ばれます。

では早速作成していきましょう。

subnet.png

ここで入力を求められる項目は4つです。

・ネームタグ:分かりやすい名前
・VPC:現在作成しているサブネットがどのVPCに属するのかを選択
・アベイラビリティゾーン:後ほど説明
・CIDRブロック:前出のIP範囲

ここで新しく、 「アベイラビリティゾーン」 なるものが出てきましたね。

アベイラビリティゾーンとは、「アカウント管理者が使用可能なデータセンター」といったイメージです。

AWS登録時に、 「リージョン」 という地域登録を行ったかと思います。
(筆者の場合は「アジアパシフィック(東京)」)

そしてそのリージョンの中には、いくつかのデータセンターのようなものが存在しており、
それぞれのリージョン内の各データセンターが連携し合うことで、
・バックアップを取ったり、
・アクセスが急増した際に別のサーバーにアクセスするよう調整したり(別途設定が必要)
といったことが出来る訳です。
(今回は上記の設定は行わず、ただ単に利用するアベイラビリティゾーンを選択するのみとします。)

リージョンを東京とした時点で、「ap-northeast-1a」「ap-northeast-1c」の二つが選べるようになっているので、このいずれかを選択することになります。

また今回は一番単純な形でアプリケーションのビルドを行っていきたいので、作成するサブネットを、
・外部と通信するグループ
の1つのみとし、下記のような要件としました。

・ネームタグ: MuMu-Subnet
・VPC: VPC_for_MuMu
・アベイラビリティゾーン: ap-northeast-1a
・CIDRブロック: 10.0.0.0/24

これにてサブネットの作成は完了です。

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

gateway_PP.png

続いて インターネットゲートウェイ です。
インターネットゲートウェイとはその名の通り、 「インターネットの入り口」 ですね。

1で作成したVPCは、あくまでAWS内での占有領域です。
外部との接続を行う際は、その領域から外に出ていかなければなりません。
その窓口となるのが、今回のインターネットゲートウェイなのです。

gateway.png

この作業に関しては名前を決めるだけなので、特に難しいことはないですね。
筆者はこのゲートウェイの名前を、「Gateway_for_MuMu」としました。

そしてこのゲートウェイを、VPCと紐付けます。
「このVPCから外の世界に出るには、このゲートウェイを通らないといけないですよ」
といった感じですかね。

attach.png

作成したゲートウェイを選択した状態で、「VPCにアタッチ」を選択すると、
VPCの一覧が出てくるかと思います。

ここから、先ほど作成したVPCを選択して頂くとめでたく紐付け完了。
状態の欄が赤色の文字から、緑色で「attached」に変化したかと思います。

これにてインターネットゲートウェイの作成は完了です。

4.ルートテーブルの作成

routetable_PP.png

お次は ルートテーブル です。
ルートテーブルとは、 通信に関するルールブック みたいなものです。

「この場合はこっちに通信を送る」「この場合はこっち」
みたいなものをまとめたものがルートテーブルですね。

このルートテーブルはサブネット単位で設定が出来るので、
今回は先ほど2で作成したサブネットを、
「インターネットゲートウェイをルーティングするというルールを記載した」ルートテーブルと紐付けたいと思います。

まずはルートテーブルの作成です。
roottable.png

ここは特に解説の必要は無さそうですね。
ルートテーブルを作って、名前をつけて、紐づけるVPCを選択すれば完了です。

そしてこのルートテーブルに、
「インターネットゲートウェイをルーティングするというルール」を記載したいと思います。

作成したルートテーブルを選択した状態で、
下のタブ「ルート」を選択し、
「別ルートを追加」を選択します。

another_root2.png

すると、新たな入力欄が現れますね。

・送信先: 0.0.0.0/0 
・ターゲット:  先ほど作成したゲートウェイ(クリックすると候補が現れます) 

上記のように設定し、「保存」をクリックします。
緑色の文字で「保存完了」と出れば、めでたくこのルートテーブルのルーティング先を、インターネットゲートウェイに設定出来たことになります。

そして最後にサブネットとの紐付けです。

→左側の「サブネット」を選択
→関連付けを変更するサブネットを選択
→画面下のルートテーブルを選択
→編集
→先ほど作成したルートテーブルを選択
→保存

といった手順で行ってください。

保存完了と表示されれば、晴れてルートテーブルの作成完了です。

5.セキュリティーグループの作成

securotygroup_PP.png

はい。疲れてきましたね。
安心してください。これでラストです!
...下準備編が。

ラストは セキュリティーグループ です。
セキュリティグループは、その名の通り、 セキュリティーに関するルールを記載したもの です。
「この通信は許可」「この通信は拒否」といった具合に、
適応されたグループ毎にルールを設定できます。

今回は外部接続用のセキュリティグループを作成していきましょう。

まずはセキュリティーグループを新規作成していきます。
security_group.png

・ネームタグ:セキュリティグループを認識するタグ名
・グループ名:セキュリティグループの名前(ネームタグと同じで良い)
・説明:そのセキュリティグループの説明
・VPC:セキュリティグループを適応させるVPC

ここら辺は大丈夫そうですね。

筆者は、

・MuMu-SecurityGroup

というネームタグで作成をしました。

続いてルールの設定です。
このセキュリティグループは、ホワイトリスト方式でルールが記載されています。
つまり、「記載されたルール以外は全ての通信を拒否する」といった仕様になっているので、
記載漏れの無いようにしましょう。

また、設定には「インバウンドルール」「アウトバウンドルール」という2種類の項目が存在します。
それぞれの意味としては、

・インバウンドルール:どんな通信が来たら許可するのか
・アウトバウンドルール:どんな通信を送ると許可されるのか

となっております。
では、ひとまず解説は置いておいて、早速設定をしてみましょう!

インバウンドルール

MuMu-subnet

タイプ:SSH(22)
プロトコル:TCP(6) ※自動選択
ポート範囲:22 ※自動選択
送信元:自分のグローバルIP/32

タイプ:HTTP(80)
プロトコル:TCP(6) ※自動選択
ポート範囲:80 ※自動選択
送信元: 0.0.0.0/0

さぁ。いよいよ意味が分からなくなってきましたね。
安心してください。世界一丁寧な解説をしていきますので。

まずは タイプ
ここは、許可する通信の種類を表しています。
今回外部接続用セキュリティグループのインバウンドルールに「SSH」と「HTTP」を指定したということは、
逆に言うとそれら以外の通信タイプでアクセスが来ても、全て拒否する... といった意味合いになります。

通信種類の内容としては、

・HTTP通信: 普通の通信
・SSH通信: セキュリティが強固な通信

と思って頂いて問題ございません。
(詳細は省きますが、SSH通信では「鍵」という概念を用いて通信を行い、この鍵を使ってドアを開けた状態でないと通信が出来ないようなイメージとなります。)
(SSHに関して詳細をご覧になりたい方はこちらをご覧ください)

そしてここからは補足なのですが...
このHTTPや、その他SMTP、POP3など、この欄で選択可能なものを略さずに書くと、

・HTTP: Hyper Text Transfer Protocol
・SMTP: Simple Mail Transfer Protocol
・POP3: Post Office Protocol 

といった具合に、末尾が「Protocol」となっているものが多いことに気づきます。

一方そのすぐ隣に「プロトコル」という欄があり非常にややこしいのですが...
プロトコルとは通信手段のことです(後述)
そのプロトコルの種類であるHTTP、SMTP、POPの、特に通信-レスポンスのやり取りの仕方を決めているのが「TCP」や「UDP」といったもので、
「HTTPセッションのTCP接続」「STMPセッションのUDP接続」 といった感じで使います。
ここら辺はこのテーマで本が一冊書けるので詳細は追いません(というか知りません)が、頭の片隅くらいに置いておいてください。

お次は プロトコル
これはタイプを選択した時点で自動で決まる為、あまり気にしなくても良いのですが、
プロトコルとは、通信を行う際の手順やルールなど、約束事をまとめたものです。
そのプロトコルがTCPと言うことは...
「TCPというルールにのっとって通信してくださいねー」という事になりますね。
では、TCPとはどのようなルールなのか...??
そんなことは知りません。 詳しい人に聞いてください。 笑
(薄い知識で簡単に説明すると、TCPとは、通信がくる度にそれをチェックして、問題なければレスポンスを返す...といったルールのことです。)

次に ポート番号
ポート番号とは、コンピュータが通信に使用するプログラムを識別するための番号です。

ネットワークに接続されているコンピューターは、皆例外なくIPアドレスという住所のようなものを持っています。
ですが、この住所だけでは、数多くのコンピューターがひしめくネットワークの世界で、たった1台のコンピューターの、どのプログラムを使用して通信しているのかを特定するのは難しいのです。
住所で例えるならば、「東京都港区赤坂1-1-1 赤坂マンション」 といったところで住所が打ち切られているイメージです。 
「部屋番号は!?」 となりますよね。

そこで登場するのがポート番号です。
ポート番号0番~65535番までの数字で構成されており、
このポート番号とIPアドレスを掛け合わせることで、
唯一無二の住所が出来上がる訳です。
先ほどの住所の例で言うと、「赤坂マンション101号室」の部分がポート番号にあたります。
(この唯一無二の住所を、ネットワークの世界では ソケット と呼びます。)

今回はポート番号も自動選択となっているので、そこまで気にしなくても大丈夫ですね。

そして最後の送信元は、「通信を送る元」とそのままの意味合いとなっておりますので、
上記の説明に従って設定してみてください。
(グローバルIPなんてしらねーよ という方はこちらでご確認を。
https://www.cman.jp/network/support/go_access.cgi)

以上でセキュリティグループの設定は終了です。

そしてこちらで、晴れて下準備は全て完了です! 拍手!!

どうでしたか? 難しかったでしょうか?
専門用語が多数使われているため、なかなか一度に全てを覚えるのは難しいかもしれないですが、
上記を習得して頂くことで、ネットワークの基礎中の基礎くらいは習得できるのでは無いかと思います。

いよいよ次回はサーバー、DB等デプロイの中核となるものを作成し、
アプリをあげる準備を全て整えたいと思います!
乞うご期待!

次章: DB、サーバー構築編

naoki_mochizuki
Keeyls株式会社のエンジニアしてます。 無人の鍵受け渡しシステムKEYSTATION(https://key-stations.com/ )や、 シェアオフィスの管理システム( https://sharedoffice-keystations.com/ )など作ってます。
https://keeyls.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away