13
15

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 5 years have passed since last update.

Amazon Web ServicesAdvent Calendar 2016

Day 4

AWSを避けていたPGがALBとEC2を利用してWEBアプリケーション環境を構築してみた

Last updated at Posted at 2016-12-04

初めに

最近流行りというわけではないですが、AWSをついに学びました。

自分はフロントのあれやこれやが好みで、インフラは避けて生きていたのですが

今回学ぶ機会があり、いろいろ調べて実際に構築してみたのでそれを書いていきたいと思います。

すごいですねAWS(小並感)

全体で3部構成の記事になります。

第1部 「AWSを避けていたPGがALBとEC2を利用してWEBアプリケーション環境を構築してみた」←今ここ

第2部 「LambdaとCloud WatchによるEC2の夜間停止」

第3部 「ALBによるパスルーティング」

前置き

0から始めるAWS入門:概要を基本的に参考にして構築をしております。

解釈や説明の誤りなど、コメント欄に記載していただけると幸いです。

構成図

自分が今回構築するのは下記のような環境です。

VPC内にEC2を構築し、ALBによるルーティング制御を行います。

AW_AWS.png

VPC

まず初めにVPCの構築をしていきたいと思います。

最近HOME画面が変わったのかわかりませんがHOME画面からVPCを選択。

AWS Management Console.jpeg

左のメニューから「Your VPCs」を選択して「Create VPC」ボタンをクリック。

スクリーンショット 2016-11-23 16.46.10.png

Create VPCというポップアップが出るので項目を埋めていきます。

スクリーンショット 2016-11-23 17.02.34.png
項目
Name Tag 適当に
CIDR block 10.0.0.0/16
tenancy Default

埋め終わったら「Yes,Create」をクリックして完了。

Internet Gateways

VPCはAWSにある独立した環境なのでこのままではインターネット等でアクセスができません。

そのためインターネットとVPCを繋げるInternet Gatewaysを作成します。

VPCの画面の左のメニューから「Internet Gateways」を選択し、「Create Internet Gateways」ボタンをクリック。

スクリーンショット 2016-11-23 17.22.05.png

Create Internet Gatewaysというポップアップが出るので項目を埋めていきます。

スクリーンショット 2016-11-23 17.23.44.png
項目 値 
Name Tag 適当に

埋め終わったら「Yes,Create」をクリックして完了。

その後、「Attach to VPC」ボタンをクリック。

スクリーンショット 2016-11-23 17.26.09.png

Attach to VPCポップアップが出るので項目を埋めていきます。

スクリーンショット 2016-11-23 17.27.26.png
項目
VPC 先程作成したVPC

埋め終わったら「Yes,Attach」をクリックして完了。

Route Tables

最後にRoute Tablesにルーティングの設定をして、インターネットの接続が完了します。

スクリーンショット 2016-11-26 19.50.39.png

VPCの画面の左のメニューから「Route Tables」を選択し、先程作成したVPCのRoute Tablesを選択し、下部に表示されるタブから「Routes」を選択し、「Edit」をクリックします。

スクリーンショット 2016-12-04 14.54.28.png

「Edit」をクリック後ルーティングの追加ができるため、項目を埋めていきます。

項目
Destination 0.0.0.0/0
Target 先程作成したInternet Gateways(補完で出るかと思います)

埋めたら「Save」をクリックして完了。

Subnet

VPCの構築が終わったら次にSubnetを作成します。

SubnetはALBで2つ紐付けるのが必須のため、Availability Zoneで分けて2つ作成します。

VPCの画面の左のメニューから「Subnets」を選択し、「Create Subnet」ボタンをクリック。

スクリーンショット 2016-11-23 17.05.02.png

Create Subnetというポップアップが出るので項目を埋めていきます。

スクリーンショット 2016-11-23 17.10.23.png

1つ目

項目
Name tag 適当に
VPC 先程作成したVPC
Availability Zone ap-northeast-1a
CIDR 10.0.0.0/24

2つ目

項目
Name tag 適当に
VPC 先程作成したVPC
Availability Zone ap-northeast-1c
CIDR 10.0.1.0/24

埋め終わったら「Yes,Create」をクリックして完了。

EC2

VPCとSubnetの作成が終わったらいよいよEC2を作成します。

HOME画面からEC2を選択します。

スクリーンショット 2016-11-27 23.25.25.png

左のメニューから「Instances」を選択して「Launch Instance」をクリックします。

スクリーンショット 2016-11-27 23.29.33.png

Step 1: Choose an Amazon Machine Image (AMI)

Step 1でOSを選択します。

Amazon Linuxの右側の「Select」ボタンをクリック。

スクリーンショット 2016-11-27 23.31.23.png

