Open58

改めて AWS に WordPress を構築する

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

やることリスト

  • パスワード生成 → 済
  • メールアドレスの作成 → 済
  • アカウント作成 → 済
  • EC2 起動 → 済
  • Elastic IP アドレスの取得・割り当て → 済
  • SSH 設定 → 済
  • HTTP サーバーインストール・設定(Override & Document Root) → 済
  • MariaDB サーバーインストール・DB 作成 → 済
  • PHP インストール・設定(タイムゾーンやアップロードサイズなど) → 済
  • WordPress インストール → 済
  • バックアップ用 S3 バケットの作成・ライフサイクル設定 → 済
  • ロールの作成 → 済
  • バックアップスクリプトの作成 → 済
  • CRON インストール・設定 → 済
  • 自動再起動設定 → 済
  • SNS トピック・サブスクリプション作成 → 済
  • CloudWatch アラーム設定 → 済
  • FTP サーバーインストール・設定 → 済
  • ACM リクエスト → 済
  • phpMyAdmin インストール・Basic 認証 → 済
  • ALB 作成
  • WordPress 無限ループ対策 → 済
  • スワップ領域の作成 → 済
  • PHP FPM プロセス数調整 → 済
  • MariaDB の OOM スコア調整 → 済
  • プロセス監視 → 済

こうしてリストアップしてみると結構やることがあるな。

ハマったりしたらかなり時間かかりそう。

ただ前回は手探りかつ記録をとりながらで 15 時間弱くらいで終わったので最小限の記録を取りながらなら 5 時間くらいで終わりそうだ。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

30 分かけて

パスワード生成、メールアドレス作成、アカウント作成が終わった。

次回からは本格的に進めていこう。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

この振り返りが終わったら記事にしたい

もしかしたら誰かの役に立つかも知れない。

長い記事になりそうなので構成は考える必要はあるだろう。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

CloudWatch Agent の設定

コマンド
sudo /opt/aws/amazon-cloudwatch-agent/bin/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]:
1
Which port do you want StatsD daemon to listen to?
default choice: [8125]
8125
What is the collect interval for StatsD daemon?
1. 10s
2. 30s
3. 60s
default choice: [1]:
1
What is the aggregation interval for metrics collected by StatsD daemon?
1. Do not aggregate
2. 10s
3. 30s
4. 60s
default choice: [4]:
4
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]:
1
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]:
1
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": {
			"disk": {
				"measurement": [
					"used_percent"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"mem": {
				"measurement": [
					"mem_used_percent"
				],
				"metrics_collection_interval": 60
			},
			"statsd": {
				"metrics_aggregation_interval": 60,
				"metrics_collection_interval": 10,
				"service_address": ":8125"
			}
		}
	}
}
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": {
			"disk": {
				"measurement": [
					"used_percent"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"mem": {
				"measurement": [
					"mem_used_percent"
				],
				"metrics_collection_interval": 60
			},
			"statsd": {
				"metrics_aggregation_interval": 60,
				"metrics_collection_interval": 10,
				"service_address": ":8125"
			}
		}
	}
}
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.
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

やっぱりAWS Systems Manager を使った方が良い気がしてきた

高速セットアップは何が行われているんだろう?

Host Management を選択

「CloudWatch エージェントをインストールして設定します。」にチェックを入れて実行する。

実行すると /opt/aws/amazon-cloudwatch-agent/etc に設定ファイルが追加されている。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

やっちまった

CloudWatch エージェントが起動していないので気になってアンインストールしたが再インストールする方法がないようだ。

やってしまった。

Run Command の方から AWSQuickSetup-InstallAndManageCloudWatchDocument を実行したらもしかしたらできるかも。

ただインスタンスが表示されない、なんでだろう。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

ようやく再起動できた

停止して起動したらインスタンスが表示されるようになった。

そして AWSQuickSetup-InstallAndManageCloudWatchDocument を実行したらどうにかなった。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

ここまでの作業時間

今回は好奇心旺盛なせいで 1.75 時間もかかってしまった。

プロセス監視の設定は初めから記録の通りにすればよかった。

スクリーンショットが少ないので増やした方が良いかも。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

証明書の設定

今回は ACM 証明書を 使わず Apache に証明書を設定することになったのでその内容を記録していこう。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

秘密鍵と証明書の配置

コマンド
sudo mv ~/secret.pem /etc/pki/tls/private/secret.pem
sudo mv ~/certificate.pem /etc/pki/tls/certs/certificate.pem
sudo mv ~/ca-certificate.pem /etc/pki/tls/certs/ca-certificate.pem
sudo chmod 400 /etc/pki/tls/private/secret.pem
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

設定ファイルの変更

/etc/httpd/conf.d/ssl.conf(一部)
SSLCertificateFile /etc/pki/tls/certs/certificate.pem
SSLCertificateKeyFile /etc/pki/tls/private/secret.key
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

証明書の結合

色々な情報を参照すると証明書と中間証明書を結合した方が良さそうだ。

https://certs.nii.ac.jp/manual/manuals/reports/03

コマンド
cd /etc/pki/tls/certs/
awk 1 certificate.pem ca-certificate.pem | sudo tee combined-certificate.pem

この証明書を使う場合は下記のようになる。

/etc/httpd/conf.d/ssl.conf(一部)
SSLCertificateFile /etc/pki/tls/certs/combined-certificate.pem
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

SSL 接続確認

コマンド
openssl s_client -connect www.example.com:443

ただ、これだと本物のサーバーにアクセスしているのかどうかがわからない。