本記事はAWSでWordPressブログを立ち上げるまでの過程を、
キリの良いところで区切った内容になっています。
通して確認されたい方は以下を先に確認してみてください!
はじめに
第三章は、OSの設定を行います。
- Amazon Linux 2023 の初期設定
- WordPressを使用するためにApacheやらMariaDB、PHPなんかをインストール & 設定
ということで本編です。
Amazon Linux 2023の初期設定
あまり設定する内容はなさそうでしたが、以下は行いました。
- パッケージ更新
- タイムゾーン変更
- CloudWatchエージェントインストール & 設定
パッケージ更新
dnf upgrade --releasever=latest
タイムゾーン変更
sudo timedatectl set-timezone Asia/Tokyo
date コマンドで変更されているか確認
CloudWatchエージェントのインストール
インストールは公式ドキュメントにコマンドが載ってます。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/download-cloudwatch-agent-commandline.html
sudo yum install amazon-cloudwatch-agent
ウィザードを使用してカスタムメトリクスの設定をしてみました。
cd /opt/aws/amazon-cloudwatch-agent/bin
sudo ./amazon-cloudwatch-agent-config-wizard
================================================================
= Welcome to the Amazon CloudWatch Agent Configuration Manager =
= =
= CloudWatch Agent allows you to collect metrics and logs from =
= your host and send them to CloudWatch. Additional CloudWatch =
= charges may apply. =
================================================================
On which OS are you planning to use the agent?
1. linux
2. windows
3. darwin
default choice: [1]:
1
Trying to fetch the default region based on ec2 metadata...
I! imds retry client will retry 1 timesAre you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:
1
Which user are you planning to run the agent?
1. cwagent
2. root
3. others
default choice: [1]:
1
Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:
2
Do you want to monitor metrics from CollectD? WARNING: CollectD must be installed or the Agent will fail to start
1. yes
2. no
default choice: [1]:
2
Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:
1
Do you want to monitor cpu metrics per core?
1. yes
2. no
default choice: [1]:
2
Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
1. yes
2. no
default choice: [1]:
1
Do you want to aggregate ec2 dimensions (InstanceId)?
1. yes
2. no
default choice: [1]:
1
Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file.
1. 1s
2. 10s
3. 30s
4. 60s
default choice: [4]:
4
Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:
2
Current config as follows:
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "cwagent"
},
"metrics": {
"aggregation_dimensions": [
[
"InstanceId"
]
],
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"cpu": {
"measurement": [
"cpu_usage_idle",
"cpu_usage_iowait",
"cpu_usage_user",
"cpu_usage_system"
],
"metrics_collection_interval": 60,
"totalcpu": false
},
"disk": {
"measurement": [
"used_percent",
"inodes_free"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"diskio": {
"measurement": [
"io_time"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
},
"swap": {
"measurement": [
"swap_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.
1. yes
2. no
default choice: [1]:
1
Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration?
1. yes
2. no
default choice: [2]:
2
Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:
2
Do you want the CloudWatch agent to also retrieve X-ray traces?
1. yes
2. no
default choice: [1]:
2
Existing config JSON identified and copied to: /opt/aws/amazon-cloudwatch-agent/etc/backup-configs
Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully.
Current config as follows:
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "cwagent"
},
"metrics": {
"aggregation_dimensions": [
[
"InstanceId"
]
],
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"cpu": {
"measurement": [
"cpu_usage_idle",
"cpu_usage_iowait",
"cpu_usage_user",
"cpu_usage_system"
],
"metrics_collection_interval": 60,
"totalcpu": false
},
"disk": {
"measurement": [
"used_percent",
"inodes_free"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"diskio": {
"measurement": [
"io_time"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
},
"swap": {
"measurement": [
"swap_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
Please check the above content of the config.
The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json.
Edit it manually if needed.
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
2
Program exits now.
成功すると config.json が作成されています。
ls -l
total 445320
-rw-r--r--. 1 root root 11 Aug 27 19:16 CWAGENT_VERSION
-rwxr-xr-x. 1 root root 133978408 Aug 27 19:16 amazon-cloudwatch-agent
-rwxr-xr-x. 1 root root 14495880 Aug 27 19:16 amazon-cloudwatch-agent-config-wizard
-rwxr-xr-x. 1 root root 14117 Aug 27 19:16 amazon-cloudwatch-agent-ctl
-rwxr-xr-x. 1 root root 39584536 Aug 27 19:16 config-downloader
-rwxr-xr-x. 1 root root 128718408 Aug 27 19:16 config-translator
-rw-r--r--. 1 root root 1106 Oct 1 13:53 config.json
-rw-r--r--. 1 root root 29755484 Aug 27 19:16 opentelemetry-jmx-metrics.jar
-rwxr-xr-x. 1 root root 109433352 Aug 27 19:16 start-amazon-cloudwatch-agent
ここでCloudWatchエージェントのサービス再起動をしましたが、
ステータスが loaded のまま起動しなくなりました。。
sudo systemctl restart amazon-cloudwatch-agent
sudo systemctl status amazon-cloudwatch-agent
出ていたメッセージを確認すると、jsonが読み込めていないようでした。
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json が無いのが原因?
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json does not exit
config.json をリネームしてフォルダを移動しました。
sudo mv /opt/aws/amazon-cloudwatch-agent/bin/config.json /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
再度サービス再起動をするとステータスが正常になりました。
sudo systemctl restart amazon-cloudwatch-agent
sudo systemctl enable amazon-cloudwatch-agent
sudo systemctl status amazon-cloudwatch-agent
マネジメントコンソールでCloudWatchコンソールを見てみると、
カスタムメトリクスにメモリ使用率が表示されました。
信じられないほど沼ったので先に注意点を!!!
本記事はブラウザでWordPressの初期画面が表示できたところで終了します。
初期画面以降の設定は独自ドメインやHTTPS化の設定が完了してから実施した方が良いです。
事象
まさおは最初に以下のURLでアクセスしインストールまで行いました。
http://[パブリックIPアドレス]
その後、以下の流れを踏みました。
①パブリックIPアドレスを固定するためにElastic IP を割り当てた
確認のためサイトにアクセスすると表示も遅いし画面崩れする。
Elastic IPを割り当てたからおかしくなったんだ!
② ①を行った状態でインストール → Route53で独自ドメインを購入 → Elactic IPをAレコードで登録
確認するとまた同じ事象が発生している
DNS設定をしたからおかしくなったんだ!
③ ②を行い、独自ドメインでアクセスした状態でインストール → ALBを作成してRoute53のエイリアスレコードに登録することでHTTPS化
確認するとまたまた同じ事象が発生している
設定変更をするたびにおかしくなるな。さすがに調べよう。
原因
以下が原因で事象が発生していました。
- WordPressで設定されているURLと実際にアクセスしたURLの相違
- 混合コンテンツエラー
終わってみればあっさり解決したのですが、なんやかんや解決のために色々なことをしました。
EC2のスペックが足りない?とか
ALBとEC2間をHTTPS化してみたとか
WordPressの設定をいじってみたりとか
DBに登録されているURL情報を修正しようとしたりとか
ApacheやらEC2の設定をいじってみたりとか
などなど
なかなか解消しないのでEC2は4~5回ほど作り直しました。。
結論、
独自ドメインを使用してWordPress初期画面にHTTPSアクセスができている
状態になるまで、ブラウザからのインストールは避けるのが吉です。
実は、よく見たらチュートリアルの中にもヒントがありました。
「前提条件」や末尾の「ヘルプ! ~」のところ
https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/hosting-wordpress-aml-2023.html
ということで、初期画面までやっていきましょう。
WordPress等のインストール、セットアップ
AWS公式ドキュメントに以下のチュートリアルがありました。
これをそのままやってみます。
AL2023 で WordPress ブログをホストする
https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/hosting-wordpress-aml-2023.html
インストール系
# MariaDB、PHP、Apacheインストール
sudo dnf install wget php-mysqlnd httpd php-fpm php-mysqli mariadb105-server php-json php php-devel -y
# WordPressインストール、解凍
sudo wget https://wordpress.org/latest.tar.gz
sudo tar -xzf latest.tar.gz
MariaDB設定
# mariadb、httpdの起動
sudo systemctl start mariadb httpd
# rootログイン
# インストール直後はパスワードが設定されていないようなので、# 以下のコマンドで強行突破する
sudo mysql -u root -p
# rootパスワード設定
ALTER USER 'root'@'localhost' IDENTIFIED BY "パスワード";
# WordPress用ユーザ作成
CREATE USER '任意のユーザ名'@'localhost' IDENTIFIED BY 'パスワード';
・WordPress用DB作成
CREATE DATABASE `任意のデータベース名`;
・WordPressユーザに権限付与
GRANT ALL PRIVILEGES ON `作成したデータベース名`.* TO '作成したユーザ名'@'localhost';
・設定反映
FLUSH PRIVILEGES;
WordPress設定
# 設定ファイルの作成
sudo cp wordpress/wp-config-sample.php wordpress/wp-config.php
sudo vi wordpress/wp-config.php
# 以下の部分を書き換える
> // ** Database settings - You can get this info from your web host ** //
> /** The name of the database for WordPress */
> define( 'DB_NAME', '作成したデータベース名' );
>
> /** Database username */
> define( 'DB_USER', '作成したユーザ名' );
>
> /** Database password */
> define( 'DB_PASSWORD', 'パスワード' );
# 以下にアクセスして生成されるランダムな値に書き換える
# https://api.wordpress.org/secret-key/1.1/salt/
define('AUTH_KEY', '');
define('SECURE_AUTH_KEY', '');
define('LOGGED_IN_KEY', '');
define('NONCE_KEY', '');
define('AUTH_SALT', '');
define('SECURE_AUTH_SALT', '');
define('LOGGED_IN_SALT', '');
define('NONCE_SALT', '');
インストールディレクトリを決める
hxxps://example.com/ で作成したサイトにアクセスさせたい時は、
/var/www/html/ にWordPressを配置する
hxxps://example.com/site/ で作成したサイトにアクセスさせたい時は、
/var/www/html/site/ を作成して、ここにWordPressを配置する
# /var/www/html/blogにする
sudo mkdir /var/www/html/blog
sudo cp -r wordpress/* /var/www/html/blog/
WordPress permalinks
sudo vim /etc/httpd/conf/httpd.conf
# <Directory "/var/www/html">セクションの「AllowOverride None」を「AllowOverride ALL」に書き換え
Apacheの権限設定
sudo chown -R apache /var/www
sudo chgrp -R apache /var/www
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0644 {} \;
sudo systemctl restart httpd
Apache、MariaDBの起動、自動起動設定
sudo systemctl enable httpd && sudo systemctl enable mariadb
sudo systemctl status mariadb
sudo systemctl status httpd
sudo chkconfig httpd on && sudo chkconfig mariadb on
sudo service mariadb status
sudo service httpd status
ここまで実行すると、WordPressの初期画面にアクセスできます。
http://パブリックIPアドレス
前述の通り、この初期画面は独自ドメインの設定やHTTPS化が完了するまで、
設定を進めないことをおすすめします。
おわりに
今回は作成したEC2のOS設定をしました。
まさかあんなに沼ると思っていなかったので、事前に調べておくことも大事だなと思いました。
勉強だと思えば満点の沼り方でしたね。
次回は、Route53から独自ドメインを取得します。