Step 2: Choose an Instance Type

次にStep 2としてインスタンスタイプを選択します。

デフォルトでチェックがついていると思いますが、t2.microの左側にチェックをいれ右下の「Next: Configure Instance Details」をクリック。

スクリーンショット 2016-11-27 23.34.01.png

Step 3: Configure Instance Details

次にStep 3としてEC2の詳細設定をしていきます。

下記項目と値を埋めていきます。

項目
Number of instances 1
Purchasing option オフ
Network 先程作成したVPC
Subnet 先程作成したSubnet
Auto-assign Public IP Enable
IAM role None
Shutdown behavior Stop
Enable termination protection オフ
Monitoring オフ
Tenancy Shared

下部のNetwork interfacesやAdvanced Detailsはそのままで右下の「Next: Add Storage」をクリック。

スクリーンショット 2016-11-27 23.45.48.png

Step 4: Add Storage

次にStep 4としてストレージを設定します。

下記項目と値を埋めていきます。

SizeもVolume Typeもデフォルトのまま右下の「Next: Add Tags」をクリック。

項目
Size (GiB) 8
Volume Type General Purpose(SSD)
スクリーンショット 2016-11-28 0.13.28.png

Step 5: Add Tags

次にStep 5としてタグを指定します。

KeyはデフォルトのままNameにして、Valueにわかりやすいインスタンス名を入力して右下の「Next: Configure Security Group」をクリック。

項目
Key Name
Value 適当に
スクリーンショット 2016-11-28 21.47.44.png

Step 6: Configure Security Group

次にセキュリティグループの設定をします。

今回EC2はALBからのみHTTPアクセスを受け付け、インターネット経由で直接アクセスされた場合はブロックするよう設定していきます。

また、SSHは自分のPCからのみ受け付けるよう設定します。

デフォルトではルールは一つだけのため「Add Rule」をクリックしてルールを増やします。

入力したら右下の「Review and Launch」をクリック。

※開発者がテストのため直接HTTPでアクセスしたい場合はHTTPのルールをMY IPに変更してください

SSH

項目
Type SSH
Protocol TCP
Port Range 22
Sorce My IP (自動でIPが設定されます)

HTTP

項目
Type HTTP
Protocol TCP
Port Range 80
Sorce Custom (10.0.0.0/16)
スクリーンショット 2016-11-28 22.08.56.png

Step 7: Review Instance Launch

設定の確認をして、右下の「Launch」をクリック。

※画像は各タブを全て閉じています。

スクリーンショット 2016-11-28 22.24.44.png

公開鍵、秘密鍵

最後にEC2のSSH接続のための公開鍵、秘密鍵の設定をします。

「Create a new key pair」を選択して新しい公開鍵、秘密鍵を作成します。

「Key pair name」に適当に名前を入力して「Download Key Pair」をクリックして、秘密鍵をダウンロードしてください。

秘密鍵は失くすと再発行はできないため、絶対に失くさないでください。

秘密鍵をダウンロードしたら「Launch Instances」をクリックして完了です。

スクリーンショット 2016-11-28 22.34.35.png

SSH

インスタンスはEC2の左のメニューのInstancesから一覧で見れます。

作成したEC2を選択して「Description」タブで詳細な情報が見れます。

SSHに必要なIPは右下の「Public IP」に記載されています。

スクリーンショット 2016-11-28 23.08.56.png

SSHは秘密鍵があるディレクトリに移動して下記コマンドを叩きます。

ssh ec2-user@【EC2のIP】 -i hoge.pem

初回時は「Are you sure you want to continue connecting (yes/no)?」と聞かれるため「yes」と入力して、SSH接続をします。

※「WARNING: UNPROTECTED PRIVATE KEY FILE!」と聞かれたら「sudo」をつけてSSHコマンドを叩いてみてください。

無事アクセスできたら、nginxをインストールして実際にEC2が起動しているのをブラウザからテストします。(テストのためセキュリティグループのHTTPにMy IPを付与している場合)

sudo yum install -y nginx
sudo /etc/init.d/nginx start

インストールして、起動したらブラウザにEC2のIPを入力して下記画面が出たらテスト完了です。

スクリーンショット 2016-11-28 23.30.33.png

ALB

EC2も作成できたので次はALBを構築していきます。

ALBはApplication Load Balancerと呼ばれ最近発表された新しい機能です。

ELBと比べ、L7の機能が強化されています(HTTP2やWeb Socketに対応していたり、URLのパスによるルーティングを実装していたり)

ALBはELBと違ってロードバランサーにEC2を紐付けるのではなく、EC2をターゲットグループというグループでグループ化して、ターゲットグループをロードバランサーに紐付けます。

そのため、まずはターゲットグループを作成していきます。

