前回の続き→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