0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

第1回 AWSに自動でテスト/デプロイしてくれるインフラの設定・構築(AWS構築)

Last updated at Posted at 2020-11-29

本シリーズ集

タイトル
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の作成方法を示していく

  1. AWSのサービスの(検索でも可能)VPCページにいく。
  2. 左側に表示されるサイドバーの『VPC』をクリック
  3. [VPCを作成]をクリック
  4. [名前タグ] に好きな名前を。
     [IPv4CIDRブロック]には、『10.0.0.0/16』と入力
     [IPv6 CIDR ブロック]は『なし
     [テナンシー]・[タグ]はデフォルトのままでOK
    スクリーンショット 2020-11-16 13.40.21.png
  5. [VPCの作成]をクリック

->作成完了
続いて、__サブネットを構築__していく

##2. サブネット構築

  1. ページはそのままで、サイドバーの[サブネット]をクリック
  2. 表示された画面で[サブネットを作成]をクリック
  3. [VPC ID]に、先程作成したVPCを紐付ける。
  4. また、その下のサブネットの設定画面では、
     [サブネット名]に『パブリックサブネット
     [アベイラビリティゾーン]に__任意の設定(覚えておく必要あり)__を
     [IPv4 CIDR ブロック] に 『10.0.1.0/24
    を入力
    スクリーンショット 2020-11-25 13.03.37.png
  5. [サブネットを作成]をクリック

-> サブネット作成終了

##3. ルートテーブル作成

 そのままの画面で、ルートテーブルを作成していく。

  1. サイドバーの__[ルートテーブル]__をクリック。

  2. 開かれる画面で__[ルートテーブルの作成]__をクリック。

  3. [名前タグ] に、__任意の名前__を入れ、
     [VPC] に、先程作成したVPCを選択し、
     [作成] をクリックして作成完了
    スクリーンショット 2020-11-25 13.51.25.png

##4. インターネットゲートウェイの作成
 そのまま作成したルートテーブルを編集する...前に、
__『インターネットゲートウェイの作成』__をする。
 これをしないと、サブネット内がインターネット上で通信できないままになってしまう。

  1. サイドバーの__[インターネットゲートウェイ]__をクリック
  2. 表示される画面で、__[インターネットゲートウェイの作成]__をクリック
  3. [名前タグ] に任意の名前をつけて、__[インターネットゲートウェイの作成]__をクリックして終了。

##5. ルートテーブル更新

  1. インターネットゲートウェイ作成後、また、__[ルートテーブル]__画面に戻る。

  2. ルートテーブル一覧で、『先程作成したルートテーブル』のチェックボックスにチェックを入れると、下側に『概要』、__『ルート』等が表示されるので、その『ルート』タブをクリックしたら表示される[ルートの編集]__をクリックする。

  3. ルーティングテーブルの編集ができる画面が表示されるので、[送信先]に『0.0.0.0/0』、__[ターゲット]__に、Internet Gateway(igw-xxxx) を選択する。スクリーンショット 2020-11-25 14.08.19.png

  4. [ルートの保存] をクリック。

-> ルートテーブル編集終了。

あとは、元のルートテーブル一覧の表示画面に戻るので、[サブネットの関連づけ] から、作成したサブネット(筆者は__パブリックサブネット__)に関連づければ、OK。

#WEBサーバ用EC2インスタンス作成方法
###EC2とは
 __EC2__は、一言で言うと、『仮想サーバ構築サービス』
 イメージとしては、『自分でサーバを立ててその中で好き勝手動かせますよー』て感じなやつ。
 AWSでは、EC2の一つ一つを『インスタンス』と呼ぶ。(他のCloudサービスはどうか知らんけど)

  1. サービスの__EC2__から__EC2の画面__へ行く

  2. サイドバーの__[インスタンス]__をクリック

  3. 表示された画面で、__[インスタンスを起動]__をクリック

  4. Amazon Linux 2 AMI (HVM), SSD Volume Type - ami-を選択

  5. [t2.micro](デフォルトで選択されている)を選択し、__[次のステップ:インスタンスの詳細の設定]__をクリック

  6. 遷移先の画面では、インスタンスの詳細設定を行う画面が表示されるので、
     __[ネットワーク]__に、先程作成したVPCを、
     __[サブネット]に、先程作成した『パブリックサブネット』を、
     [自動割り当てパブリックIP] は、『有効』を
    各々セットし、その他はデフォルトのままでOK。スクリーンショット 2020-11-16 13.56.22.png
     全て設定終わったら、
    [次のステップ:ストレージの追加]__をクリック

  7. 『ストレージの追加』画面 では、AMIに設定するサイズ等が選択できるが、ここは好みで(30GiBまでは無料)。

  8. 『(※)セキュリティグループの設定』画面 に遷移すると、セキュリティグループを設定する画面が出てくるので、
     __[新しいセキュリティグループを作成する]__にチェックをつけ、
     __[セキュリティグループ名]__に、『WEB-SG』と名付け、その内容は、全てのSSH、HTTPを通すように設定する。
    スクリーンショット 2020-11-16 14.02.39.png

  9. __[確認と作成]をクリック(もしかすると、セキュリティが甘い等の警告が出るかもしれないので、出たら無視してそのまま[起動]__をクリック)すると、モーダルが開かれる(下図)ので、そこで
    __[新しいキーペアの作成]を選択し、キーペア名に任意の名前をつけて[インスタンスの作成]__をクリック
    スクリーンショット 2020-11-25 13.37.36.png

-> インスタンス作成完了。

※ セキュリティグループ... ファイアウォールのような設定を行えるサービス。複数インスタンスに紐づけることができる。

EC2インスタンスへのアクセス方法

 ローカルのPCからターミナルでEC2インスタンスへアクセスする方法を示す。
 まず、EC2インスタンスの__パブリックIP__を確認する。
 確認方法は、EC2インスタンスの対象インスタンスにチェックマークをつけた際に表示される__『詳細』タブに表示される『パブリックIPv4アドレス』__の欄を確認する。

スクリーンショット 2020-11-16 14.59.23.png

 次に chownコマンドを使用してEC2インスタンス作成時にダウンロードした鍵の権限を変更する。

$ chmod 400 【鍵のPATH】

 これで(最低でも)作成者のみ 読み取りできるようにしておく。そして、

$ ssh -i 【鍵のPATH】 ec2-user@【IPアドレス】

でAWSにアクセスできるようになる。

パブリックIPを固定化する

 これで、終了したかと思いきや、AWSには思わぬ落とし穴がある。
 それは、__『インスタンスのパブリックIPは、起動毎に変更されてしまう』ということである。
 なので、これを固定化するために、
[Elastic IP]__を使用する。
 
####ElasticIPの設定方法

  1. EC2サービス画面のサイドバーから、[Elastic IP] をクリックする
  2. __[Elastic IP アドレスの割り当て]__をクリックする。
  3. 表示される画面で、全て設定はデフォルト(AmazonのUPv4アドレスプールにチェック)のまま__[割り当て]__をクリック
  4. 画面が切り替わるので、切り替わった先で、[アクション]-> __[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ゲートウェイの設定やらセキュリティグループの設定やらで、めんどくさくなったので説明が長くなってしまうので、本シリーズの中では全て__パブリックサブネット__に収まる形で構築しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?