本シリーズ集
タイトル | |
---|---|
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. ルートテーブル作成
そのままの画面で、ルートテーブルを作成していく。
- サイドバーの[ルートテーブル]をクリック。
開かれる画面で[ルートテーブルの作成]をクリック。
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ゲートウェイの設定やらセキュリティグループの設定やらで、めんどくさくなったので説明が長くなってしまうので、本シリーズの中では全てパブリックサブネットに収まる形で構築しました。