Target Group

EC2の左のメニューから「Target Group」を選択し、「Create Target group」をクリック。

スクリーンショット 2016-11-28 23.42.18.png

Create target groupというポップアップが出るので項目を埋めていきます。

Health check settingsとAdvanced health check settingsはそのままで「Create」をクリックして完了です。

項目
Target group name 適当に
Protocol TCP
Port 80
VPC 先程作成したVPC
スクリーンショット 2016-12-04 15.03.41.png

ターゲットグループを作成したらターゲットグループにEC2を紐付けます。

ターゲットグループを選択してTargetsタブから「Edit」をクリック。

スクリーンショット 2016-12-04 15.05.15.png

Register and deregister instancesポップアップが出ます。

上部リストには現在紐付いているEC2の一覧、下部リストには現在起動してるEC2の一覧が表示されます。

スクリーンショット 2016-12-04 15.08.17.png

下部リストから紐付けるEC2を選択して「Add to registerd」をクリックします。(下記画像はAdd to registerdクリック後)

EC2を紐付けたら右下の「Save」をクリックして完了です。

スクリーンショット 2016-12-04 15.10.28.png

ALB

最後にALBを作成してALBにターゲットグループを紐付けて環境構築は完了です。

EC2の左のメニューから「Load Balancers」を選択し、「Create Load Balancer」をクリック。

スクリーンショット 2016-12-04 15.14.19.png

ALBかELB(Classic Load Balancer)のどちらか聞かれるのでALBを選択して「Continue」をクリック(デフォルトでALBが選択されていると思います)

スクリーンショット 2016-12-04 15.15.43.png

Step 1: Configure Load Balancer

まず、NameとSchemeを埋めます。

項目
Name 適当に
Scheme internet-facing

ListenersはHTTPを選択します。

項目
Load Balancer Protocol HTTP
Load Balancer Port 80
スクリーンショット 2016-12-04 15.19.28.png

Availability Zonesはまず、先程作成したVPCを選択します。

項目
VPC 先ほど作成したVPC

VPCを選択すると、Available subnetsに先ほど作成したSubnetが2つ表示されます。

subnetの左側の「+」アイコンをクリックしてサブネットをSelected subnetsに移動させます。

スクリーンショット 2016-12-04 15.22.51.png

移動後

スクリーンショット 2016-12-04 15.24.57.png

移動させたら右下の「Next: Configure Security Settings」をクリック。

Step 2: Configure Security Settings

ここはListenersでHTTPSを選択した際の証明書を設置するところです。

今回はHTTPを選択しているので何もせず右下の「Next: Configure Security Groups」をクリック。

スクリーンショット 2016-12-04 15.27.33.png

Step 3: Configure Security Groups

次にALB用のセキュリティグループを設定します。

今回はテストのため自分のIPのみ許可します。(Anywhere 0.0.0.0/0で誰からも受け付けたり良しなに変えてください)

項目
Type HTTP
Protocol TCP
Port Range 80
Sorce My IP (自動でIPが設定されます)

作成したら右下の「Next: Configure Routing」をクリック。

スクリーンショット 2016-12-04 15.31.25.png

Step 4: Configure Routing

次にALBにターゲットグループを紐付けます。

項目
Target group Existing target group
Name 先程作成したターゲットグループ
Protocol HTTP
Port 80

Health checksとAdvanced health check settingsはそのままで右下の「Next: Register Targets」をクリック。

スクリーンショット 2016-12-04 15.33.07.png

Step 5: Register Targets

ここでは登録されたEC2の一覧が表示されます。

ターゲットグループに登録されているEC2が表示されているのを確認したら右下の「Next: Review」をクリック。

スクリーンショット 2016-12-04 15.36.56.png

Step 6: Review

最後に設定の確認をして、右下の「Create」をクリックしてALBの作成は完了です。

スクリーンショット 2016-12-04 15.38.07.png

確認

ALBのStateがactiveになっているのを確認したらALBのDescriptionタブのDNS nameをブラウザから叩けば先程作成したEC2にアクセスにでき、nginxのwelcomeページが表示されると思います。

スクリーンショット 2016-12-04 15.45.00.png

最後に

長くなりましたがこれで、基本的なWEBアプリケーション環境の構築は完了です。

まだ、サーバー構成などの知識はないですが、この環境にSSHの踏み台としてEC2を立ち上げたり、現状ALBがあまり役に立っていないのでターゲットグループに2つ目のEC2を紐付けたりいろいろやれることはありそうだなと実感しました。

次回はLambdaによるEC2の夜間停止を書いていきたいと思います〜。

※EC2やALBは起動していると料金が発生するので立ち上げたEC2は停止し、ALBは削除してください

13
15
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
13
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?