本シリーズ集
タイトル | |
---|---|
0 | 目標・やりたいこと |
1 | AWS編 |
2 | rails開発環境構築編 |
3 | Nginx・MySQL編 |
4 | Capistrano編 |
5 | CircleCI編 |
6 | 総集編 |
#AWSとは
本記事では、AWSの EC2(Elastic Compute Cloud)、 __VPC(Virtual Private Cloud)__を使用して、サーバを構築していく。
今回は、VPC を構築し、その中に__サブネット__を構築。そして、そのサブネットの中に、__EC2__を使用して、Webサーバ、APサーバ、DBサーバを立てていく。
ちなみに、AWSには、コンテナ用のサービス__ECS(Elastic Container Service)__や、RDB用のサービス__RDS(Relational Database Service)__もあるが、今回は使わず、全部EC2とDockerで済ます。(追々、__ECS__の使い方も学んでいきたいと思ってます)
参考サイト・記事・書籍
参考サイト・書籍は以下。(書籍(AmazonWebServices〜)は執筆時点ではKindle Unlimited登録者は__無料__)
・(サイト)(下準備編)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで
・(書籍)Amazon Web Services 基礎からのネットワーク&サーバー構築
・(書籍)AWSをはじめよう
##1. VPC構築
__VPC(Virtual Private Cloud)__は、自前で構築できる仮想的なLANのようなもの。
この章では、VPCの作成方法を示していく
- AWSのサービスの(検索でも可能)VPCページにいく。
- 左側に表示されるサイドバーの『VPC』をクリック
- [VPCを作成]をクリック
- [名前タグ] に好きな名前を。
[IPv4CIDRブロック]には、『10.0.0.0/16』と入力
[IPv6 CIDR ブロック]は『なし』
[テナンシー]・[タグ]はデフォルトのままでOK
- [VPCの作成]をクリック
->作成完了
続いて、__サブネットを構築__していく
##2. サブネット構築
- ページはそのままで、サイドバーの[サブネット]をクリック
- 表示された画面で[サブネットを作成]をクリック
- [VPC ID]に、先程作成したVPCを紐付ける。
- また、その下のサブネットの設定画面では、
[サブネット名]に『パブリックサブネット』
[アベイラビリティゾーン]に__任意の設定(覚えておく必要あり)__を
[IPv4 CIDR ブロック] に 『10.0.1.0/24』
を入力
- [サブネットを作成]をクリック
-> サブネット作成終了
##3. ルートテーブル作成
そのままの画面で、ルートテーブルを作成していく。
-
サイドバーの__[ルートテーブル]__をクリック。
-
開かれる画面で__[ルートテーブルの作成]__をクリック。
-
[名前タグ] に、__任意の名前__を入れ、
[VPC] に、先程作成したVPCを選択し、
[作成] をクリックして作成完了
##4. インターネットゲートウェイの作成
そのまま作成したルートテーブルを編集する...前に、
__『インターネットゲートウェイの作成』__をする。
これをしないと、サブネット内がインターネット上で通信できないままになってしまう。
- サイドバーの__[インターネットゲートウェイ]__をクリック
- 表示される画面で、__[インターネットゲートウェイの作成]__をクリック
- [名前タグ] に任意の名前をつけて、__[インターネットゲートウェイの作成]__をクリックして終了。
##5. ルートテーブル更新
-
インターネットゲートウェイ作成後、また、__[ルートテーブル]__画面に戻る。
-
ルートテーブル一覧で、『先程作成したルートテーブル』のチェックボックスにチェックを入れると、下側に『概要』、__『ルート』等が表示されるので、その『ルート』タブをクリックしたら表示される[ルートの編集]__をクリックする。
-
ルーティングテーブルの編集ができる画面が表示されるので、[送信先]に『0.0.0.0/0』、__[ターゲット]__に、Internet Gateway(igw-xxxx) を選択する。
-
[ルートの保存] をクリック。
-> ルートテーブル編集終了。
あとは、元のルートテーブル一覧の表示画面に戻るので、[サブネットの関連づけ] から、作成したサブネット(筆者は__パブリックサブネット__)に関連づければ、OK。
#WEBサーバ用EC2インスタンス作成方法
###EC2とは
__EC2__は、一言で言うと、『仮想サーバ構築サービス』
イメージとしては、『自分でサーバを立ててその中で好き勝手動かせますよー』て感じなやつ。
AWSでは、EC2の一つ一つを『インスタンス』と呼ぶ。(他のCloudサービスはどうか知らんけど)
-
サービスの__EC2__から__EC2の画面__へ行く
-
サイドバーの__[インスタンス]__をクリック
-
表示された画面で、__[インスタンスを起動]__をクリック
-
Amazon Linux 2 AMI (HVM), SSD Volume Type - ami-
を選択 -
[t2.micro](デフォルトで選択されている)を選択し、__[次のステップ:インスタンスの詳細の設定]__をクリック
-
遷移先の画面では、インスタンスの詳細設定を行う画面が表示されるので、
__[ネットワーク]__に、先程作成したVPCを、
__[サブネット]に、先程作成した『パブリックサブネット』を、
[自動割り当てパブリックIP] は、『有効』を
各々セットし、その他はデフォルトのままでOK。
全て設定終わったら、[次のステップ:ストレージの追加]__をクリック -
『ストレージの追加』画面 では、AMIに設定するサイズ等が選択できるが、ここは好みで(30GiBまでは無料)。
-
『(※)セキュリティグループの設定』画面 に遷移すると、セキュリティグループを設定する画面が出てくるので、
__[新しいセキュリティグループを作成する]__にチェックをつけ、
__[セキュリティグループ名]__に、『WEB-SG』と名付け、その内容は、全てのSSH、HTTPを通すように設定する。
-
__[確認と作成]をクリック(もしかすると、セキュリティが甘い等の警告が出るかもしれないので、出たら無視してそのまま[起動]__をクリック)すると、モーダルが開かれる(下図)ので、そこで
__[新しいキーペアの作成]を選択し、キーペア名に任意の名前をつけて[インスタンスの作成]__をクリック
-> インスタンス作成完了。
※ セキュリティグループ... ファイアウォールのような設定を行えるサービス。複数インスタンスに紐づけることができる。
EC2インスタンスへのアクセス方法
ローカルのPCからターミナルでEC2インスタンスへアクセスする方法を示す。
まず、EC2インスタンスの__パブリックIP__を確認する。
確認方法は、EC2インスタンスの対象インスタンスにチェックマークをつけた際に表示される__『詳細』タブに表示される『パブリックIPv4アドレス』__の欄を確認する。
次に chown
コマンドを使用してEC2インスタンス作成時にダウンロードした鍵の権限を変更する。
$ chmod 400 【鍵のPATH】
これで(最低でも)作成者のみ 読み取りできるようにしておく。そして、
$ ssh -i 【鍵のPATH】 ec2-user@【IPアドレス】
でAWSにアクセスできるようになる。
パブリックIPを固定化する
これで、終了したかと思いきや、AWSには思わぬ落とし穴がある。
それは、__『インスタンスのパブリックIPは、起動毎に変更されてしまう』ということである。
なので、これを固定化するために、[Elastic IP]__を使用する。
####ElasticIPの設定方法
- EC2サービス画面のサイドバーから、[Elastic IP] をクリックする
- __[Elastic IP アドレスの割り当て]__をクリックする。
- 表示される画面で、全て設定はデフォルト(AmazonのUPv4アドレスプールにチェック)のまま__[割り当て]__をクリック
- 画面が切り替わるので、切り替わった先で、[アクション]-> __[Elastic IP アドレスの関連付け]__をクリックし、遷移先の画面で、関連付けしたいインスタンスによしなに関連付けする。
これで、起動毎に変更することない、不変なIPアドレス をインスタンスに割り当てることができた。
この、『EC2作成』->『ElasticIP設定』を__APサーバ__・DBサーバ それぞれにやっていけばOK。
##SSH接続後、EC2インスタンス上でやっておくこと
1. docker のインストール
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/docker-basics.html
このサイトに則ってコマンドを打っていく。
詳細
1. `$ sudo yum update -y` コマンドでyum をアップデートする。 2. `$ sudo yum install docker`でdockerをインストール。 3. `$ sudo service docker start` でdockerを起動 現行では、一々`docker`コマンドを呼び出すのに、`sudo`を付けなきゃいけないから、権限を変更する。 4. `$ sudo usermod -a -G docker ec2-user` これで、EC2を一度シャットダウンして再びログインすれば、`docker`コマンドを`sudo`なしで使用できるようになる。 2. docker-compose のインストール
https://qiita.com/kichise/items/f8e56c6d2d08eaf4a6a0
この記事に従ってdocker-composeをインストールする。
3. git のインストール(capistranoで使用する)
$ sudo yum install git
とコマンドを打つ。
終わりに
本来(きちんと世に送り出すもの)であれば、サブネットを パブリック・プライベート__にわけ、
・『パブリック』に__WEBサーバ
・『プライベート』に__APサーバ__・DBサーバ(APサーバはおそらく。)
という分け方をするべきなのだが、NATゲートウェイの設定やらセキュリティグループの設定やらで、めんどくさくなったので説明が長くなってしまうので、本シリーズの中では全て__パブリックサブネット__に収まる形で構築しました。