Help us understand the problem. What is going on with this article?

AWS CLIでWordPress環境を構築する~part3~

概要

AWS学習目的で、下記記事のレシピを参考にAWS CLIでの環境構築を行う。
【Amazon3時間クッキング】材料費500円でAWSにWordPress環境を構築するレシピ ~part3~

この記事では以下の作業を行う。

  • サブネットの作成(プライベートセグメント)
  • キーペアの作成
  • セキュリティグループの作成(DBサーバー用)
    • ルールの追加
  • EC2インスタンスの作成(DBサーバー用)
  • NATゲートウェイの作成
    • メインのルートテーブルにNATゲートウェイのルートを追加
  • MySQLのインストール
    • 初期設定
    • データベース作成
    • ユーザー作成と権限の設定
  • WordPressのインストール
    • PHPのインストール
    • MySQL Clientのインストール
    • WordPressのデプロイ

環境

  • macOS Catalina

前提条件

構築

サブネットの作成(プライベートセグメント)

項目
CIDRブロック 10.0.2.0/24
名前 test-PrivateSegment
# パブリックセグメントのアベイラビリティゾーンの取得
$ aws ec2 describe-subnets --subnet-ids subnet-02558655ff2936296
{
    "Subnets": [
        {
            "AvailabilityZone": "ap-northeast-1c",
            "AvailabilityZoneId": "apne1-az1",
            "AvailableIpAddressCount": 250,
            "CidrBlock": "10.0.1.0/24",
            "DefaultForAz": false,
            "MapPublicIpOnLaunch": false,
            "State": "available",
            "SubnetId": "subnet-02558655ff2936296",
            "VpcId": "vpc-07154996e6c851750",
            "OwnerId": "403733593576",
            "AssignIpv6AddressOnCreation": false,
            "Ipv6CidrBlockAssociationSet": [],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "test-PublicSegment"
                }
            ],
            "SubnetArn": "arn:aws:ec2:ap-northeast-1:403733593576:subnet/subnet-02558655ff2936296"
        }
    ]
}

# サブネットの作成
$ aws ec2 create-subnet --vpc-id vpc-07154996e6c851750 --cidr-block 10.0.2.0/24 --availability-zone ap-northeast-1c
{
    "Subnet": {
        "AvailabilityZone": "ap-northeast-1c",
        "AvailabilityZoneId": "apne1-az1",
        "AvailableIpAddressCount": 251,
        "CidrBlock": "10.0.2.0/24",
        "DefaultForAz": false,
        "MapPublicIpOnLaunch": false,
        "State": "pending",
        "SubnetId": "subnet-069512764e560f68e",
        "VpcId": "vpc-07154996e6c851750",
        "OwnerId": "403733593576",
        "AssignIpv6AddressOnCreation": false,
        "Ipv6CidrBlockAssociationSet": [],
        "SubnetArn": "arn:aws:ec2:ap-northeast-1:403733593576:subnet/subnet-069512764e560f68e"
    }
}

# 名前の設定
$ aws ec2 create-tags --resources subnet-069512764e560f68e --tags Key=Name,Value=test-PrivateSegment

キーペアの作成

項目
名前 test-db-key
秘密鍵のファイル名 test-db-key.pem
# ディレクトリの移動
cd ~/.ssh

# キーペアの作成
$ aws ec2 create-key-pair --key-name test-db-key --query 'KeyMaterial' --output text > test-db-key.pem

# 権限の変更
$ chmod 600 test-db-key.pem

# SSHエージェントに秘密鍵を登録
$ ssh-add ~/.ssh/test-key.pem

セキュリティグループの作成

項目
グループ名 DB-Segment
説明 DB Server security group
# セキュリティグループの作成
$ aws ec2 create-security-group --group-name DB-Segment --description "DB Server security group" --vpc-id vpc-07154996e6c851750
{
    "GroupId": "sg-0e8a4425f79c7e9ce"
}

 ルールの追加

タイプ プロトコル ポート範囲 ソース
SSH TCP 22 0.0.0.0/0
MYSQL/Aurora TCP 3306 0.0.0.0/0
# SSHの有効化
$ aws ec2 authorize-security-group-ingress --group-id sg-0e8a4425f79c7e9ce --protocol tcp --port 22 --cidr 0.0.0.0/0

# MYSQL/Auroraの有効化
$ aws ec2 authorize-security-group-ingress --group-id sg-0e8a4425f79c7e9ce --protocol tcp --port 3306 --cidr 0.0.0.0/0

EC2インスタンスの作成

DBサーバー用のEC2インスタンスを作成する。

