概要
AWS学習目的で、下記記事のレシピを参考にAWS CLIでの環境構築を行う。
【Amazon3時間クッキング】材料費500円でAWSにWordPress環境を構築するレシピ ~part3~
この記事では以下の作業を行う。
- サブネットの作成(プライベートセグメント)
- キーペアの作成
- セキュリティグループの作成(DBサーバー用)
- ルールの追加
- EC2インスタンスの作成(DBサーバー用)
- NATゲートウェイの作成
- メインのルートテーブルにNATゲートウェイのルートを追加
- MySQLのインストール
- 初期設定
- データベース作成
- ユーザー作成と権限の設定
- WordPressのインストール
- PHPのインストール
- MySQL Clientのインストール
- WordPressのデプロイ
環境
- macOS Catalina
前提条件
- AWSアカウント
- AWS CLI
- aws configureで設定済み
- AWS CLIでWordPress環境を作成する~part1~の作業を実施
- AWS CLIでWordPress環境を作成する~part2~の作業を実施
構築
サブネットの作成(プライベートセグメント)
項目 | 値 |
---|---|
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