Closed naoya0408 closed 4 years ago
Virtual Private Cloud (VPC) は、AWS アカウント専用の仮想ネットワークです。VPC は、AWS クラウドの他の仮想ネットワークから論理的に切り離されており、AWS のリソース(例えば Amazon EC2 インスタンス)を VPC 内に起動できます。https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Subnets.html
VPCのマネジメントコンソールでVPCの作成をする
10.0.0.0/16のアドレス空間を扱うVPCを作成する。
以下の2つのサブネットを作成する
項目 | 値 |
---|---|
Name | public-subnet-1a |
VPC | 上記で作成したVPC |
アベイラビリティゾーン | ap-northeast-1a |
IPv4 CIDR ブロック | 10.0.0.0/24 |
項目 | 値 |
---|---|
Name | private-subnet-1a |
VPC | 上記で作成したVPC |
アベイラビリティゾーン | ap-northeast-1a |
IPv4 CIDR ブロック | 10.0.1.0/24 |
名前タグに「wordpress-igw」と入力し作成 「アクション」から「VPCにアタッチ」を選択し先程作成したVPCにアタッチする
このままではインターネットに繋がることができない。 インターネット(0.0.0.0/0)へのルーティングを、IGWに向けるように設定する
次にパブリックサブネットをルートテーブルに関連付ける
EC2のマネジメントコンソール上で「インスタンスの作成」から作成していく
項目 | 値 |
---|---|
Amazon マシンイメージ (AMI) | Amazon Linux 2 AMI (HVM), SSD Volume Type - ami-0ff21806645c5e492 |
項目 | 値 |
---|---|
インスタンスタイプ | t2.micro |
以下の設定を変更する
今回は設定を変更せずに汎用SSD(gp2)を使用する
キー | 値 |
---|---|
Name | web-server-1a |
以下の設定を追加する
キーペアの名前を入力しダウンロードする
設定を確認しインスタンスを作成する
インスタンスの作成が始まり、少し立つとステータスがrunningに変わり、 起動したことがわかる
そのままだとインスタンスにssh接続ができないので、 パーミッションを変更しておく
#保存するフォルダを任意の場所へ移動させる
% sudo mv Downloads/aws-ssh-key.pem ~/.ssh/
#パーミッションを600へ変更
% sudo chmod 600 ~/.ssh/aws-ssh-key.pem
秘密鍵とIPアドレスを指定しログインする
% ssh -i ~/.ssh/aws-ssh-key.pem ec2-user@52.194.4.27
The authenticity of host '52.194.4.27 (52.194.4.27)' can't be established.
ECDSA key fingerprint is SHA256:40jADxHujH6tpljEIaCgFTQ+JmCRSAcSGEOb/FfIv6Y.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '52.194.4.27' (ECDSA) to the list of known hosts.
Last login: Sun Sep 8 11:35:51 2019 from ftth-175.189.dws.ne.jp
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
$ sudo yum -y update
amazon-linux-extrasを利用しインストールしていく 【参考】 https://dev.classmethod.jp/cloud/aws/how-to-work-with-amazon-linux2-amazon-linux-extras/
$ amazon-linux-extras
0 ansible2 available [ =2.4.2 =2.4.6 ]
2 httpd_modules available [ =1.0 ]
3 memcached1.5 available [ =1.5.1 =1.5.16 ]
4 nginx1.12 available [ =1.12.2 ]
5 postgresql9.6 available [ =9.6.6 =9.6.8 ]
6 postgresql10 available [ =10 ]
8 redis4.0 available [ =4.0.5 =4.0.10 ]
9 R3.4 available [ =3.4.3 ]
10 rust1 available \
[ =1.22.1 =1.26.0 =1.26.1 =1.27.2 =1.31.0 ]
11 vim available [ =8.0 ]
13 ruby2.4 available [ =2.4.2 =2.4.4 ]
15 php7.2 available \
[ =7.2.0 =7.2.4 =7.2.5 =7.2.8 =7.2.11 =7.2.13 =7.2.14
=7.2.16 =7.2.17 =7.2.19 =7.2.21 ]
nginx1.12とphp7.2が利用できるのでインストールする
sudo amazon-linux-extras install nginx1.12
sudo amazon-linux-extras install php7.2
インストールができたか確認
$ nginx -v
nginx version: nginx/1.12.2
$ php -v PHP 7.2.21 (cli) (built: Aug 19 2019 22:57:44) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
$ php-fpm -v PHP 7.2.21 (fpm-fcgi) (built: Aug 19 2019 23:01:23) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
<br>
* nginxの起動
$ sudo systemctl start nginx
* nginxの自動起動設定
$ sudo systemctl enable nginx
* PHP-FPMの起動
$ sudo systemctl start php-fpm
* PHP-FPMの自動起動設定
$ sudo systemctl enable php-fpm
<br>
* nginxの設定を変更する
/etc/nginx/nginx.conf
server { listen 80 default_server; listen [::]:80 default_server; servername ; root /var/www/wordpress;
try_files $uri $uri/ /index.php?q=$uri&$args;
location ~* /wp-config.php {
deny all;
}
location ~ \.php$ {
root /var/www/wordpress;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/wordpress$fastcgi_script_name;
include fastcgi_params;
}
<br>
* php-fpmの設定を変更する
/etc/php-fpm.d/www.conf
user = nginx
user = apache
group = nginx
group = apache
listen = /var/run/php-fpm.sock
listen = /run/php-fpm/www.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0660
<br>
wordpressを以下のコマンドで構築していく
$ sudo mkdir /var/www/
$ cd /var/www/
$ sudo wget https://ja.wordpress.org/latest-ja.tar.gz
$ sudo tar -xzvf latest-ja.tar.gz
$ sudo rm latest-ja.tar.gz
$ sudo chown -R nginx:nginx /var/www/wordpress
nginxの再起動
$ sudo systemctl restart nginx
php-fpmの再起動
$ sudo systemctl restart php-fpm
インスタンスのパブリックIPにブラウザでアクセスする
以上のことを実現したいので、他のアベイラビリティゾーンにも パブリックサブネットとプライベートサブネットを設置する
項目 | 値 |
---|---|
Name | public-subnet-1c |
VPC | 作成したVPC |
アベイラビリティゾーン | ap-northeast-1c |
IPv4 CIDR ブロック | 10.0.2.0/24 |
項目 | 値 |
---|---|
Name | private-subnet-1c |
VPC | 作成したVPC |
アベイラビリティゾーン | ap-northeast-1c |
IPv4 CIDR ブロック | 10.0.3.0/24 |
WEBサーバーからDBサーバーへのアクセスを許可するセキュリティーグループを作成する
ソースにWEBサーバーのセキュリティーグループを指定することで
そのセキュリティーグループ内のインスタンスからアクセスすることが可能になる
RDSが起動するサブネットを複数指定する RDSをマルチAZ化するために必要な設定となる
サブネットに2つのアベイラビリティゾーンに作成した2つのプライベートサブネットを追加する
RDSのコンソールから「データベースの作成」を選択し設定していく 設定を変更した箇所は以下の通り
項目 | 値 |
---|---|
エンジンのオプション | MySQL |
バージョン | MySQL 8.0.16(最新バージョン) |
項目 | 値 |
---|---|
DB インスタンス識別子 | my-db-instance |
マスターユーザー名 | root |
マスターパスワード | 任意のパスワード |
パスワードを確認 | パスワードを再入力 |
項目 | 値 |
---|---|
ストレージタイプ | 汎用(SSD) |
ストレージの自動スケーリング | 無効 |
項目 | 値 |
---|---|
VPC | 作成したVPC |
サブネットグループ | 上記で作成したサブネットグループを選択 |
パブリックアクセス | なし |
セキュリティグループ | 上記で作成したセキュリティグループ(defaultは外しておく) |
データベース名 | wordpress |
自動バックアップの有効化 | 有効 |
$ sudo yum -y install mysql
RDSのマネジメントコンソールの作成したデータベースのエンドポイントをコピーしておく
$ mysql -h "ここにRDSデータベースのエンドポイントを貼り付ける" -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 74
Server version: 8.0.16 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
データベースに接続することができた
wordpress用のデータベースが作成されているか確認する
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| wordpress |
+--------------------+
4 rows in set (0.00 sec)
作成されていることが確認できる
設定したパブリックIPへアクセスする 指示にしたがってすすめていく
RDSで作成したデータベース名、ユーザー名、パスワードを入力 データベースのホスト名にはデータベースのエンドポイントを貼り付ける
インストール完了後、サイトの必要情報を入力する
EC2とRDSを利用してWordPressの構築をすることができた
EC2のマネジメントコンソール→作成したインスタンスにチェックを入れ、「アクション」→「イメージ」→「イメージの作成」を選択
必要な箇所を入力しイメージを作成する
AMIが作成された
EC2のマネジメントコンソール→AMI→作成されたAMIにチェックを入れ「起動」を選択する EC2の設定画面が開くので設定をしていく
項目 | 値 |
---|---|
サブネット | ap-northeast-1c |
Name | web-server-1c |
先に作ったインスタンスと上記の点を変え作成する
アクセスが分散されているかブラウザで確認ができるよう、以下のようにファイルの変更をする
$ sudo vim /var/www/wordpress/index.php
<?php
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define( 'WP_USE_THEMES', true );
/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp-blog-header.php' );
echo '<p>1aのインスタンスにアクセスしています</p>'; #1aのインスタンスにこの行を追加
echo '<p>1cのインスタンスにアクセスしています</p>'; #1aのインスタンスにこの行を追加
EC2のマネジメントコンソールから「ロードバランサー」を選択→「ロードバランサーの作成」をクリックして作成していく
項目 | 値 |
---|---|
名前 | aws-wordpress-alb |
アベイラビリティーゾーンでap-northeast-1aとap-northeast-1cのWordPressを配置したサブネットをリストから選択する
ELB用のセキュリティーグループを新規作成する プロトコルはHTTPの80番ポートを指定する
新規のターゲットグループを作成する 今回はテストなのですぐに結果が得られるよう、正常のしきい値を2にし、ヘルスチェックの間隔を10秒に設定する
2つのインスタンスをチェックし登録済みに追加する
上記設定にてロードバランサーを作成後、ステータスが「active」になったらロードバランサーのdescriptionからDNS名のアドレスをコピーしブラウザでアクセスする
リロードをするごとに上記画面が交互に表示される ロードバランサーがアクセスを分散していることが確認できた
AWS (EC2+RDS)でWordPressを構築する