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

## 概要
AWS学習目的で、下記記事のレシピを参考にAWS CLIでの環境構築を行う。
[【Amazon3時間クッキング】材料費500円でAWSにWordPress環境を構築するレシピ ～part2～](https://qiita.com/blackriver/items/37ff5937d56e7d4c19bb)

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

- キーペアの作成
- セキュリティグループの作成（Webサーバー用）
 - ルールの追加
- EC2インスタンスの作成（Webサーバー用）
- Apacheのインストール

## 環境
- macOS Catalina

## 前提条件
- AWSアカウント
- AWS CLI
 - aws configureで設定済み
- [AWS CLIでWordPress環境を作成する~part1~]()の作業を実施済み

## 構築

### キーペアの作成
|項目|値|
|:--|:--|
|名前|test-key|
|秘密鍵のファイル名|test-key.pem|

```
# ~/.sshディレクトリが存在しない場合は作成
mkdir ~/.ssh

# 権限変更
chmod 700 ~/.ssh

# フォルダの移動
$ cd ~/.ssh

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

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

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

# 名前の設定
$ aws ec2 create-tags --resources vpc-07154996e6c851750 --tags Key=Name,Value=Web-Segment
```
####　ルールの追加
|タイプ|プロトコル|ポート範囲|ソース|
|:--|:--|:--|:--|
|SSH|TCP|22|0.0.0.0/0|
|HTTP|TCP|80|0.0.0.0/0|

```
# SSHの有効化
$ aws ec2 authorize-security-group-ingress --group-id sg-04520c52a1d8cc27f --protocol tcp --port 22 --cidr 0.0.0.0/0

# HTTPの有効化
$ aws ec2 authorize-security-group-ingress --group-id sg-04520c52a1d8cc27f --protocol tcp --port 80 --cidr 0.0.0.0/0
```

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

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

AMIのイメージIDは[ここ](https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-1#LaunchInstanceWizard:)で確認をする。

|項目|既定値|
|:--|:--|
|ストレージタイプ|gp2|
|ストレージサイズ|8G|
ストレージタイプやサイズなどは既定値で作成をする。

```
# EC2インスタンスの作成
$ aws ec2 run-instances --image-id ami-011facbea5ec0363b --count 1 --instance-type t2.micro --key-name test-key --security-group-ids sg-04520c52a1d8cc27f --subnet-id subnet-02558655ff2936296 --private-ip-address 10.0.1.10 --network-interfaces '[ { "DeviceIndex": 0, "AssociatePublicIpAddress": true } ]'
{
    "Groups": [],
    "Instances": [
        {
            "AmiLaunchIndex": 0,
            "ImageId": "ami-011facbea5ec0363b",
            "InstanceId": "i-006e5f99c93e59b6a",
            "InstanceType": "t2.micro",
            "KeyName": "test-key",
            "LaunchTime": "2020-02-11T04:06:17.000Z",
            "Monitoring": {
                "State": "disabled"
            },
            "Placement": {
                "AvailabilityZone": "ap-northeast-1c",
                "GroupName": "",
                "Tenancy": "default"
            },
            "PrivateDnsName": "ip-10-0-1-10.ap-northeast-1.compute.internal",
            "PrivateIpAddress": "10.0.1.10",
            "ProductCodes": [],
            "PublicDnsName": "",
            "State": {
                "Code": 0,
                "Name": "pending"
            },
            "StateTransitionReason": "",
            "SubnetId": "subnet-02558655ff2936296",
            "VpcId": "vpc-07154996e6c851750",
            "Architecture": "x86_64",
            "BlockDeviceMappings": [],
            "ClientToken": "",
            "EbsOptimized": false,
            "Hypervisor": "xen",
            "NetworkInterfaces": [
                {
                    "Attachment": {
                        "AttachTime": "2020-02-11T04:06:17.000Z",
                        "AttachmentId": "eni-attach-0b6cc084839510e3b",
                        "DeleteOnTermination": true,
                        "DeviceIndex": 0,
                        "Status": "attaching"
                    },
                    "Description": "",
                    "Groups": [
                        {
                            "GroupName": "Web-Segment",
                            "GroupId": "sg-04520c52a1d8cc27f"
                        }
                    ],
                    "Ipv6Addresses": [],
                    "MacAddress": "0a:d9:42:fc:f4:e4",
                    "NetworkInterfaceId": "eni-0ae3beb1595c7e0f1",
                    "OwnerId": "403733593576",
                    "PrivateIpAddress": "10.0.1.10",
                    "PrivateIpAddresses": [
                        {
                            "Primary": true,
                            "PrivateIpAddress": "10.0.1.10"
                        }
                    ],
                    "SourceDestCheck": true,
                    "Status": "in-use",
                    "SubnetId": "subnet-02558655ff2936296",
                    "VpcId": "vpc-07154996e6c851750",
                    "InterfaceType": "interface"
                }
            ],
            "RootDeviceName": "/dev/xvda",
            "RootDeviceType": "ebs",
            "SecurityGroups": [
                {
                    "GroupName": "Web-Segment",
                    "GroupId": "sg-04520c52a1d8cc27f"
                }
            ],
            "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-043b930eee6f8945b"
}

# 名前の設定
$ aws ec2 create-tags --resources i-006e5f99c93e59b6a --tags Key=Name,Value=Web-Server

# パブリックIPを出力
$ aws ec2 describe-instances --instance-id i-006e5f99c93e59b6a --query "Reservations[].Instances[][PublicIpAddress]"
[
    [
        "54.249.79.116"
    ]
]
```

### ssh接続する
```
$ ssh -i ~/.ssh/test-key.pem ec2-user@54.249.79.116
```

### Apacheのインストール
``` 10.0.1.10
# Apacheのインストール
$ sudo yum -y install httpd
 
# Apacheサービスの起動
$ sudo systemctl start httpd

# Apacheサービスのステータス確認
$ systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since 火 2020-02-11 04:08:49 UTC; 7s ago
     Docs: man:httpd.service(8)
 Main PID: 3616 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           ├─3616 /usr/sbin/httpd -DFOREGROUND
           ├─3617 /usr/sbin/httpd -DFOREGROUND
           ├─3618 /usr/sbin/httpd -DFOREGROUND
           ├─3619 /usr/sbin/httpd -DFOREGROUND
           ├─3620 /usr/sbin/httpd -DFOREGROUND
           └─3621 /usr/sbin/httpd -DFOREGROUND

 2月 11 04:08:49 ip-10-0-1-10.ap-northeast-1.compute.internal systemd[1]: St...
 2月 11 04:08:49 ip-10-0-1-10.ap-northeast-1.compute.internal systemd[1]: St...
Hint: Some lines were ellipsized, use -l to show in full.
```

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



## 参考
- [【Amazon3時間クッキング】材料費500円でAWSにWordPress環境を構築するレシピ ～part2～](https://qiita.com/blackriver/items/37ff5937d56e7d4c19bb)
- [Amazon EC2 キーペアの作成、表示、削除](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-services-ec2-keypairs.html)
- [Amazon EC2 のセキュリティグループの作成、設定、および削除](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-services-ec2-sg.html)
- [Amazon EC2 インスタンスの起動、一覧表示、および終了](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-services-ec2-instances.html)
- [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html)