LoginSignup
4
12

More than 5 years have passed since last update.

一般的なWEBアプリケーションの為のAWS構築(テスト編)

Last updated at Posted at 2018-01-06

一般的なWEBアプリケーションの為のAWS構築

一般的なWEBアプリケーション用のシステムをAWSに構築する手順を記載します。管理・NAT以外は冗長構成とします。

イメージはこんな感じです。
スクリーンショット 2018-01-06 22.57.51.png

※今回はテスト用の環境でコスト削減の為autoscalig、rdsのマルチはしません。次の記事にて紹介します。

VPC

まず、全ての元となるVPCを作成します。
スクリーンショット 2018-01-06 16.21.53.png

VPCのネットワークを設定します。
スクリーンショット 2018-01-06 11.52.22.png

作成できると一覧に表示されるので確認してください。
スクリーンショット 2018-01-06 16.25.23.png

サブネット

サブネットをそれぞれの役割に応じて作成します。
全て先程作成したVPCに紐付けていきます。

  • hoge_nat_aza:NAT・SSH接続をする管理用のサブネット
  • hoge_frontend_aza:WEB接続を受け付けるサブネット(AZ A)
  • hoge_frontend_azc:WEB接続を受け付けるサブネット(AZ C)
  • hoge_application_aza:アプリケーションサーバのサブネット(AZ A)
  • hoge_application_azc:アプリケーションサーバのサブネット(AZ A)

サブネットは下記ボタンより作成していきます。
スクリーンショット 2018-01-06 16.33.02.png

NAT・Manage用

スクリーンショット 2018-01-06 16.37.34.png

フロントエンドAZ-A用

スクリーンショット 2018-01-06 17.11.15.png

フロントエンドAZ-C用

スクリーンショット 2018-01-06 17.15.32.png

アプリケーションAZ-A用

スクリーンショット 2018-01-06 17.16.26.png

アプリケーションAZ-C用

スクリーンショット 2018-01-06 17.17.18.png

セキュリティグループ

それぞれのインスタンス・RDBで使用するセキュリティグループを作成していきます。
下記の点に注意します。

  • NAT・Manage用は全てのIPからのSSH,HTTPSに関してインバウンドを許可します。
  • フロントエンドは特定のIPからのHTTPSに関してインバウンドを許可します。
  • アプリケーションはmanageからのSSH,フロントエンドからの8080に関してインバウンドを許可します。(springbootなので。任意のポートに変更ください。)
  • RDBはアプリケーションからの5432(postgresqlの場合)に関してインバウンドを許可します。

セキュリティグループは下記ボタンを押下し作成していきます。
スクリーンショット 2018-01-06 17.20.34.png

NAT・Manage用

スクリーンショット 2018-01-06 17.23.07.png

作成後の一覧より作成したセキュリティグループを選択し、インバウンドタブでルールを編集します。
SSHについては22以外のポートにEC2のSSHを設定後、修正します。
スクリーンショット 2018-01-06 17.24.54.png

フロントエンド用

スクリーンショット 2018-01-06 17.27.02.png

作成後の一覧より作成したセキュリティグループを選択し、インバウンドタブでルールを編集します。
スクリーンショット 2018-01-06 17.30.06.png
※現在はソースに0.0.0.0/0(全てという意味)を入力していますが任意のIPに後で変更します。

アプリケーション用

スクリーンショット 2018-01-06 17.31.11.png

作成後の一覧より作成したセキュリティグループを選択し、インバウンドタブでルールを編集します。
frontendからの8080からの通信とmanageからのssh接続を許可します。
ソースに関してはセキュリティグループを指定することが出来ますので先程作成しfrontend・nat用のセキュリティグループを指定します。
スクリーンショット 2018-01-06 17.32.26.png

RDB用

スクリーンショット 2018-01-06 17.39.50.png

作成後の一覧より作成したセキュリティグループを選択し、インバウンドタブでルールを編集します。
applicationからの5432の通信を許可します。
スクリーンショット 2018-01-06 17.41.19.png

インターネットゲートウェイ

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

インターネットに接続するためのゲートウェイを作成します。
スクリーンショット 2018-01-04 22.50.07.png

スクリーンショット 2018-01-06 17.42.30.png

インターネットゲートウェイのアタッチ

先程作成したインターネットゲートウェイを選択し、VPCにアタッチします。
スクリーンショット 2018-01-06 17.43.36.png
スクリーンショット 2018-01-06 18.00.15.png

ルートテーブル

デフォルトで作成されるメインのルートテーブルはネットワーク内のみなのでインターネットに接続する用のルートテーブルを作成します。
スクリーンショット 2018-01-06 18.02.16.png

スクリーンショット 2018-01-06 18.06.12.png

ルートの設定に「0.0.0.0/0」と先ほど作ったigwを紐付けた物を追加します。
スクリーンショット 2018-01-06 18.07.58.png

ルートテーブルとサブネットの紐付け

インターネットに紐付けたいサブネットに先程作成したルートテーブルを紐付けていきます。
(今回の場合はフロントエンドとNATのサブネット)
スクリーンショット 2018-01-06 18.11.14.png

紐付けたいサブネットを選択します。
スクリーンショット 2018-01-06 18.13.03.png

NAT・Manage用のEC2作成

EC2の作成をします。
スクリーンショット 2018-01-05 12.26.07.png

NAT用のAMIを選択します。
スクリーンショット 2018-01-06 8.11.27.png

t2.microを選択します。
スクリーンショット 2018-01-05 12.37.27.png

NAT用のサブネットに紐付けます。
スクリーンショット 2018-01-06 18.18.33.png

容量を20Gにします。
スクリーンショット 2018-01-06 18.19.59.png

NAT用のセキュリティグループを選びます。
スクリーンショット 2018-01-06 18.21.13.png

