AWSインフラ構築【デプロイ】/ 初めてのAWS忘備録②


前回の続き→AWSアカウント作成/ 初めてのAWS忘備録①

クラウドにアプリをデプロイする環境を作成していく。
まずはクラウド上に自分の作業スペースを作り、外部とのネットワークの設定を作る。
これからの作業はrootアカウントではなく、IAMユーザアカウントで進める。

リージョンの選択

クラウドサーバーを構築する、地域(リージョン)を指定する。
AWSは全世界で利用されており、各地域でホスティングされている。
画面右上のアカウント名の隣のプルダウンから「東京」を選択。

ホスティング
サーバーを借りること、ここではサーバーを利用されている(借りられている)という意味

タグの命名

タグとは
AWS リソースを識別および整理するためのメタデータとして使用される単語やフレーズ。
タグはキーと 1 つのオプションの値で構成されてる。

例えば EC2 が10台起動しているとし、どのEC2が自分のプロジェクトのものなのか一覧できると便利。そうしたい際に以下のようなタグ付けを行う。

Key Value
Name sample-vpc
Project project-1

初期段階で各リージョンごとでデフォルトのVPCなどが設定されているので、今回はそちらを利用する。
コンソール画面の検索窓から「VPC」を検索し進む。

・VPC
・サブネット(3つ)
・インターネットゲートウェイ
・ルートテーブル

上記それぞれNameタグが空になっているので、把握できるよう命名する。(例:subnet-1a など)

今回は下記のように命名。

#VPC
sample-vpc

#サブネット
subnet-1a
subnet-1c
subnet-1d
※アベイラビリティゾーンごとで命名

#インターネットゲートウェイ
sample-igw

#ルートテーブル
sample-rt

ルートテーブルをサブネットに紐付け

デフォルトで設定されているルートテーブル(sample-rt)をプライベートサブネット(subnet-1a, subnet-1c)と紐づける。

紐付けたいルートテーブルを選択し、「サブネットの関連付けを編集」から下記の2つのサブネットで紐付ける。

セキュリティグループの作成

VPC内の通信の許可/拒否の設定をするためにセキュリティグループを設定する。
今回はアプリケーションサーバーとデータベースの通信設定を作成していく。

コンソール画面の検索窓から「VPC」を検索し、左メニューの「セキュリティグループ」を選択。右上「セキュリティグループを作成」をクリック。
下記の設定でアプリサーバー接続用・データベース接続用の2つ作成する。

アプリサーバー接続用

#基本的な詳細
セキュリティグループ名:web-sg
説明:web-sg
VPC:sumple-vpc

#インバウンドルール(2つ)
1つ目
タイプ:HTTP
リソースタイプ(画面によってはタイプ):Anywhere-IPv4

2つ目
タイプ:ssh
リソースタイプ(画面によってはタイプ):Anywhere-IPv4

#アウトバウンドルール:そのまま

#タグ:なしでok
※今回はクラウドサービスでアプリを動かすこと目的なので、HTTPのみの設定になっている

データベース接続用

#基本的な詳細
セキュリティグループ名:db-sg
説明:db-sg
VPC:sample-vpc

#インバウンドルール
タイプ:MYSQL/Aurora
ソース:カスタム web-sg(先ほど作成したセキュリティグループ)

#アウトバウンドルール:そのまま

#タグ:なしでok

データベースはアプリサーバーからのアクセスのみ許可したいので、インバウンドルールはweb-sgのグループIDを指定。

アプリを動かすサーバーを作成

コンソール画面の検索から「EC2」を検索してEC2の画面へ進み、左メニュー内の「インスタンス」を選択。
右上の「インスタンスを起動」をクリックし、下記に従い設定する。

#Amazonマシンイメージ(AMI)
Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type(64ビット x86)

#インスタンスタイプの選択
t2.micro

#インスタンスの詳細の設定
インスタンス数:1
ネットワーク:sample-vpc
サブネット:subnet-1a

#ストレージの追加:デフォルト

#タグの追加
キー:Name
値:sample-web

