Open38

AWS スケーラブルウェブサイト構築(EC2(MySQL)+ELB+VPC)

aibizaibiz

VPCの作成をします。
作成したい構成は、以下の通り。

AWSコンソールにログインします。
東京リージョンを選択する。
VPCサービスを表示
VPCの作成画面で上記の構成を設定します。



プレビュー

aibizaibiz

EC2インスタンスをパブリックサブネット-1aに作成

EC2サービス画面を表示し、
インスタンスを起動ボタンを押します。
以下の設定をします。






以下はうまく動かないから不要

aibizaibiz

ELBを作る

まず、セキュリティグループを作成する。
以下の設定をします。

aibizaibiz

ターゲットグループを作成する。
ロードバランサーにEC2インスタンスを紐付ける
EC2画面の左ペイン
ロードバランシング > ターゲットグループを選択する

aibizaibiz

ターゲットグループが作成される。

aibizaibiz

ロードバランサーを作る。
EC2画面の左ペイン
ロードバランシング > ロードバランサーを選択する

aibizaibiz

ロードバランサータイプで
Application Load Balancer で作成する。

aibizaibiz

ロードバランサーが作成されました。

aibizaibiz

作成したインスタンスにElastic IPアドレスを割り当てました。

aibizaibiz

EC2にアクセスします。
EC2インスタンス作成時に指定した、
キーペアの秘密鍵のおいてあるローカルの.sshフォルダに移動
アクセス権の変更

chmod 400 aws_ssh02.pem

その後、sshでec2にアクセス

ssh -i "aws_ssh02.pem" ec2-user@ec2-35-73-143-1.ap-northeast-1.compute.amazonaws.com

上記の接続コマンドは、下記の場所で確認できます。

aibizaibiz

EC2にsshで接続
/home/ec2-user
必要なパッケージをインストール

sudo dnf install wget php-mysqlnd httpd php-fpm php-mysqli mariadb105-server php-json php php-devel -y

結果

105-server php-json php php-devel -y
Last metadata expiration check: 1:57:04 ago on Mon Jun 26 02:21:55 2023.
Package wget-1.21.3-1.amzn2023.0.3.x86_64 is already installed.
Dependencies resolved.
=============================================================================================
 Package                            Arch   Version                         Repository   Size
=============================================================================================
Installing:
 httpd                              x86_64 2.4.56-1.amzn2023               amazonlinux  48 k
 mariadb105-server                  x86_64 3:10.5.18-1.amzn2023.0.1        amazonlinux  10 M
 php8.1                             x86_64 8.1.16-1.amzn2023.0.1           amazonlinux  14 k
 php8.1-devel                       x86_64 8.1.16-1.amzn2023.0.1           amazonlinux 688 k
 php8.1-fpm                         x86_64 8.1.16-1.amzn2023.0.1           amazonlinux 1.8 M
 php8.1-mysqlnd                     x86_64 8.1.16-1.amzn2023.0.1           amazonlinux 151 k