項目
AMI Amazon Linux 2 AMI (HVM), SSD Volume Type
インスタンスタイプ t2.micro
自動割り当てパブリックIP 無効化
プライベートIP 10.0.2.10
名前 DB-Server

AMIのイメージIDはここで確認をする。

項目 既定値
ストレージタイプ gp2
ストレージサイズ 8G

ストレージタイプやサイズなどは既定値で作成をする。

# EC2インスタンスの作成
$ aws ec2 run-instances --image-id ami-011facbea5ec0363b --count 1 --instance-type t2.micro --key-name test-db-key --security-group-ids sg-0e8a4425f79c7e9ce --subnet-id subnet-069512764e560f68e --private-ip-address 10.0.2.10
{
    "Groups": [],
    "Instances": [
        {
            "AmiLaunchIndex": 0,
            "ImageId": "ami-011facbea5ec0363b",
            "InstanceId": "i-08f568e483f5aa14f",
            "InstanceType": "t2.micro",
            "KeyName": "test-db-key",
            "LaunchTime": "2020-02-11T05:43:28.000Z",
            "Monitoring": {
                "State": "disabled"
            },
            "Placement": {
                "AvailabilityZone": "ap-northeast-1c",
                "GroupName": "",
                "Tenancy": "default"
            },
            "PrivateDnsName": "ip-10-0-2-10.ap-northeast-1.compute.internal",
            "PrivateIpAddress": "10.0.2.10",
            "ProductCodes": [],
            "PublicDnsName": "",
            "State": {
                "Code": 0,
                "Name": "pending"
            },
            "StateTransitionReason": "",
            "SubnetId": "subnet-069512764e560f68e",
            "VpcId": "vpc-07154996e6c851750",
            "Architecture": "x86_64",
            "BlockDeviceMappings": [],
            "ClientToken": "",
            "EbsOptimized": false,
            "Hypervisor": "xen",
            "NetworkInterfaces": [
                {
                    "Attachment": {
                        "AttachTime": "2020-02-11T05:43:28.000Z",
                        "AttachmentId": "eni-attach-015e62e441a1e9e2f",
                        "DeleteOnTermination": true,
                        "DeviceIndex": 0,
                        "Status": "attaching"
                    },
                    "Description": "",
                    "Groups": [
                        {
                            "GroupName": "DB-Segment",
                            "GroupId": "sg-0e8a4425f79c7e9ce"
                        }
                    ],
                    "Ipv6Addresses": [],
                    "MacAddress": "0a:12:3f:55:49:96",
                    "NetworkInterfaceId": "eni-028a866898abcebea",
                    "OwnerId": "403733593576",
                    "PrivateIpAddress": "10.0.2.10",
                    "PrivateIpAddresses": [
                        {
                            "Primary": true,
                            "PrivateIpAddress": "10.0.2.10"
                        }
                    ],
                    "SourceDestCheck": true,
                    "Status": "in-use",
                    "SubnetId": "subnet-069512764e560f68e",
                    "VpcId": "vpc-07154996e6c851750",
                    "InterfaceType": "interface"
                }
            ],
            "RootDeviceName": "/dev/xvda",
            "RootDeviceType": "ebs",
            "SecurityGroups": [
                {
                    "GroupName": "DB-Segment",
                    "GroupId": "sg-0e8a4425f79c7e9ce"
                }
            ],
            "SourceDestCheck": true,
            "StateReason": {
                "Code": "pending",
                "Message": "pending"
            },
            "VirtualizationType": "hvm",
            "CpuOptions": {
                "CoreCount": 1,
                "ThreadsPerCore": 1
            },
            "CapacityReservationSpecification": {
                "CapacityReservationPreference": "open"
            },
            "MetadataOptions": {
                "State": "pending",
                "HttpTokens": "optional",
                "HttpPutResponseHopLimit": 1,
                "HttpEndpoint": "enabled"
            }
        }
    ],
    "OwnerId": "403733593576",
    "ReservationId": "r-0260cad0308d0bbee"
}

# 名前の設定
$ aws ec2 create-tags --resources i-08f568e483f5aa14f --tags Key=Name,Value=DB-Server

NATゲートウェイの作成

# ElasticIP新しいアドレスの割当
$ aws ec2 allocate-address --domain vpc
{
    "PublicIp": "18.177.56.100",
    "AllocationId": "eipalloc-04495c62f9ec8db78",
    "PublicIpv4Pool": "amazon",
    "NetworkBorderGroup": "ap-northeast-1",
    "Domain": "vpc"
}