#セキュリティグループの設定
セキュリティグループの割り当て:既存
セキュリティグループID:web-sg

最後に「起動」をクリックすると、キーペアの作成が出る。こちらはEC2にログインする際に必要なので忘れないようにしておく。

EC2にログイン

EC2へログインするために、ダウンロードしたキーペアを移動させる。
ダウンロードしたxxxxx.pem~/.sshに移動させる。

% mv ~/Downloads/xxxxx.pem ~/.ssh/xxxxx.pem

移動完了後は、キーへのアクセス権限を設定する。キーがある階層に移動し、下記のコマンドを打つ。

$ chmod 400 xxxx.pem

最後にsshログインのコマンドを取得する。
EC2のコンソール画面で作成したインスタンスを選択し、「接続」をクリック。
「SSHクライアント」タブをクリックすると、接続のコマンドが出るので、ターミナルからそのコマンドを入力。

ターミナルで下記のようになればOK

[ec2-user@... ~]$

ElasticIP紐づける

先ほど作成したEC2は停止して再度起動すると、パブリックIPが変わり、毎回sshログイン時は不便になるので、固定のIPを紐付ける。

EC2のダッシュボードの左メニューから「Elastic IP」に進み、右上の「Elastic IPアドレスの割り当て」から下記の設定で作成する。

ネットワークボーダーグループ:ap-northeast-1a
パブリックIPのアドレスプール:AmazonのIPv4アドレスプール

作成後、右上の「アクション」から「ElasticIPアドレスの関連付け」に進み、先ほど作成したEC2インスタンスに紐付け設定。
作成したEC2の概要内にElasticIPアドレスが表示されていればOK。

EC2の接続時間を伸ばす

私は上記の設定を行った後、EC2のSSHがすぐ切れたので、EC2側の設定変更で接続がすぐ切れないように変更した。

[ec2-user@... ~]$ sudo vi /etc/ssh/sshd_config

デフォルトではこうなっている。

#ClientAliveInterval 0
#ClientAliveCountMax 3

2時間は接続を保ちたいので、以下のように変更

ClientAliveInterval 60 #クライアントが生きているかチェックを60秒毎に行う
ClientAliveCountMax 120 #クライアントが生きているかチェックを最大120回カウントする

1分毎にチェックして、120回までは接続を解除しないことになる。
再起動すればこれで2時間接続出来るようになる。

DBサブネットグループの作成

コンソール画面の検索窓から「RDS」を検索し進む。
まずはDB用のサブネットグループを作成。左メニューの「サブネットグループ」を選択し、右上「DBサブネットグループを作成」をクリック。
下記の設定で作成。

#サブネットグループの詳細
名前:subnetgroup
説明:subnetgroup
VPC:sample-vpc

#サブネットの追加
アベイラビリティゾーン:ap-northeast-1a, ap-northeast-1c
サブネット:subnet-1a, subnet-1c

RDSインスタンスの作成

コンソール画面の検索窓から「RDS」を検索し進む。
左メニューの「データベース」を選択し、右上「データベースを作成」をクリック。
下記の設定で作成。

#データベースの作成方法:標準作成

#エンジンのオプション
エンジンのタイプ:MYSQL
エディション:MySQL Community
バージョン:5.7.xx(最新版)

#テンプレート:無料利用枠

#設定
DBインスタンス識別子:デフォルト(database-1)
マスターユーザー名:デフォルト(admin)
マスターパスワード:任意のもの ※ここでのユーザ名、パスワードは後ほどアプリ側に設定するので、控えておく。
DBインスタンスクラス:デフォルト
ストレージ:すべてデフォルト
可用性と耐久性:デフォルト

#接続
VPC:runteq-vpc
サブネットグループ:runteq-subnetgroup
パブリックアクセス:なし
VPCセキュリティグループ:既存の選択 db-sg
アベイラビリティゾーン:ap-northeast-1a
データベースポート:3306

#データベース認証:パスワード認証

#追加設定
最初のデータベース名:sample_db
その他はそのままでok

参考記事

AWS EC2のSSHがすぐ切れる時の対処方法