Installing dependencies:
 annobin-docs                       noarch 10.93-1.amzn2023.0.1            amazonlinux  92 k
 annobin-plugin-gcc                 x86_64 10.93-1.amzn2023.0.1            amazonlinux 887 k
 apr                                x86_64 1.7.2-2.amzn2023.0.2            amazonlinux 129 k
 apr-util                           x86_64 1.6.3-1.amzn2023.0.1            amazonlinux  98 k
 autoconf                           noarch 2.69-36.amzn2023.0.3            amazonlinux 666 k
 automake                           noarch 1.16.5-9.amzn2023.0.3           amazonlinux 677 k
 cmake-filesystem                   x86_64 3.22.2-1.amzn2023.0.4           amazonlinux  16 k
 cpp                                x86_64 11.3.1-4.amzn2023.0.3           amazonlinux  10 M
 emacs-filesystem                   noarch 1:28.2-3.amzn2023.0.6           amazonlinux 9.5 k
 gc                                 x86_64 8.0.4-5.amzn2023.0.2            amazonlinux 105 k
 gcc                                x86_64 11.3.1-4.amzn2023.0.3           amazonlinux  32 M
 gcc-c++                            x86_64 11.3.1-4.amzn2023.0.3           amazonlinux  12 M
 generic-logos-httpd                noarch 18.0.0-12.amzn2023.0.3          amazonlinux  19 k
 glibc-devel                        x86_64 2.34-52.amzn2023.0.2            amazonlinux  48 k
 glibc-headers-x86                  noarch 2.34-52.amzn2023.0.2            amazonlinux 448 k
 guile22                            x86_64 2.2.7-2.amzn2023.0.2            amazonlinux 6.4 M
 httpd-core                         x86_64 2.4.56-1.amzn2023               amazonlinux 1.4 M
 httpd-filesystem                   noarch 2.4.56-1.amzn2023               amazonlinux  15 k
 httpd-tools                        x86_64 2.4.56-1.amzn2023               amazonlinux  82 k
 kernel-headers                     x86_64 6.1.29-50.88.amzn2023           amazonlinux 1.4 M
 keyutils-libs-devel                x86_64 1.6.3-1.amzn2023                amazonlinux  55 k
 krb5-devel                         x86_64 1.20.1-8.amzn2023.0.2           amazonlinux 136 k
 libbrotli                          x86_64 1.0.9-4.amzn2023.0.2            amazonlinux 315 k
 libcom_err-devel                   x86_64 1.46.5-2.amzn2023.0.2           amazonlinux  17 k
 libkadm5                           x86_64 1.20.1-8.amzn2023.0.2           amazonlinux  81 k
 libmpc                             x86_64 1.2.1-2.amzn2023.0.2            amazonlinux  62 k
 libselinux-devel                   x86_64 3.4-5.amzn2023.0.2              amazonlinux 115 k
 libsepol-devel                     x86_64 3.4-3.amzn2023.0.3              amazonlinux  42 k
 libstdc++-devel                    x86_64 11.3.1-4.amzn2023.0.3           amazonlinux 2.2 M
 libtool                            x86_64 2.4.7-1.amzn2023.0.3            amazonlinux 596 k
 libtool-ltdl                       x86_64 2.4.7-1.amzn2023.0.3            amazonlinux  38 k
 libverto-devel                     x86_64 0.3.2-1.amzn2023.0.2            amazonlinux  15 k
 libxcrypt-devel                    x86_64 4.4.33-7.amzn2023               amazonlinux  32 k
 libxml2-devel                      x86_64 2.10.4-1.amzn2023.0.1           amazonlinux 500 k
 libxslt                            x86_64 1.1.34-5.amzn2023.0.2           amazonlinux 241 k
 m4                                 x86_64 1.4.19-2.amzn2023.0.2           amazonlinux 296 k
 mailcap                            noarch 2.1.49-3.amzn2023.0.3           amazonlinux  33 k
 make                               x86_64 1:4.3-5.amzn2023.0.2            amazonlinux 534 k
 mariadb-connector-c                x86_64 3.1.13-1.amzn2023.0.3           amazonlinux 196 k
 mariadb-connector-c-config         noarch 3.1.13-1.amzn2023.0.3           amazonlinux 9.2 k
 mariadb105                         x86_64 3:10.5.18-1.amzn2023.0.1        amazonlinux 1.6 M
 mariadb105-common                  x86_64 3:10.5.18-1.amzn2023.0.1        amazonlinux  31 k
 mariadb105-errmsg                  x86_64 3:10.5.18-1.amzn2023.0.1        amazonlinux 215 k
 mysql-selinux                      noarch 1.0.4-2.amzn2023.0.3            amazonlinux  36 k
 nginx-filesystem                   noarch 1:1.24.0-1.amzn2023.0.1         amazonlinux 9.0 k
 openssl-devel                      x86_64 1:3.0.8-1.amzn2023.0.2          amazonlinux 3.0 M
 pcre2-devel                        x86_64 10.40-1.amzn2023.0.2            amazonlinux 474 k
 pcre2-utf16                        x86_64 10.40-1.amzn2023.0.2            amazonlinux 217 k
 pcre2-utf32                        x86_64 10.40-1.amzn2023.0.2            amazonlinux 206 k
 perl-B                             x86_64 1.80-477.amzn2023.0.4           amazonlinux 180 k
 perl-DBD-MariaDB                   x86_64 1.22-1.amzn2023.0.4             amazonlinux 153 k
 perl-DBI                           x86_64 1.643-7.amzn2023.0.3            amazonlinux 700 k
 perl-Data-Dumper                   x86_64 2.174-460.amzn2023.0.2          amazonlinux  55 k
 perl-File-Compare                  noarch 1.100.600-477.amzn2023.0.4      amazonlinux  14 k
 perl-File-Copy                     noarch 2.34-477.amzn2023.0.4           amazonlinux  21 k
 perl-File-Find                     noarch 1.37-477.amzn2023.0.4           amazonlinux  26 k
 perl-FileHandle                    noarch 2.03-477.amzn2023.0.4           amazonlinux  16 k
 perl-Math-BigInt                   noarch 1:1.9998.18-458.amzn2023.0.2    amazonlinux 189 k
 perl-Math-Complex                  noarch 1.59-477.amzn2023.0.4           amazonlinux  47 k
 perl-Sys-Hostname                  x86_64 1.23-477.amzn2023.0.4           amazonlinux  18 k
 perl-Thread-Queue                  noarch 3.14-458.amzn2023.0.2           amazonlinux  22 k
 perl-base                          noarch 2.27-477.amzn2023.0.4           amazonlinux  17 k
 perl-threads                       x86_64 1:2.25-458.amzn2023.0.3         amazonlinux  58 k
 perl-threads-shared                x86_64 1.61-458.amzn2023.0.2           amazonlinux  44 k
 php8.1-cli                         x86_64 8.1.16-1.amzn2023.0.1           amazonlinux 3.5 M
 php8.1-common                      x86_64 8.1.16-1.amzn2023.0.1           amazonlinux 676 k
 php8.1-pdo                         x86_64 8.1.16-1.amzn2023.0.1           amazonlinux  88 k
 xz-devel                           x86_64 5.2.5-9.amzn2023.0.2            amazonlinux  53 k
 zlib-devel                         x86_64 1.2.11-33.amzn2023.0.4          amazonlinux  45 k