# NATゲートウェイの作成
$ aws ec2 create-nat-gateway --subnet-id subnet-02558655ff2936296 --allocation-id eipalloc-04495c62f9ec8db78
{
    "NatGateway": {
        "CreateTime": "2020-02-11T05:55:55.000Z",
        "NatGatewayAddresses": [
            {
                "AllocationId": "eipalloc-04495c62f9ec8db78"
            }
        ],
        "NatGatewayId": "nat-08e449a89a50dd47b",
        "State": "pending",
        "SubnetId": "subnet-02558655ff2936296",
        "VpcId": "vpc-07154996e6c851750"
    }
}

メインのルートテーブルにNATゲートウェイのルートを追加

項目
送信先 0.0.0.0/0
ターゲット NATゲートウェイ
# メインのルートテーブルを出力
$ aws ec2 describe-route-tables --filter Name="association.main",Values="true"
{
    "RouteTables": [
        {
            "Associations": [
                {
                    "Main": true,
                    "RouteTableAssociationId": "rtbassoc-0b25cde6f32c2e053",
                    "RouteTableId": "rtb-03a6ba4c68af0a710",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-03a6ba4c68af0a710",
            "Routes": [
                {
                    "DestinationCidrBlock": "10.0.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                }
            ],
            "Tags": [],
            "VpcId": "vpc-07154996e6c851750",
            "OwnerId": "403733593576"
        }
    ]
}

# ルートの追加
$ aws ec2 create-route --destination-cidr-block 0.0.0.0/0 --route-table-id rtb-03a6ba4c68af0a710 --nat-gateway-id nat-08e449a89a50dd47b
{
    "Return": true
}

MySQLのインストール

10.0.2.10
# RPMファイルのインストール
$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm -y

# MySQLのインストール
$ sudo yum -y install mysql-community-server

# MySQLサービスの起動
$ sudo systemctl start mysqld.service

# MySQLサービスのステータス確認
$ systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 火 2020-02-11 06:38:54 UTC; 29s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 32524 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 32600 (mysqld)
   Status: "Server is operational"
   CGroup: /system.slice/mysqld.service
           └─32600 /usr/sbin/mysqld

 2月 11 06:38:47 ip-10-0-2-10.ap-northeast-1.compute.internal systemd[1]: St...
 2月 11 06:38:54 ip-10-0-2-10.ap-northeast-1.compute.internal systemd[1]: St...
Hint: Some lines were ellipsized, use -l to show in full.

MySQLの初期設定

10.0.2.10
# 初期パスワードの出力
$ cat /var/log/mysqld.log | grep password

# 初期設定を行う 
$ mysql_secure_installation

WordPress用のデータベースの作成

10.0.2.10
# MySQLに接続
$ mysql -u root -p

# データベースの作成
$ CREATE DATABASE wpdb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

# ユーザーの作成
$ create user 'wpadmin'@'localhost' identified by '■■■■■■■■■';
$ create user 'wpadmin'@'10.0.1.10' identified by '■■■■■■■■■';

# デーベースの操作権限を与える
$ grant all privileges on wpdb.* to 'wpadmin'@'localhost';
$ grant all privileges on wpdb.* to 'wpadmin'@'10.0.1.10';

# ユーザーの確認
$ select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| wpadmin          | 10.0.1.10 |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
| wpadmin          | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)

WordPressのインストール

PHPのインストール

10.0.1.10
# PHPのインストール
$ sudo amazon-linux-extras install php7.3 -y

# 拡張モジュールの出力
$ yum list php* | grep amzn2extra-php7.3

# 拡張モジュールのインストール
$ sudo yum -y install php-mysqlnd php-mbstring

MySQL Clientのインストール

10.0.1.10
# RPMファイルのインストール
$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm -y

# MySQLクライアントのインストール
$ sudo yum -y install mysql-community-client

# WebサーバーからMySQLの接続確認
$ mysql -h 10.0.2.10 -u wpadmin -p

WordPressのデプロイ

10.0.1.10
# 作業用ディレクトリの作成
$ mkdir ~/work

# 作業用ディレクトリに移動
$ cd ~/work

# WordPressのダウンロード
$ wget https://ja.wordpress.org/latest-ja.tar.gz

# 展開
$ tar xzvf latest-ja.tar.gz

# 展開したwordpressディレクトリに移動
$ cd wordpress/

# ファイルをApacheのDocumentRootディレクトリ配下にコピー
$ sudo cp -r * /var/www/html/

# 所有者の変更
$ sudo chown apache:apache /var/www/html -R

# Apacheの再起動
$ sudo systemctl restart httpd

実際にアクセスして確認をする
http://54.249.79.116

参考

dkino
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした