Skip to content

EC2 で DB サーバを起動する

EC2 インスタンスを使用して DB サーバを起動する。
DB サーバは、MariaDBを使用する。


この課題で作成するシステムの構成

EC2 を利用して2種類のデータベース, MariaDB(RDB)を起動します。
また、SSH ポートフォーワーディングを利用して DB サーバに接続します。


SSH ポートフォーワーディング

任意のポートへの通信を別のホストを経由して別のサーバのポートに転送する。


事前準備

CloudShell を起動する

CloudFormation のテンプレートファイルを CloudShell 上にダウンロードする

以下のコマンドを実行して、template.yaml を CloudShell 上にダウンロードする

curl https://raw.githubusercontent.com/cupperservice/aws-hands-on/main/docs/hands-on/02.EC2%E3%81%A7DB%E3%82%B5%E3%83%BC%E3%83%90%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B/cfn/template.yaml -o template.yaml

環境を初期化 (bastion サーバを作成する)

VPC サービスから VPC と Subnet の ID を確認して以下の VPC ID, Subnet ID に置き換えて実行

VPC_ID=VPC ID
SUBNET_ID=Subnet ID

CloudFormation の Stack を作成

aws cloudformation create-stack \
--stack-name initialize \
--template-body file://template.yaml \
--parameters ParameterKey=VPC,ParameterValue="$VPC_ID" \
ParameterKey=Subnet,ParameterValue="$SUBNET_ID"

MariaDB サーバ用の EC2 インスタンスを用意する

MariaDB サーバ用のセキュリティグループを作成する

  • VPC サービスに移動
  • 左のメニューから Security groups を選択
  • [Create Security Group] を押す
  • 以下の項目を入力
    • Security group name: db security group
    • Description: for db server
    • VPC: default
  • [Add Rule] を押して Inbound rules を追加
    • Type: SSH
    • Source: bastion security gotup
  • [Add Rule] を押して Inbound rules を追加
    • Type: Custom TCP
    • Port range: 3306
    • Source: bastion security group
  • [Create security group] を押す

EC2 インスタンスを作成する

  • EC2 サービスに移動
  • 左のメニューから instances を選択
  • [Launch instances] を押す
  • Name: Maria DB Server
  • AMI: Amazon Linux 2023 を使用する
  • Key pair: vockey を使用する
  • Network Settings で [Edit] を押す
    • Auto-assign public IP: Enable を選択する
  • Firewall (security groups): 1.で作成したセキュリティグループを選択する
  • [Launch instance] を押す

Maria DB をインストールする

CloudShell から Bastion サーバに SSH で接続する

IP=Bastion サーバの Public IP

eval $(ssh-agent)
ssh-add labsuser.pem
ssh -A ec2-user@"$IP"

Bastion サーバから MariaDB サーバに SSH で接続する

IP=MariaDB サーバの Private IP

ssh ec2-user@"$IP"

パッケージを最新に更新する

sudo dnf update -y

mariadb をインストール

sudo dnf install mariadb105-server

インストール結果の確認

以下のコマンドを実行してインストーすされたことを確認する

dnf info mariadb105

インストールが成功している場合は以下のように表示される

Amazon Linux 2023repository                                                                                                                                                       27 MB/s |  14MB     00:00    
Amazon Linux 2023 Kernel Livepatchrepository                                                                                                                                     522 kB/s | 156 kB     00:00    
Installed Packages
Name         : mariadb105
Epoch        : 3
Version      : 10.5.18
Release      : 1.amzn2023.0.1
Architecture : x86_64
Size         : 18 M
Source       : mariadb105-10.5.18-1.amzn2023.0.1.src.rpm
Repository   : @System
From repo    : amazonlinux
Summary      : A very fast and robust SQL database server
URL          : http://mariadb.org
License      : GPLv2 and LGPLv2
Description  : MariaDB is a community developed fork from MySQL - a multi-user,multi-threaded
            : SQL database server. It is a client/server implementation consisting of
            : a server daemon (mariadbd) and many different client programs and libraries.
            : The base package contains the standard MariaDB/MySQL client programs and
            : utilities.

DB サーバを起動

以下のコマンドを実行して DB サーバを起動する

sudo systemctl start mariadb

mariadb をセキュアな状態に設定

以下のコマンドを実行して mariadb のセキュリティを向上させる

sudo mysql_secure_installation

コマンドを実行すると各設定についてどのように処理するかを尋ねられるので以下のように入力する

 * Enter current password for root:  Enter
 * Switch to unix_socket authentication:  Enter
 * Change the root password? [Y/n] : Y を選択
   * root のパスワードを入力 (同じパスワードを2回)
 * Remove anonymous users? [Y/n] : Y を選択
 * Disallow root login remotely? [Y/n] : Y を選択
 * Remove test database and access to it? [Y/n] : Y を選択
 * Reload privilege tables now? [Y/n] : Y を選択

自動起動を有効化

以下のコマンドを実行して EC2 を再起動したときに自動的に mariadb を起動するようにする

sudo systemctl enable mariadb

MariaDB にリモートから接続できるようにする。

MariaDB はデフォルトではリモートから接続することができない。
リモートで接続できるようにセットアップする。

MariaDB サーバに SSH で接続する

CloudShell から Bastion サーバに接続する

IP=Bastion サーバの Public IP
eval $(ssh-agent)
ssh-add labsuser.pem
ssh -A ec2-user@"$IP"

Bastion サーバから MariaDB サーバに接続する

DB_IP=MariaDB サーバの Private IP
ssh ec2-user@"$DB_IP"

MariaDB の定義ファイルを編集する

リモートから接続できるように以下の定義ファイルを編集する

ファイル: /etc/my.cnf.d/mariadb-server.cnf

修正内容

修正前

#
# Allow server to accept connections on all interfaces.
#
#bind-address=0.0.0.0

修正後

#
# Allow server to accept connections on all interfaces.
#
bind-address=0.0.0.0

MariaDB を再起動する

以下のコマンドを実行して mariadb を再起動する

sudo systemctl restart mariadb

MariaDB に接続する

mysql -uroot -p を実行すると Enter password: と表示されるのでmariadb をセキュアな状態に設定で設定したパスワードを入力する

データベースとデータベースに接続するユーザーを作成

データベースを作成

create database `wordpress-db`;

データベースに接続するためのユーザーを作成

create user 'hjuser'@'%' identified by 'password00';
* ユーザーID: hjuser
* パスワード: password00

作成したユーザーにデータベース (wordpress-db) へのアクセス権限を付与

grant all privileges on `wordpress-db`.* to 'hjuser'@'%';

変更を有効にする

flush privileges;

MariaDB サーバ, Bastion サーバから抜ける

quit -> exit -> exit で CloudShell まで戻る


CloudShell から MariaDB に接続する

CloudShell から MariaDB に SSH トンネリングを作成する

BASTION_IP=Bastion サーバの Public IP
DB_IP=MariaDB サーバの Private IP
eval $(ssh-agent)
ssh-add labsuser.pem
ssh -A -N -L3306:"$DB_IP":3306 ec2-user@"$BASTION_IP"

新しいタブを開く

Actions -> New tab を選択

MariaDB に接続する

mysql -h127.0.0.1 -uhjuser -p wordpress-db