EC2でアプリを動かしてみた
はじめに
業務でインフラ周りはAWSをメインで使用しているが、そういえば王道のEC2を業務であまり触らないので学習がてら簡単なレスポンスを返すAPIをEC2にデプロイするところまで行おうと思う。
そもそもEC2とは
Amazon Lastic Compute Cloudの略で通称EC2と言われている。
Linux、Windouwsなどの仮想サーバーを作成することができるサービス。
サーバー単位のことを"インスタンス"という。
EC2の特徴
-
サーバーの構築時間を短縮することができる
-
インスタンスの立ち上げは、マネジメントコンソール、AWS CLI等を使用して立ち上げることができるので
-
サーバーを短い時間で構築することができる。
-
冗長化が簡単にできる
- 後述する関連サービスや仮想ネットワークをしようすることが簡単に冗長化することができる
-
スペックの変更が柔軟に行うことができる。
- マネジメントコンソール上で、メモリの増設を簡単に行うことができる(インスタンス自体のスペックをあげることはできなかったはず)
EC2で設定するもの(一部)
-
インスタンスタイプ
仮想サーバーの性能を設定 -
Amazonマシンイメージ(AMI)
使用するOSの選択 -
ネットワーク(VPCとサブネット)
仮想サーバーを設置するネットワークを設定 -
ストレージタイプ、容量
記載どおり仮想サーバーのストレージタイプと容量を決定する -
セキュリティグループ(仮想ファイアウォール)
仮想サーバーにアクセスできるポート番号を制御する設定。
EC2でできること
-
WEBやAPPサーバー
インスタンスにnginx等をインストールすることでWEBやAPPサーバーとしてしようすることができる。 -
踏み台サーバー
RDSにロール環境からアクセスする際に踏み台サーバーとして活用することができる -
プロキシサーバー
認証や認可用のプロキシサーバーとして使用することができる
上記のように様々な用途にEC2を使用することができる。
EC2の料金
基本的に従量課金体系だが、事前予約やスポット利用で安く利用することができる。
- リザーブドインスタンス、Savings Plans:長期利用を前提とした予約サービス
- スポットインスタンス:AWS上に起動している
関連サービス
-
EBS(ストレージ)
EC2インスタンスにアタッチして、データを保管することができるストレージサービス。 -
ロードバランサー(負荷分散)
負荷分散させる際に使用するサービス。
複数のインスタンスに適切な負荷が分散されるようにする仕組み。 -
Auto Scaling(冗長化)
インスタンスの負荷が高くなった際に自動的にインスタンス数を増減させることが出来るサービス。
不要になったインスタンスは自動的に停止、終了される設定が可能。
ハンズオン(EC2をマネジメントコンソールで起動しアクセスする)
ここまで、EC2について記載してきたが、実際にEC2を起動させてアクセスすることができるところまで行っていきたいと思う。
作成するのは、expressを使用した簡単なAPI
今回作成するシステム構成図
基本的なオーソドックスなインフラ構成だと思うが、費用の問題(筆者の懐が..)があり、以下の対応は見送ります。
- Route53を使用したDNS対応
- 証明書を発行し、HTTPS対応
- Auto Scallingを使用したEC2の冗長化
- RDSの障害対応
(上記の内容はいつか対応したい)
手順1 VPCの作成
作成する際は、public subnet * 2とprivate subnet * 2を作成するようにする。
他の設定項目は任意な値を設定。
手順2 EC2の作成
今回ELBを作成してリクエストの分散を行う為、EC2は2台立ち上げる。
ここで大切なのはネットワーク設定。2台とも作成したVPC内のpublic sunbet内にそれぞれ配置してpublic IPアドレスを有効かさせておく。
またセキュリティグループも22番(SSH)、80番(HTTP)を設定も忘れずに。
(ユーザーデータで動作確認用にインストールするNginxをインストールするコマンドを設定してもいいと思う)
EC2作成後は、動作確認がてらNginxをインストールして、DNS名からアクセスしてNginxの初期ページが表示されることを確認する。
手順3 ELBの作成
- ELBを作成する際は、まずどのAWSリソースを対象とするかターゲットを設定する必要がある為、ターゲットグループを作成する。
- ターゲットタイプはインスタンス
- VPCは作成したものを選択
- ヘルスチェックは、任意な値を選択
- 次にELBを作成していく。(今回はアプリのロードバランサーを作成する)
- VPCは作成したものを選択
- セキュリティグループは、EC2作成時に作成したものと同じものを選択する
- リスナとルーティングで上記作成したターゲットグループを選択する。
作成後は、ALBのDNS名にアクセスして、Nginxの初期ページが表示されていることを確認する。
(Nginxの初期ページに格EC2が、識別できる何か番号などをHTMLに書き込むと動作確認しやすい)
手順4 RDSの作成
-
DBサブネットグループの作成
-
RDSの作成
- Mysqlを選択
- 認証情報を入力
- 作成したVPCを選択
- 作成したDBサブネットグループを選択
- セキュリティグループは3306を開放する
- 他の項目は任意な値を設定 or 初期設定のままとする
-
RDS起動後は、作成したEC2からRDSにアクセスしてDBの内容を設定する
(DBeverなどのツールを使用すると楽かも)
手順5 EC2にアプリをデプロイする
- 作成したEC2にログインして、githubからプログラムをcloneする(gitをインストール必要がある)
- expressを起動するためにnodeをインストール&ライブラリをインストールする
- Nginxのプロキシを利用するために、nginx.confの中身を書き換える。
- アプリを立ち上げてALBのDNSにリクエストして動作確認を行う
まとめ
基本的なEC2構成でAPIをデプロイしてみたが、実際の業務ではセキュリティや障害対策を行う必要があり改善の余地はあると思うが、自分が作成したプログラムをデプロイできたのは少し自身に繋がったと思う。
今後もこのページは更新していこうと思う。
Discussion