Installing weak dependencies:
 apr-util-openssl                   x86_64 1.6.3-1.amzn2023.0.1            amazonlinux  17 k
 mariadb105-backup                  x86_64 3:10.5.18-1.amzn2023.0.1        amazonlinux 6.2 M
 mariadb105-cracklib-password-check x86_64 3:10.5.18-1.amzn2023.0.1        amazonlinux  16 k
 mariadb105-gssapi-server           x86_64 3:10.5.18-1.amzn2023.0.1        amazonlinux  18 k
 mariadb105-server-utils            x86_64 3:10.5.18-1.amzn2023.0.1        amazonlinux 216 k
 mod_http2                          x86_64 2.0.11-2.amzn2023               amazonlinux 150 k
 mod_lua                            x86_64 2.4.56-1.amzn2023               amazonlinux  62 k
 php8.1-mbstring                    x86_64 8.1.16-1.amzn2023.0.1           amazonlinux 477 k
 php8.1-opcache                     x86_64 8.1.16-1.amzn2023.0.1           amazonlinux 382 k
 php8.1-xml                         x86_64 8.1.16-1.amzn2023.0.1           amazonlinux 146 k

Transaction Summary
=============================================================================================
Install  85 Packages
aibizaibiz

FileZiraでキーペア使って、ec2に接続もできる
接続先はElasticIPで取得した固定IPを指定
ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com

aibizaibiz

wget コマンドを使って、最新の WordPress インストールパッケージをダウンロードします。次のコマンドを実行すると、最新リリースが必ずダウンロードされます。

wget https://wordpress.org/latest.tar.gz
aibizaibiz

インストールパッケージを解凍します。インストールフォルダは、wordpress という名前のフォルダに解凍されます。

tar -xzf latest.tar.gz
aibizaibiz

MySQL(MariaDB)のもろもろ設定

データベースおよびウェブサーバーを起動します。

sudo systemctl start mariadb httpd
aibizaibiz

データベースサーバーに root ユーザーとしてログインします。

mysql -u root -p

事前に、
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html#securing-maria-db
ステップ 3: データベースサーバーをセキュリティで保護する
あたりの設定をしておく。
デフォルトではrootユーザーにパスワードは設定されていないらしいので、
https://my.norton.com/extspa/passwordmanager?path=pwd-gen
のサイトを使って、安全なパスワードに変更する。

aibizaibiz

MySQL データベースのユーザーとパスワードを作成します。
WordPress インストールは、これらの値を使って、MySQL データベースと通信を行います。
一意のユーザー名とパスワードを入力して、次のコマンドを入力します。

CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_password';
aibizaibiz

データベースを作成します。wordpress-db など、データベースにはわかりやすい名前を使用します。

CREATE DATABASE `wordpress-db`;

データベースに対して、以前作成した WordPress ユーザーに対する完全な権限を付与します。

GRANT ALL PRIVILEGES ON `wordpress-db`.* TO "wordpress-user"@"localhost";

すべての変更を有効にするため、データベース権限をフラッシュします。

FLUSH PRIVILEGES;

mysql クライアントを終了します。

exit
aibizaibiz

WordPress ファイルを Apache ドキュメントルートの下にコピー

sudo mkdir /var/www/html/wp-sample01
sudo cp -r wordpress/* /var/www/html/wp-sample01

httpd.confの編集

sudo vim /etc/httpd/conf/httpd.conf
aibizaibiz

WordPressのソースコードをGithubで管理したいのでgitをインストール

sudo yum update
sudo yum install git
git version
aibizaibiz

.gitignoreファイルを作って、wp-config.phpは無視するようにする。
その後、
suto git init
git config --global --add safe.directory /var/www/html/wp-sample01
git add -A
git commit
リモートリポジトリにpushする。

aibizaibiz

その後、ELBが結構課金がかかっていることが判明したので削除する

Elastic Load Balancing
USD 18.08

Asia Pacific (Tokyo)
USD 18.08

Elastic Load Balancing - Application
USD 18.08
$0.008 per used Application load balancer capacity unit-hour (or partial hour)
0.118 LCU-Hrs	USD 0.00
$0.0243 per Application LoadBalancer-hour (or partial hour)
744 Hrs	
aibizaibiz

AWSのElastic Load Balancer (ELB)の料金が発生しないようにするためには、基本的にはELBを削除する必要があります²。以下に、ELBを削除する手順を説明します²:

  1. Amazon EC2 コンソール ( 6 を開きます。
  2. ナビゲーションペインで、 [ ロードバランサー] を選択します。
  3. ロードバランサーを選択して [アクション] 、 [ロードバランサーの削除] を選択します。
  4. 確認を求められたら、「 confirm 」と入力し、 [ 削除] を選択します。

ただし、以下の点に注意してください²:

  • ロードバランサーが削除されると、ロードバランサーの課金も停止されます²。
  • ロードバランサーを削除しても、登録済みターゲットには影響を与えない点に注意してください²。たとえば、EC2 インスタンスは実行を続け、ターゲットグループに登録されたままです²。
  • 削除保護が有効になった場合、ロードバランサーを削除することはできません²。

これらの手順を実行する前に、ELBの削除がアプリケーションのパフォーマンスや可用性にどのように影響するかを評価することが重要です。また、AWSのサポートチームに相談することもお勧めします。これらの情報がお役に立てば幸いです。他に何かご質問がありましたら、お気軽にどうぞ。²

ソース: Bing との会話 2023/11/10
(1) Application Load Balancer の削除 - Elastic Load Balancing. https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-delete.html.
(2) 【AWS】ELBセキュリティポリシー変更してTLS 1.0/1.1 無効化 .... https://bing.com/search?q=AWS+ELBを無効にする方法.
(3) ELB(ALB)の設定・接続・確認 #AWS - Qiita. https://qiita.com/nonZy/items/2952199cb2014668de41.
(4) 【AWS】ELBセキュリティポリシー変更してTLS 1.0/1.1 無効化 .... https://sayjoyblog.com/elb-securitypolicy/.
(5) ELB(ALB)のアクセスログ設定 | Oji-Cloud. https://oji-cloud.net/2019/07/17/post-2451/.
(6) undefined. https://console.aws.amazon.com/ec2/).