AWS×WordPress その4


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

はじめに

AWS上にWordpress環境を作成した内容をブログ形式で振り返っていく記事になります。
今回はEC2周りの構築を進めていきます。

これまでの構築については過去の記事を参照ください。
AWS×WordPress その1 – IAM,KMS
AWS×WordPress その2 – ネットワーク
AWS×WordPress その3 – RDS,EFS


構成図

構成図はこちら

こちらを完成目標として構築していきます。
今回も詳細は各構築手順にて記載します。

file


構築手順

本記事では手順 4. EC2 について記載します。
※ 詳細な手順は多少前後する可能性があります。

全体の手順はこちら
  1. 事前準備
    1-1. IAM
    1-2. KMS

  2. ネットワーク
    2-1. VPC
    2-2. サブネット
    2-3. インターネットゲートウェイ
    2-4. ルートテーブル
    2-5. セキュリティグループ

  3. DB,Filesystem
    3-1. RDS
    3-2. EFS

  4. EC2
    4-1. EC2作成 – 1台目
    4-2. WordPress – 初期設定
    4-3. CloudWatchAgent – インストール/初期設定
    4-4. AMI作成 – EC2 2台目起動用
    4-5. EC2作成 – 2台目

  5. 監視,通知
    5-1. SNS
    5-2. Alarm – EC2 AutoRecovery
    5-3. Alarm – DiskMonitor

  6. DNS,HTTPS
    6-1. Route53
    6-2. ACM
    6-3. ELB
    6-4. WordPress


4. EC2

以下の順で進めていきます。

4-1. EC2作成 – 1台目
4-1-1. EC2の作成
4-1-2. 起動確認
4-1-3. 接続確認

4-2. WordPress – インストール/初期設定
4-2-1. WordPressインストール画面へ接続 – 言語選択
4-2-2. WordPressインストール – データベース情報の入力
4-2-3. WordPressインストール – wp-config.php作成
4-2-4. WordPressインストール – 必要情報入力
4-2-5. WordPressインストール – ログイン確認

4-3. CloudWatchAgent – 初期設定
4-3-1. CloudWatchAgent – セットアップウィザードの実行
4-3-2. CloudWatchAgent – 起動
4-3-3. CloudWatchAgent – 起動確認

4-4. AMI作成 – 2台目EC2作成用
4-4-1. AMI作成 – 対象EC2の停止
4-4-2. AMI作成 – イメージの作成

4-5. 2台目EC2作成
4-5-1. 2台目EC2の作成
4-5-2. 起動確認
4-5-3. 接続確認

ではEC2作成からはじめていきましょう


4-1. EC2作成 – 1台目

4-1-1. EC2作成 – AMI の選択

Amazon Linux 2 を選択

file

4-1-1. EC2作成 – インスタンスタイプの選択

無料利用枠のt2.microを選択
次のステップ:ストレージの追加

file

4-1-1. EC2作成 – インスタンスの詳細の設定

VPC、サブネット、ロールなど選択、削除保護を有効化

file

インスタンスの詳細設定のため、画面下部のユーザーデータを使用します:

構築に必要な項目を予め確認
→ インスタンス起動時に自動実行
→ 手作業を減らし、作業ミスのリスク低減にも効果があるため使用

file

今回ユーザーデータに入力した内容はこちら
作成したEFSのファイルシステムIDを確認し fs-XXXXXXXX に記載

#!/bin/bash
sudo yum -y update
sudo yum install httpd -y
sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
sudo yum install -y amazon-efs-utils
sudo mount -t efs -o tls fs-XXXXXXXX:/ /var/www/html
sudo echo "fs-XXXXXXXX:/ /var/www/html efs tls,_netdev 0 0" >> /etc/fstab
sudo yum install amazon-cloudwatch-agent -y
sudo amazon-linux-extras install collectd -y
sudo systemctl start httpd
sudo systemctl enable httpd

cd /tmp/
sudo wget https://wordpress.org/latest.zip
unzip latest.zip
sudo mv wordpress/* /var/www/html/
sudo rm -rf wordpress/ latest.zip
sudo chown -R apache:apache /var/www/html/*
sudo chmod -R 775 /var/www/html

4-1-1. EC2作成 – ストレージの追加

ボリュームタイプはgp3
暗号化 作成したKMSキーを選択
file

4-1-1. EC2作成 – タグの追加

Nameタグ、Envタグを追加
file

4-1-1. EC2作成 – セキュリティグループの設定

EC2用に作成したセキュリティグループを選択
file

4-1-1. EC2作成 – 確認

入力した内容と出力されている内容に差異がないか確認 → 起動をクリック

4-1-1. EC2作成 – キーペアの作成

キーペアは既存のものを使用、もしくは新規作成が可能
今回は新規作成 > キーペアのダウンロード
キーペアのダウンロード完了後 > インスタンスの作成
file

4-1-2. 起動確認

インスタンスの状態、ステータスチェックの内容を確認し、起動できたことを確認
file

4-1-3. 接続確認

SSHでも問題なく接続できることを確認 → OK!


4-2. WordPressの設定

4-2-1. WordPressインストール – 言語選択

http://[パブリックIPv4アドレス]/wp-admin/setup-config.php にアクセスし画面の指示に従う

file

4-2-2. WordPressインストール – データベース情報の入力

構築済みの内容からもいくつか必要な情報があるので確認

項目
1 データベース名 RDS構築時の設定値
2 データベースのユーザー名 RDS構築時の設定値
3 データベースのパスワード RDS構築時の設定値
4 データベースホスト 構築済みRDSのエンドポイント
5 テーブル接頭辞 wp_ (デフォルト)

file

RDS構築時の内容等を確認し、入力 > 送信

file

4-2-3. WordPressインストール – wp-config.php作成

指示の通りに wp-config.php へ内容をコピー&ペースト > インストールの実行

file

4-2-4. WordPressインストール – 必要情報入力

指示の通りにサイトのタイトルなど入力 > WordPressをインストール

file

4-2-5. WordPressインストール – ログイン確認

インストール完了!

file

正常にログインしダッシュボードが開けることを確認、初期設定完了!

file

WordPressのインストール完了!次はCloudWatchAgentのインストール ↓


4-3. CloudWatchAgent – 初期設定

CloudWatchAgentそのものはEC2起動時にインストール済みのため
ウィザードの実行からスタート!

4-3-1. CloudWatchAgent – セットアップウィザードの実行

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

ウィザード実行時に内容はこちら

特に値を設定していない項目はすべてデフォルトを選択

[ec2-user@ip-10-0-X-XX]$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
=============================================================
= Welcome to the AWS CloudWatch Agent Configuration Manager =
=============================================================
The value  is not valid to this question.
Please retry to answer:
On which OS are you planning to use the agent?
1. linux
2. windows
3. darwin
default choice: [1]:

Trying to fetch the default region based on ec2 metadata...
Are you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:

Which user are you planning to run the agent?
1. root
2. cwagent
3. others
default choice: [1]:

Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:

Which port do you want StatsD daemon to listen to?
default choice: [8125]

What is the collect interval for StatsD daemon?
1. 10s
2. 30s
3. 60s
default choice: [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]:

Do you want to monitor metrics from CollectD?
1. yes
2. no
default choice: [1]:

Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:

Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply.
1. yes
2. no
default choice: [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]:

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]:

Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:

Current config as follows:
{
    "agent": {
        "metrics_collection_interval": 60,
        "run_as_user": "root"
    },
    "metrics": {
        "append_dimensions": {
            "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
            "ImageId": "${aws:ImageId}",
            "InstanceId": "${aws:InstanceId}",
            "InstanceType": "${aws:InstanceType}"
        },
        "metrics_collected": {
            "collectd": {
                "metrics_aggregation_interval": 60
            },
            "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]:

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]:

Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:

Log file path:
/var/log/messages
Log group name:
default choice: [messages]

Log stream name:
default choice: [{instance_id}]

Do you want to specify any additional log files to monitor?
1. yes
2. no
default choice: [1]:
2
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": "root"
    },
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                        "file_path": "/var/log/messages",
                        "log_group_name": "messages",
                        "log_stream_name": "{instance_id}"
                    }
                ]
            }
        }
    },
    "metrics": {
        "append_dimensions": {
            "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
            "ImageId": "${aws:ImageId}",
            "InstanceId": "${aws:InstanceId}",
            "InstanceType": "${aws:InstanceType}"
        },
        "metrics_collected": {
            "collectd": {
                "metrics_aggregation_interval": 60
            },
            "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.
[ec2-user@ip-10-0-X-XX]$ 

4-3-2. CloudWatchAgent – 起動

configuration-file-pathは実際のファイルパスに置き換えて起動

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:configuration-file-path -s

参考:ウィザード実行~起動

4-3-3. CloudWatchAgent – 起動確認

念の為、起動を確認

systemctl status amazon-cloudwatch-agent.service

OK!

file

CloudWatchAgentの初期設定はこれにて完了、
アラームの作成等は手順5. 監視,通知にて行います。

次はAMI作成


4-4. AMI作成 – 2台目EC2起動用

4-4-1. AMI作成 – 対象EC2の停止

まずはAMI作成元となるEC2を停止

4-4-2. AMI作成 – イメージの作成

EC2を選択 > アクション > イメージとテンプレート > イメージを作成

file

イメージ名を入力
イメージの説明、タグ任意の設定は任意  > イメージを作成

file

ナビゲーションペイン(画面左)から イメージ > AMI
作成したAMIのステータスを確認

作成直後
file

Available!
file

AMI作成完了!次は作成したAMIから2台目のEC2を起動させます


4-5. 2台目EC2作成

4-5-1. 2台目EC2の作成

ナビゲーションペイン(画面左)から イメージ > AMI
作成したAMIを選択 > 起動

file

インスタンスの詳細設定までは内容を確認しつつ、次へ進む

1台目を作成したときと同様に各項目を入力/選択
インスタンス冗長化の為、サブネットは1台目と異なるpublic-subNet-1cを選択
file

最後の確認画面まで進み、内容の最終確認を行う
問題なければ作成をクリック!

4-5-2. 起動確認

2台目が起動中…

file


1台目、2台目どちらも起動完了!

file

4-5-3. 接続確認

SSHでも問題なく接続できることを確認 → OK!

2台目のEC2も無事に起動完了。ELBの設定はまた別の記事にて記載します


まとめ

これにてEC2周りの構築は完了です。
次は手順5.監視,通知の構築に入っていきます、ではまた!

Last modified: 2024-02-06

Author