キーペアの設定をします。SSHのキーになります。今回は既に作成した物を使用します。
スクリーンショット 2018-01-05 13.11.58.png

NAT用にソース宛先チェックを無効にします。
スクリーンショット 2018-01-06 20.53.33.png

スクリーンショット 2018-01-06 20.53.41.png

セキュリティルールを変更します。NATを使用するセキュリティゾーンからのインバウンドを許可します。ソースにセキュリティゾーンを指定します。
スクリーンショット 2018-01-06 21.07.53.png

ElasticIPを作成したインスタンスに紐付けます。
スクリーンショット 2018-01-05 15.27.14.png

割り当てを押下してIPアドレスを発行します。
スクリーンショット 2018-01-05 15.28.13.png

アドレスの関連付けよりインスタンスと紐付けます。
スクリーンショット 2018-01-06 22.48.42.png

先程作成したNAT用インスタンスとElasticIPを紐付けます。
スクリーンショット 2018-01-06 18.29.38.png

これで作成したインスタンスにSSHで接続できるはずです。

NAT・Manage用のSSHのポート変更

SSHが22のままだと大量に攻撃が来るので変更しておきましょう。
(鍵形式なのでまず大丈夫ですが、気持ちがわるいので。。)

/etc/ssh/sshd_config
#Port 22
Port 8022

のように編集し、

sudo service sshd restart

で設定を反映してください。port22で新規セッションを開けなくなっているはずです。
忘れずにセキュリティグループもSSHを22から新しいポートに変更しておきましょう。

スクリーンショット 2018-01-05 16.22.18.png

フォーワード用のユーザを作成します

セキュリティ的にまずいのでフォーワード専用のユーザを作成します。

groupadd -g 20000 forwarder
useradd -m -g forwarder -s /sbin/nologin forwarder
cd /home/forwarder/
mkdir .ssh
chown forwarder:forwarder .ssh/
chmod 700 .ssh/
cd .ssh/
ssh-keygen -t rsa -b 4096 -f id_rsa
chown forwarder:forwarder id_rsa*
chmod 600 id_rsa*
cat id_rsa.pub > authorized_keys
chmod 600 authorized_keys
chown forwarder:forwarder authorized_keys

下記を追加します。

/etc/ssh/sshd_config
Match Group forwarder
        AllowTcpForwarding yes
        GatewayPorts       yes
        AllowAgentForwarding no
        ForceCommand echo 'This account can only be used for forward'

アプリケーション用のEC2作成

EC2の作成をします。
スクリーンショット 2018-01-05 8.43.16.png

Amazon Linux2を選択します。
スクリーンショット 2018-01-05 8.46.39.png

m4Largeを選択しインスタンスの詳細の設定を押下します。
スクリーンショット 2018-01-05 8.48.54.png

VPCとサブネット、その他調整したい物を設定します。
スクリーンショット 2018-01-06 21.13.03.png

ディスク容量を今回は20Gで設定します。
スクリーンショット 2018-01-06 21.14.30.png

セキュリティグループに先程作成したアプリケーション用の物を割り当てます。
スクリーンショット 2018-01-06 21.15.04.png

キーペアの設定をします。SSHのキーになります。今回は既に作成した物を使用します。
スクリーンショット 2018-01-05 9.06.37.png

もう1台も同じようにAZ-Cに作成します。
作成後、わかりやすいように名前をつけておきます。
スクリーンショット 2018-01-06 21.19.53.png

NATの使用

NATを使用する為にNATを使用したルートテーブルを作成します。
スクリーンショット 2018-01-06 21.22.39.png

ルートに「0.0.0.0/0」宛の通信のターゲットを先程作成したNATインスタンスを指定します。
スクリーンショット 2018-01-06 21.23.46.png

サブネットに作成したルートテーブルを紐付けます。
スクリーンショット 2018-01-06 21.24.29.png

NATを使用したい(今回はapplication)サブネットにルートを適用します。
スクリーンショット 2018-01-06 21.28.04.png

ELBの構築

ロードバランサーを構築します。
スクリーンショット 2018-01-06 21.35.40.png

スクリーンショット 2018-01-06 21.36.47.png

スクリーンショット 2018-01-06 21.38.12.png

ELBを配置するアベイラビリティーゾーンとサブネットを選択します。
スクリーンショット 2018-01-06 21.41.23.png

HTTPSを使用するのでACMにアップしておいた証明書を使用します。
スクリーンショット 2018-01-06 21.46.59.png

スクリーンショット 2018-01-06 21.51.18.png

スクリーンショット 2018-01-06 21.54.03.png

スクリーンショット 2018-01-06 21.54.46.png

以上でELBが作成されます。
使用時はDNSにて対象ドメインの対象ホストにELBのFQDNをCNAMEで登録します。
試しにapacheを8080で立ち上げて、テストページが表示されれば成功です。
スクリーンショット 2018-01-06 22.26.22.png

RDBの構築

RDBを構築します。
スクリーンショット 2018-01-06 22.28.01.png

スクリーンショット 2018-01-06 22.30.02.png

スクリーンショット 2018-01-06 22.30.50.png

スクリーンショット 2018-01-06 22.31.58.png

スクリーンショット 2018-01-06 22.34.34.png

スクリーンショット 2018-01-06 22.36.20.png

以上で終了です。

おまけ

踏み台を経由してapplicationサーバからDBにアクセスする場合、sshのトンネルを使用します。

Macの場合
ssh -t -L 5432:RDSのエンドポイント:5432 forwarder@踏み台のIP -i 秘密鍵のパス -p 8022 -o "ServerAliveInterval 60" -o "ExitOnForwardFailure yes" -o "TCPKeepAlive no" -N -f
4
12
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
4
12