0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「AWS Hands-on for Beginners スケーラブルウェブサイト構築編 」をAWS CLIでやってみる

Last updated at Posted at 2024-06-16

上記、「AWS Hands-on for Beginners 〜 スケーラブルウェブサイト構築編 〜」 をAWS CLIでやってみる
image.png
ハンズオンから引用

02 Amazon VPCの作成 ~ WordPress用Webサーバ・データベースを配置するための仮想ネットワークを作成する ~

変数設定

コマンド
# VPC名
VPC_NAME="handson-user1" \
&& echo ${VPC_NAME}

# 第1アベイラビリティーゾーンのパブリックサブネット名
AZ1_PUB_NAME="パブリックサブネット-1a" \
&& echo ${AZ1_PUB_NAME}

# 第2アベイラビリティーゾーンのパブリックサブネット名
AZ2_PUB_NAME="パブリックサブネット-1c" \
&& echo ${AZ2_PUB_NAME}

# 第1アベイラビリティーゾーンのプライベートサブネット名
AZ1_PRI_NAME="プライベートサブネット-1a" \
&& echo ${AZ1_PRI_NAME}

# 第2アベイラビリティーゾーンのプライベートサブネット名
AZ2_PRI_NAME="プライベートサブネット-1c" \
&& echo ${AZ2_PRI_NAME}

# IPv4 CIDR ブロック
VPC_CIDR_BLOCK="10.0.0.0/16" \
&& echo ${VPC_CIDR_BLOCK}

# 第1アベイラビリティーゾーンのパブリックサブネットCIDRブロック
AZ1_PUB_CIDR_BLOCK="10.0.0.0/24" \
&& echo ${AZ1_PUB_CIDR_BLOCK}

# 第2アベイラビリティーゾーンのパブリックサブネットCIDRブロック
AZ2_PUB_CIDR_BLOCK="10.0.1.0/24" \
&& echo ${AZ2_PUB_CIDR_BLOCK}

# 第1アベイラビリティーゾーンのプライベートサブネットCIDRブロック
AZ1_PRI_CIDR_BLOCK="10.0.2.0/24" \
&& echo ${AZ1_PRI_CIDR_BLOCK}

# 第2アベイラビリティーゾーンのプライベートサブネットCIDRブロック
AZ2_PRI_CIDR_BLOCK="10.0.3.0/24" \
&& echo ${AZ2_PRI_CIDR_BLOCK}

# アベイラビリティーゾーン
AZ_1="ap-northeast-1a" \
&& echo ${AZ_1}

AZ_2="ap-northeast-1c" \
&& echo ${AZ_1}

# インターネットゲートウェイ名
IGW_NAME=${VPC_NAME}-igw \
&& echo ${IGW_NAME}

# パブリックルートテーブル名
PUB_RT_NAME=${VPC_NAME}-rtb-public \
&& echo ${PUB_RT_NAME}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # VPC名
[cloudshell-user@ip-10-132-84-39 ~]$ VPC_NAME="handson-user1" \
> && echo ${VPC_NAME}
handson-user1
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # 第1アベイラビリティーゾーンのパブリックサブネット名
[cloudshell-user@ip-10-132-84-39 ~]$ AZ1_PUB_NAME="パブリックサブネット-1a" \
> && echo ${AZ1_PUB_NAME}
パブリックサブネット-1a
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # 第2アベイラビリティーゾーンのパブリックサブネット名
[cloudshell-user@ip-10-132-84-39 ~]$ AZ2_PUB_NAME="パブリックサブネット-1c" \
> && echo ${AZ2_PUB_NAME}
パブリックサブネット-1c
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # 第1アベイラビリティーゾーンのプライベートサブネット名
[cloudshell-user@ip-10-132-84-39 ~]$ AZ1_PRI_NAME="プライベートサブネット-1a" \
> && echo ${AZ1_PRI_NAME}
プライベートサブネット-1a
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # 第2アベイラビリティーゾーンのプライベートサブネット名
[cloudshell-user@ip-10-132-84-39 ~]$ AZ2_PRI_NAME="プライベートサブネット-1c" \
> && echo ${AZ2_PRI_NAME}
プライベートサブネット-1c
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # IPv4 CIDR ブロック
[cloudshell-user@ip-10-132-84-39 ~]$ VPC_CIDR_BLOCK="10.0.0.0/16" \
> && echo ${VPC_CIDR_BLOCK}
10.0.0.0/16
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # 第1アベイラビリティーゾーンのパブリックサブネットCIDRブロック
[cloudshell-user@ip-10-132-84-39 ~]$ AZ1_PUB_CIDR_BLOCK="10.0.0.0/24" \
> && echo ${AZ1_PUB_CIDR_BLOCK}
10.0.0.0/24
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # 第2アベイラビリティーゾーンのパブリックサブネットCIDRブロック
[cloudshell-user@ip-10-132-84-39 ~]$ AZ2_PUB_CIDR_BLOCK="10.0.1.0/24" \
> && echo ${AZ2_PUB_CIDR_BLOCK}
10.0.1.0/24
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # 第1アベイラビリティーゾーンのプライベートサブネットCIDRブロック
[cloudshell-user@ip-10-132-84-39 ~]$ AZ1_PRI_CIDR_BLOCK="10.0.2.0/24" \
> && echo ${AZ1_PRI_CIDR_BLOCK}
10.0.2.0/24
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # 第2アベイラビリティーゾーンのプライベートサブネットCIDRブロック
[cloudshell-user@ip-10-132-84-39 ~]$ AZ2_PRI_CIDR_BLOCK="10.0.3.0/24" \
> && echo ${AZ2_PRI_CIDR_BLOCK}
10.0.3.0/24
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # アベイラビリティーゾーン
[cloudshell-user@ip-10-132-84-39 ~]$ AZ_1="ap-northeast-1a" \
> && echo ${AZ_1}
ap-northeast-1a
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ AZ_2="ap-northeast-1c" \
> && echo ${AZ_1}
ap-northeast-1a
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # インターネットゲートウェイ名
[cloudshell-user@ip-10-132-84-39 ~]$ IGW_NAME=${VPC_NAME}-igw \
> && echo ${IGW_NAME}
handson-user1-igw
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # パブリックルートテーブル名
[cloudshell-user@ip-10-132-84-39 ~]$ PUB_RT_NAME=${VPC_NAME}-rtb-public \
> && echo ${PUB_RT_NAME}
handson-user1-rtb-public

VPC作成

作成

コマンド
# VPC作成
aws ec2 create-vpc \
    --cidr-block ${VPC_CIDR_BLOCK} \
    --tag-specifications "ResourceType=vpc,Tags=[{Key=Name,Value=${VPC_NAME}}]"

# ID取得
VPC_ID=$(
    aws ec2 describe-vpcs \
        --filters "Name=tag:Name,Values=${VPC_NAME}" \
        --query "Vpcs[0].VpcId" \
        --output text\
)\
&& echo ${VPC_ID}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # VPC作成
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 create-vpc \
>     --cidr-block ${VPC_CIDR_BLOCK} \
>     --tag-specifications "ResourceType=vpc,Tags=[{Key=Name,Value=${VPC_NAME}}]"
{
    "Vpc": {
        "CidrBlock": "10.0.0.0/16",
        "DhcpOptionsId": "dopt-0e7d97fbb33a62ce1",
        "State": "pending",
        "VpcId": "vpc-02b5fbe797028d4e8",
        "OwnerId": "999999999999",
        "InstanceTenancy": "default",
        "Ipv6CidrBlockAssociationSet": [],
        "CidrBlockAssociationSet": [
            {
                "AssociationId": "vpc-cidr-assoc-0a45cdae866f69969",
                "CidrBlock": "10.0.0.0/16",
                "CidrBlockState": {
                    "State": "associated"
                }
            }
        ],
        "IsDefault": false,
        "Tags": [
            {
                "Key": "Name",
                "Value": "handson-user1"
            }
        ]
    }
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ID取得
[cloudshell-user@ip-10-132-84-39 ~]$ VPC_ID=$(
>     aws ec2 describe-vpcs \
>         --filters "Name=tag:Name,Values=${VPC_NAME}" \
>         --query "Vpcs[0].VpcId" \
>         --output text\
> )\
> && echo ${VPC_ID}
vpc-02b5fbe797028d4e8

サブネット作成

コマンド
# 第1アベイラビリティーゾーンのパブリックサブネット
aws ec2 create-subnet \
    --vpc-id ${VPC_ID} \
    --cidr-block ${AZ1_PUB_CIDR_BLOCK} \
    --availability-zone ${AZ_1} \
    --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=${AZ1_PUB_NAME}}]"

# 第2アベイラビリティーゾーンのパブリックサブネット
aws ec2 create-subnet \
    --vpc-id ${VPC_ID} \
    --cidr-block ${AZ2_PUB_CIDR_BLOCK} \
    --availability-zone ${AZ_2} \
    --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=${AZ2_PUB_NAME}}]"

# 第1アベイラビリティーゾーンのプライベートサブネット
aws ec2 create-subnet \
    --vpc-id ${VPC_ID} \
    --cidr-block ${AZ1_PRI_CIDR_BLOCK} \
    --availability-zone ${AZ_1} \
    --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=${AZ1_PRI_NAME}}]"

# 第2アベイラビリティーゾーンのプライベートサブネット
aws ec2 create-subnet \
    --vpc-id ${VPC_ID} \
    --cidr-block ${AZ2_PRI_CIDR_BLOCK} \
    --availability-zone ${AZ_2} \
    --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=${AZ2_PRI_NAME}}]"

# ID取得
# 第1アベイラビリティーゾーンのパブリックサブネット
AZ1_PUB_ID=$( \
    aws ec2 describe-subnets \
      --filters Name=vpc-id,Values=${VPC_ID} \
                Name=tag:Name,Values="${AZ1_PUB_NAME}" \
      --query "Subnets[].SubnetId" \
      --output text \
) \
&& echo ${AZ1_PUB_ID}

# 第2アベイラビリティーゾーンのパブリックサブネット
AZ2_PUB_ID=$( \
    aws ec2 describe-subnets \
      --filters Name=vpc-id,Values=${VPC_ID} \
                Name=tag:Name,Values="${AZ2_PUB_NAME}" \
      --query "Subnets[].SubnetId" \
      --output text \
) \
&& echo ${AZ2_PUB_ID}

# 第1アベイラビリティーゾーンのプライベートサブネット
AZ1_PRI_ID=$( \
    aws ec2 describe-subnets \
      --filters Name=vpc-id,Values=${VPC_ID} \
                Name=tag:Name,Values="${AZ1_PRI_NAME}" \
      --query "Subnets[].SubnetId" \
      --output text \
) \
&& echo ${AZ1_PRI_ID}

# 第2アベイラビリティーゾーンのプライベートサブネット
AZ2_PRI_ID=$( \
    aws ec2 describe-subnets \
      --filters Name=vpc-id,Values=${VPC_ID} \
                Name=tag:Name,Values="${AZ2_PRI_NAME}" \
      --query "Subnets[].SubnetId" \
      --output text \
) \
&& echo ${AZ2_PRI_ID}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # 第1アベイラビリティーゾーンのパブリックサブネット
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 create-subnet \
>     --vpc-id ${VPC_ID} \
>     --cidr-block ${AZ1_PUB_CIDR_BLOCK} \
>     --availability-zone ${AZ_1} \
>     --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=${AZ1_PUB_NAME}}]"
{
    "Subnet": {
        "AvailabilityZone": "ap-northeast-1a",
        "AvailabilityZoneId": "apne1-az4",
        "AvailableIpAddressCount": 251,
        "CidrBlock": "10.0.0.0/24",
        "DefaultForAz": false,
        "MapPublicIpOnLaunch": false,
        "State": "available",
        "SubnetId": "subnet-09ce509c9397d5932",
        "VpcId": "vpc-02b5fbe797028d4e8",
        "OwnerId": "999999999999",
        "AssignIpv6AddressOnCreation": false,
        "Ipv6CidrBlockAssociationSet": [],
        "Tags": [
            {
                "Key": "Name",
                "Value": "パブリックサブネット-1a"
            }
        ],
        "SubnetArn": "arn:aws:ec2:ap-northeast-1:999999999999:subnet/subnet-09ce509c9397d5932",
        "EnableDns64": false,
        "Ipv6Native": false,
        "PrivateDnsNameOptionsOnLaunch": {
            "HostnameType": "ip-name",
            "EnableResourceNameDnsARecord": false,
            "EnableResourceNameDnsAAAARecord": false
        }
    }
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # 第2アベイラビリティーゾーンのパブリックサブネット
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 create-subnet \
>     --vpc-id ${VPC_ID} \
>     --cidr-block ${AZ2_PUB_CIDR_BLOCK} \
>     --availability-zone ${AZ_2} \
>     --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=${AZ2_PUB_NAME}}]"
{
    "Subnet": {
        "AvailabilityZone": "ap-northeast-1c",
        "AvailabilityZoneId": "apne1-az1",
        "AvailableIpAddressCount": 251,
        "CidrBlock": "10.0.1.0/24",
        "DefaultForAz": false,
        "MapPublicIpOnLaunch": false,
        "State": "available",
        "SubnetId": "subnet-0d31beb3e7dd1140d",
        "VpcId": "vpc-02b5fbe797028d4e8",
        "OwnerId": "999999999999",
        "AssignIpv6AddressOnCreation": false,
        "Ipv6CidrBlockAssociationSet": [],
        "Tags": [
            {
                "Key": "Name",
                "Value": "パブリックサブネット-1c"
            }
        ],
        "SubnetArn": "arn:aws:ec2:ap-northeast-1:999999999999:subnet/subnet-0d31beb3e7dd1140d",
        "EnableDns64": false,
        "Ipv6Native": false,
        "PrivateDnsNameOptionsOnLaunch": {
            "HostnameType": "ip-name",
            "EnableResourceNameDnsARecord": false,
            "EnableResourceNameDnsAAAARecord": false
        }
    }
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # 第1アベイラビリティーゾーンのプライベートサブネット
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 create-subnet \
>     --vpc-id ${VPC_ID} \
>     --cidr-block ${AZ1_PRI_CIDR_BLOCK} \
>     --availability-zone ${AZ_1} \
>     --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=${AZ1_PRI_NAME}}]"
{
    "Subnet": {
        "AvailabilityZone": "ap-northeast-1a",
        "AvailabilityZoneId": "apne1-az4",
        "AvailableIpAddressCount": 251,
        "CidrBlock": "10.0.2.0/24",
        "DefaultForAz": false,
        "MapPublicIpOnLaunch": false,
        "State": "available",
        "SubnetId": "subnet-04ef02ee504c79f77",
        "VpcId": "vpc-02b5fbe797028d4e8",
        "OwnerId": "999999999999",
        "AssignIpv6AddressOnCreation": false,
        "Ipv6CidrBlockAssociationSet": [],
        "Tags": [
            {
                "Key": "Name",
                "Value": "プライベートサブネット-1a"
            }
        ],
        "SubnetArn": "arn:aws:ec2:ap-northeast-1:999999999999:subnet/subnet-04ef02ee504c79f77",
        "EnableDns64": false,
        "Ipv6Native": false,
        "PrivateDnsNameOptionsOnLaunch": {
            "HostnameType": "ip-name",
            "EnableResourceNameDnsARecord": false,
            "EnableResourceNameDnsAAAARecord": false
        }
    }
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # 第2アベイラビリティーゾーンのプライベートサブネット
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 create-subnet \
>     --vpc-id ${VPC_ID} \
>     --cidr-block ${AZ2_PRI_CIDR_BLOCK} \
>     --availability-zone ${AZ_2} \
>     --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=${AZ2_PRI_NAME}}]"
{
    "Subnet": {
        "AvailabilityZone": "ap-northeast-1c",
        "AvailabilityZoneId": "apne1-az1",
        "AvailableIpAddressCount": 251,
        "CidrBlock": "10.0.3.0/24",
        "DefaultForAz": false,
        "MapPublicIpOnLaunch": false,
        "State": "available",
        "SubnetId": "subnet-06ddf6a468a549ff8",
        "VpcId": "vpc-02b5fbe797028d4e8",
        "OwnerId": "999999999999",
        "AssignIpv6AddressOnCreation": false,
        "Ipv6CidrBlockAssociationSet": [],
        "Tags": [
            {
                "Key": "Name",
                "Value": "プライベートサブネット-1c"
            }
        ],
        "SubnetArn": "arn:aws:ec2:ap-northeast-1:999999999999:subnet/subnet-06ddf6a468a549ff8",
        "EnableDns64": false,
        "Ipv6Native": false,
        "PrivateDnsNameOptionsOnLaunch": {
            "HostnameType": "ip-name",
            "EnableResourceNameDnsARecord": false,
            "EnableResourceNameDnsAAAARecord": false
        }
    }
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ID取得
[cloudshell-user@ip-10-132-84-39 ~]$ # 第1アベイラビリティーゾーンのパブリックサブネット
[cloudshell-user@ip-10-132-84-39 ~]$ AZ1_PUB_ID=$( \
>     aws ec2 describe-subnets \
>       --filters Name=vpc-id,Values=${VPC_ID} \
>                 Name=tag:Name,Values="${AZ1_PUB_NAME}" \
>       --query "Subnets[].SubnetId" \
>       --output text \
> ) \
> && echo ${AZ1_PUB_ID}
subnet-09ce509c9397d5932
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # 第2アベイラビリティーゾーンのパブリックサブネット
[cloudshell-user@ip-10-132-84-39 ~]$ AZ2_PUB_ID=$( \
>     aws ec2 describe-subnets \
>       --filters Name=vpc-id,Values=${VPC_ID} \
>                 Name=tag:Name,Values="${AZ2_PUB_NAME}" \
>       --query "Subnets[].SubnetId" \
>       --output text \
> ) \
> && echo ${AZ2_PUB_ID}
subnet-0d31beb3e7dd1140d
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # 第1アベイラビリティーゾーンのプライベートサブネット
[cloudshell-user@ip-10-132-84-39 ~]$ AZ1_PRI_ID=$( \
>     aws ec2 describe-subnets \
>       --filters Name=vpc-id,Values=${VPC_ID} \
>                 Name=tag:Name,Values="${AZ1_PRI_NAME}" \
>       --query "Subnets[].SubnetId" \
>       --output text \
> ) \
> && echo ${AZ1_PRI_ID}
subnet-04ef02ee504c79f77
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # 第2アベイラビリティーゾーンのプライベートサブネット
[cloudshell-user@ip-10-132-84-39 ~]$ AZ2_PRI_ID=$( \
>     aws ec2 describe-subnets \
>       --filters Name=vpc-id,Values=${VPC_ID} \
>                 Name=tag:Name,Values="${AZ2_PRI_NAME}" \
>       --query "Subnets[].SubnetId" \
>       --output text \
> ) \
> && echo ${AZ2_PRI_ID}
subnet-06ddf6a468a549ff8

インターネットゲートウェイ作成

コマンド
# インターネットゲートウェイ作成
aws ec2 create-internet-gateway \
    --tag-specifications "ResourceType=internet-gateway,Tags=[{Key=Name,Value=${IGW_NAME}}]"

# インターネットゲートウェイID取得
IGW_ID=$(
    aws ec2 describe-internet-gateways \
        --filters Name=tag:Name,Values=${IGW_NAME} \
        --query "InternetGateways[].InternetGatewayId" \
        --output text
) \
&& echo ${IGW_ID}

# インターネットゲートウェイをVPCにアタッチ
aws ec2 attach-internet-gateway \
    --vpc-id ${VPC_ID} \
    --internet-gateway-id ${IGW_ID}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # インターネットゲートウェイ作成
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 create-internet-gateway \
>     --tag-specifications "ResourceType=internet-gateway,Tags=[{Key=Name,Value=${IGW_NAME}}]"
{
    "InternetGateway": {
        "Attachments": [],
        "InternetGatewayId": "igw-0bc2bedb86a7c059b",
        "OwnerId": "999999999999",
        "Tags": [
            {
                "Key": "Name",
                "Value": "handson-user1-igw"
            }
        ]
    }
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # インターネットゲートウェイID取得
[cloudshell-user@ip-10-132-84-39 ~]$ IGW_ID=$(
>     aws ec2 describe-internet-gateways \
>         --filters Name=tag:Name,Values=${IGW_NAME} \
>         --query "InternetGateways[].InternetGatewayId" \
>         --output text
> ) \
> && echo ${IGW_ID}
igw-0bc2bedb86a7c059b
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # インターネットゲートウェイをVPCにアタッチ
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 attach-internet-gateway \
>     --vpc-id ${VPC_ID} \
>     --internet-gateway-id ${IGW_ID}

ルートテーブル作成

コマンド
# ルートテーブル作成
aws ec2 create-route-table \
    --vpc-id ${VPC_ID} \
    --tag-specifications "ResourceType=route-table,Tags=[{Key=Name,Value=${PUB_RT_NAME}}]"

# ルートテーブルID取得
PUB_RT_ID=$(
    aws ec2 describe-route-tables \
        --filters Name=vpc-id,Values=${VPC_ID} \
                  Name=tag:Name,Values="${PUB_RT_NAME}" \
        --query "RouteTables[].RouteTableId" \
        --output text
) \
&& echo ${PUB_RT_ID}

# デフォルトルート作成
aws ec2 create-route \
    --route-table-id ${PUB_RT_ID} \
    --destination-cidr-block 0.0.0.0/0 \
    --gateway-id ${IGW_ID}

# サブネット関連付け
aws ec2 associate-route-table \
    --subnet-id ${AZ1_PUB_ID} \
    --route-table-id ${PUB_RT_ID}

aws ec2 associate-route-table \
    --subnet-id ${AZ2_PUB_ID} \
    --route-table-id ${PUB_RT_ID}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # ルートテーブル作成
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 create-route-table \
>     --vpc-id ${VPC_ID} \
>     --tag-specifications "ResourceType=route-table,Tags=[{Key=Name,Value=${PUB_RT_NAME}}]"
{
    "RouteTable": {
        "Associations": [],
        "PropagatingVgws": [],
        "RouteTableId": "rtb-051e6d5d9d55a2d2a",
        "Routes": [
            {
                "DestinationCidrBlock": "10.0.0.0/16",
                "GatewayId": "local",
                "Origin": "CreateRouteTable",
                "State": "active"
            }
        ],
        "Tags": [
            {
                "Key": "Name",
                "Value": "handson-user1-rtb-public"
            }
        ],
        "VpcId": "vpc-02b5fbe797028d4e8",
        "OwnerId": "999999999999"
    },
    "ClientToken": "1649375e-0e85-4830-b5d4-a4852f2e27eb"
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ルートテーブルID取得
[cloudshell-user@ip-10-132-84-39 ~]$ PUB_RT_ID=$(
>     aws ec2 describe-route-tables \
>         --filters Name=vpc-id,Values=${VPC_ID} \
>                   Name=tag:Name,Values="${PUB_RT_NAME}" \
>         --query "RouteTables[].RouteTableId" \
>         --output text
> ) \
> && echo ${PUB_RT_ID}
rtb-051e6d5d9d55a2d2a
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # デフォルトルート作成
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 create-route \
>     --route-table-id ${PUB_RT_ID} \
>     --destination-cidr-block 0.0.0.0/0 \
>     --gateway-id ${IGW_ID}
{
    "Return": true
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # サブネット関連付け
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 associate-route-table \
>     --subnet-id ${AZ1_PUB_ID} \
>     --route-table-id ${PUB_RT_ID}
{
    "AssociationId": "rtbassoc-06a12f53a757f34d7",
    "AssociationState": {
        "State": "associated"
    }
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 associate-route-table \
>     --subnet-id ${AZ2_PUB_ID} \
>     --route-table-id ${PUB_RT_ID}
{
    "AssociationId": "rtbassoc-0e33b19b48ec49eec",
    "AssociationState": {
        "State": "associated"
    }
}

2. 03 Amazon EC2の作成 ~ WordPressがインストールされたWebサーバを作成する ~

変数

コマンド
# EC2インスタンス名 1
EC2_NAME_1="webserver#1-user1" \
&& echo ${EC2_NAME_1}

# インスタンスタイプ
EC2_INSTANCE_TYPE="t2.micro" \
&& echo ${EC2_INSTANCE_TYPE}

# Amazon マシンイメージ (AMI)
EC2_IMAGE_ID="resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2" \
&& echo ${EC2_IMAGE_ID}

# EC2セキュリティグループ名
EC2_SECURITY_GROUP_NAME='web-user1' \
&& echo ${EC2_SECURITY_GROUP_NAME}

# EC2セキュリティグループ説明
EC2_SECURITY_GROUP_DESCRIPTION='web-user1' \
&& echo ${EC2_SECURITY_GROUP_DESCRIPTION}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # EC2インスタンス名 1
[cloudshell-user@ip-10-132-84-39 ~]$ EC2_NAME_1="webserver#1-user1" \
> && echo ${EC2_NAME_1}
webserver#1-user1
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # インスタンスタイプ
[cloudshell-user@ip-10-132-84-39 ~]$ EC2_INSTANCE_TYPE="t2.micro" \
> && echo ${EC2_INSTANCE_TYPE}
t2.micro
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # Amazon マシンイメージ (AMI)
[cloudshell-user@ip-10-132-84-39 ~]$ EC2_IMAGE_ID="resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2" \
> && echo ${EC2_IMAGE_ID}
resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # EC2セキュリティグループ名
[cloudshell-user@ip-10-132-84-39 ~]$ EC2_SECURITY_GROUP_NAME='web-user1' \
> && echo ${EC2_SECURITY_GROUP_NAME}
web-user1
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # EC2セキュリティグループ説明
[cloudshell-user@ip-10-132-84-39 ~]$ EC2_SECURITY_GROUP_DESCRIPTION='web-user1' \
> && echo ${EC2_SECURITY_GROUP_DESCRIPTION}
web-user1

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

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

コマンド
# セキュリティグループ作成
aws ec2 create-security-group \
    --group-name ${EC2_SECURITY_GROUP_NAME} \
    --description ${EC2_SECURITY_GROUP_DESCRIPTION} \
    --vpc-id ${VPC_ID}

# ID取得
EC2_SECURITY_GROUP_ID=$( \
    aws ec2 describe-security-groups \
        --filters Name=vpc-id,Values=${VPC_ID} \
                  Name=group-name,Values=${EC2_SECURITY_GROUP_NAME} \
        --query "SecurityGroups[].GroupId" \
        --output text \
) \
&& echo ${EC2_SECURITY_GROUP_ID}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # セキュリティグループ作成
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 create-security-group \
>     --group-name ${EC2_SECURITY_GROUP_NAME} \
>     --description ${EC2_SECURITY_GROUP_DESCRIPTION} \
>     --vpc-id ${VPC_ID}
{
    "GroupId": "sg-0f13aa5ebac4e8118"
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ID取得
[cloudshell-user@ip-10-132-84-39 ~]$ EC2_SECURITY_GROUP_ID=$( \
>     aws ec2 describe-security-groups \
>         --filters Name=vpc-id,Values=${VPC_ID} \
>                   Name=group-name,Values=${EC2_SECURITY_GROUP_NAME} \
>         --query "SecurityGroups[].GroupId" \
>         --output text \
> ) \
> && echo ${EC2_SECURITY_GROUP_ID}
sg-0f13aa5ebac4e8118

ルール追加

コマンド
# ルール追加
aws ec2 authorize-security-group-ingress \
    --group-id ${EC2_SECURITY_GROUP_ID} \
    --protocol tcp \
    --port 22 \
    --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress \
    --group-id ${EC2_SECURITY_GROUP_ID} \
    --protocol tcp \
    --port 80 \
    --cidr 0.0.0.0/0

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # ルール追加
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 authorize-security-group-ingress \
>     --group-id ${EC2_SECURITY_GROUP_ID} \
>     --protocol tcp \
>     --port 22 \
>     --cidr 0.0.0.0/0
{
    "Return": true,
    "SecurityGroupRules": [
        {
            "SecurityGroupRuleId": "sgr-07ceea7e3395ffb73",
            "GroupId": "sg-0f13aa5ebac4e8118",
            "GroupOwnerId": "999999999999",
            "IsEgress": false,
            "IpProtocol": "tcp",
            "FromPort": 22,
            "ToPort": 22,
            "CidrIpv4": "0.0.0.0/0"
        }
    ]
}
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 authorize-security-group-ingress \
>     --group-id ${EC2_SECURITY_GROUP_ID} \
>     --protocol tcp \
>     --port 80 \
>     --cidr 0.0.0.0/0
{
    "Return": true,
    "SecurityGroupRules": [
        {
            "SecurityGroupRuleId": "sgr-021c732d1c3d1cb17",
            "GroupId": "sg-0f13aa5ebac4e8118",
            "GroupOwnerId": "999999999999",
            "IsEgress": false,
            "IpProtocol": "tcp",
            "FromPort": 80,
            "ToPort": 80,
            "CidrIpv4": "0.0.0.0/0"
        }
    ]
}

EC2作成

ユーザーデータ作成(ヒアドキュメント)

※スクリプトはハンズオンから引用

コマンド
cat << 'EOF' > user_data.txt
#!/bin/bash

yum -y update
yum -y install php httpd mysql

PHP_VERSION=`php -v | head -n 1 | awk '{print $2}' | awk -F "." '{print $1}'`
while [  ${PHP_VERSION} -ne 7 ]
do
amazon-linux-extras install php7.4 -y
PHP_VERSION=`php -v | head -n 1 | awk '{print $2}' | awk -F "." '{print $1}'`
done

yum -y install php-mbstring php-xml

wget http://ja.wordpress.org/latest-ja.tar.gz -P /tmp/
tar zxvf /tmp/latest-ja.tar.gz -C /tmp
cp -r /tmp/wordpress/* /var/www/html/
chown apache:apache -R /var/www/html

systemctl enable httpd.service
systemctl start httpd.service
EOF

出力
[cloudshell-user@ip-10-132-84-39 ~]$ cat << 'EOF' > user_data.txt
> #!/bin/bash
> 
> yum -y update
> yum -y install php httpd mysql
> 
> PHP_VERSION=`php -v | head -n 1 | awk '{print $2}' | awk -F "." '{print $1}'`
> while [  ${PHP_VERSION} -ne 7 ]
> do
> amazon-linux-extras install php7.4 -y
> PHP_VERSION=`php -v | head -n 1 | awk '{print $2}' | awk -F "." '{print $1}'`
> done
> 
> yum -y install php-mbstring php-xml
> 
> wget http://ja.wordpress.org/latest-ja.tar.gz -P /tmp/
> tar zxvf /tmp/latest-ja.tar.gz -C /tmp
> cp -r /tmp/wordpress/* /var/www/html/
> chown apache:apache -R /var/www/html
> 
> systemctl enable httpd.service
> systemctl start httpd.service
> EOF

EC2作成

コマンド
# EC2インスタンス作成
aws ec2 run-instances \
    --image-id ${EC2_IMAGE_ID} \
    --instance-type ${EC2_INSTANCE_TYPE} \
    --security-group-ids ${EC2_SECURITY_GROUP_ID} \
    --subnet-id ${AZ1_PUB_ID} \
    --associate-public-ip-address \
    --user-data file://user_data.txt \
    --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${EC2_NAME_1}}]" \
    --no-cli-pager

# インスタンスID
EC2_ID_1=$( \
    aws ec2 describe-instances \
        --filters Name=tag:Name,Values=${EC2_NAME_1}  \
        --query "Reservations[*].Instances[*].[InstanceId]" \
        --output text
) \
&& echo ${EC2_ID_1}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # EC2インスタンス作成
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 run-instances \
>     --image-id ${EC2_IMAGE_ID} \
>     --instance-type ${EC2_INSTANCE_TYPE} \
>     --security-group-ids ${EC2_SECURITY_GROUP_ID} \
>     --subnet-id ${AZ1_PUB_ID} \
>     --associate-public-ip-address \
>     --user-data file://user_data.txt \
>     --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${EC2_NAME_1}}]" \
>     --no-cli-pager
{
    "Groups": [],
    "Instances": [
        {
            "AmiLaunchIndex": 0,
            "ImageId": "ami-07281c2a30e5bc1ab",
            "InstanceId": "i-0ed3b54d25b834102",
            "InstanceType": "t2.micro",
            "LaunchTime": "2024-08-25T09:30:45+00:00",
            "Monitoring": {
                "State": "disabled"
            },
            "Placement": {
                "AvailabilityZone": "ap-northeast-1a",
                "GroupName": "",
                "Tenancy": "default"
            },
            "PrivateDnsName": "ip-10-0-0-6.ap-northeast-1.compute.internal",
            "PrivateIpAddress": "10.0.0.6",
            "ProductCodes": [],
            "PublicDnsName": "",
            "State": {
                "Code": 0,
                "Name": "pending"
            },
            "StateTransitionReason": "",
            "SubnetId": "subnet-09ce509c9397d5932",
            "VpcId": "vpc-02b5fbe797028d4e8",
            "Architecture": "x86_64",
            "BlockDeviceMappings": [],
            "ClientToken": "d47d36a4-8ec1-4a44-a809-5f8958c4f5d1",
            "EbsOptimized": false,
            "EnaSupport": true,
            "Hypervisor": "xen",
            "NetworkInterfaces": [
                {
                    "Attachment": {
                        "AttachTime": "2024-08-25T09:30:45+00:00",
                        "AttachmentId": "eni-attach-07f3f68205eb1c46b",
                        "DeleteOnTermination": true,
                        "DeviceIndex": 0,
                        "Status": "attaching",
                        "NetworkCardIndex": 0
                    },
                    "Description": "",
                    "Groups": [
                        {
                            "GroupName": "web-user1",
                            "GroupId": "sg-0f13aa5ebac4e8118"
                        }
                    ],
                    "Ipv6Addresses": [],
                    "MacAddress": "06:96:9d:da:85:7b",
                    "NetworkInterfaceId": "eni-0f0b55cacbdf977b8",
                    "OwnerId": "999999999999",
                    "PrivateIpAddress": "10.0.0.6",
                    "PrivateIpAddresses": [
                        {
                            "Primary": true,
                            "PrivateIpAddress": "10.0.0.6"
                        }
                    ],
                    "SourceDestCheck": true,
                    "Status": "in-use",
                    "SubnetId": "subnet-09ce509c9397d5932",
                    "VpcId": "vpc-02b5fbe797028d4e8",
                    "InterfaceType": "interface"
                }
            ],
            "RootDeviceName": "/dev/xvda",
            "RootDeviceType": "ebs",
            "SecurityGroups": [
                {
                    "GroupName": "web-user1",
                    "GroupId": "sg-0f13aa5ebac4e8118"
                }
            ],
            "SourceDestCheck": true,
            "StateReason": {
                "Code": "pending",
                "Message": "pending"
            },
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "webserver#1-user1"
                }
            ],
            "VirtualizationType": "hvm",
            "CpuOptions": {
                "CoreCount": 1,
                "ThreadsPerCore": 1
            },
            "CapacityReservationSpecification": {
                "CapacityReservationPreference": "open"
            },
            "MetadataOptions": {
                "State": "pending",
                "HttpTokens": "optional",
                "HttpPutResponseHopLimit": 1,
                "HttpEndpoint": "enabled",
                "HttpProtocolIpv6": "disabled",
                "InstanceMetadataTags": "disabled"
            },
            "EnclaveOptions": {
                "Enabled": false
            },
            "PrivateDnsNameOptions": {
                "HostnameType": "ip-name",
                "EnableResourceNameDnsARecord": false,
                "EnableResourceNameDnsAAAARecord": false
            },
            "MaintenanceOptions": {
                "AutoRecovery": "default"
            },
            "CurrentInstanceBootMode": "legacy-bios"
        }
    ],
    "OwnerId": "999999999999",
    "ReservationId": "r-0c5a6693ae8fcc07e"
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # インスタンスID
[cloudshell-user@ip-10-132-84-39 ~]$ EC2_ID_1=$( \
>     aws ec2 describe-instances \
>         --filters Name=tag:Name,Values=${EC2_NAME_1}  \
>         --query "Reservations[*].Instances[*].[InstanceId]" \
>         --output text
> ) \
> && echo ${EC2_ID_1}
i-0ed3b54d25b834102

3. 04 Amazon RDSの作成 ~ WordPress用のMySQLデータベースを作成する~

変数設定

コマンド
# DBセキュリティグループ名
# DBセキュリティグループ名
RDS_SG_NAME='db-user1' \
&& echo ${RDS_SG_NAME}

# DBセキュリティグループ説明
RDS_SG_DESC='RDS for MySQL' \
&& echo ${RDS_SG_DESC}

# サブネットグループ名
DB_SUBNET_GROUP_NAME='db-subnet-user1' \
&& echo ${DB_SUBNET_GROUP_NAME}

# サブネットグループ説明
DB_SUBNET_GROUP_DESC='RDS for MySQL' \
&& echo ${DB_SUBNET_GROUP_DESC}

# DB インスタンス識別子
DB_INSTANCE_IDENTIFIER='db-user1' \
&& echo ${DB_INSTANCE_IDENTIFIER}

# 最初のデータベース名
DB_NAME="wordpress" \
&& echo ${DB_NAME}

# インスタンスクラス
DB_INSTANCE_CLASS="db.t3.micro" \
&& echo ${DB_INSTANCE_CLASS}

# エンジンのタイプ
ENGINE="mysql" \
&& echo ${ENGINE}

# マスターユーザー名
MASTER_USERNAME="admin" \
&& echo ${MASTER_USERNAME}

# マスターパスワード
MASTER_USER_PASSWORD=$(< /dev/urandom tr -dc 'A-Za-z0-9' | head -c12) \
&& echo ${MASTER_USER_PASSWORD}

# ストレージ割り当て
ALLOCATED_STORAGE=20 \
&& echo ${ALLOCATED_STORAGE}

# 最大ストレージしきい値
MAX_ALLOCATED_STORAGE=1000 \
&& echo ${MAX_ALLOCATED_STORAGE}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # DBセキュリティグループ名
[cloudshell-user@ip-10-132-84-39 ~]$ RDS_SG_NAME='db-user1' \
> && echo ${RDS_SG_NAME}
db-user1
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # DBセキュリティグループ説明
[cloudshell-user@ip-10-132-84-39 ~]$ RDS_SG_DESC='RDS for MySQL' \
> && echo ${RDS_SG_DESC}
RDS for MySQL
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # サブネットグループ名
[cloudshell-user@ip-10-132-84-39 ~]$ DB_SUBNET_GROUP_NAME='db-subnet-user1' \
> && echo ${DB_SUBNET_GROUP_NAME}
db-subnet-user1
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # サブネットグループ説明
[cloudshell-user@ip-10-132-84-39 ~]$ DB_SUBNET_GROUP_DESC='RDS for MySQL' \
> && echo ${DB_SUBNET_GROUP_DESC}
RDS for MySQL
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # DB インスタンス識別子
[cloudshell-user@ip-10-132-84-39 ~]$ DB_INSTANCE_IDENTIFIER='db-user1' \
> && echo ${DB_INSTANCE_IDENTIFIER}
db-user1
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # 最初のデータベース名
[cloudshell-user@ip-10-132-84-39 ~]$ DB_NAME="wordpress" \
> && echo ${DB_NAME}
wordpress
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # インスタンスクラス
[cloudshell-user@ip-10-132-84-39 ~]$ DB_INSTANCE_CLASS="db.t3.micro" \
> && echo ${DB_INSTANCE_CLASS}
db.t3.micro
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # エンジンのタイプ
[cloudshell-user@ip-10-132-84-39 ~]$ ENGINE="mysql" \
> && echo ${ENGINE}
mysql
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # マスターユーザー名
[cloudshell-user@ip-10-132-84-39 ~]$ MASTER_USERNAME="admin" \
> && echo ${MASTER_USERNAME}
admin
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # マスターパスワード
[cloudshell-user@ip-10-132-84-39 ~]$ MASTER_USER_PASSWORD=$(< /dev/urandom tr -dc 'A-Za-z0-9' | head -c12) \
> && echo ${MASTER_USER_PASSWORD}
AjO5PqEZI6IX
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ストレージ割り当て
[cloudshell-user@ip-10-132-84-39 ~]$ ALLOCATED_STORAGE=20 \
> && echo ${ALLOCATED_STORAGE}
20
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # 最大ストレージしきい値
[cloudshell-user@ip-10-132-84-39 ~]$ MAX_ALLOCATED_STORAGE=1000 \
> && echo ${MAX_ALLOCATED_STORAGE}
1000

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

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

コマンド
# セキュリティグループ作成
aws ec2 create-security-group \
    --group-name ${RDS_SG_NAME} \
    --description "${RDS_SG_DESC}" \
    --vpc-id ${VPC_ID}

# ID取得
RDS_SG_ID=$( \
    aws ec2 describe-security-groups \
        --filters Name=vpc-id,Values=${VPC_ID} \
                  Name=group-name,Values=${RDS_SG_NAME} \
        --query "SecurityGroups[].GroupId" \
        --output text
) \
&& echo ${RDS_SG_ID}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # セキュリティグループ作成
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 create-security-group \
>     --group-name ${RDS_SG_NAME} \
>     --description "${RDS_SG_DESC}" \
>     --vpc-id ${VPC_ID}
{
    "GroupId": "sg-08c2854a9b34f089b"
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ID取得
[cloudshell-user@ip-10-132-84-39 ~]$ RDS_SG_ID=$( \
>     aws ec2 describe-security-groups \
>         --filters Name=vpc-id,Values=${VPC_ID} \
>                   Name=group-name,Values=${RDS_SG_NAME} \
>         --query "SecurityGroups[].GroupId" \
>         --output text
> ) \
> && echo ${RDS_SG_ID}
sg-08c2854a9b34f089b

ルール追加

コマンド
# ルール追加
aws ec2 authorize-security-group-ingress \
    --group-id ${RDS_SG_ID} \
    --protocol tcp \
    --port 3306 \
    --source-group ${EC2_SECURITY_GROUP_ID}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # ルール追加
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 authorize-security-group-ingress \
>     --group-id ${RDS_SG_ID} \
>     --protocol tcp \
>     --port 3306 \
>     --source-group ${EC2_SECURITY_GROUP_ID}
{
    "Return": true,
    "SecurityGroupRules": [
        {
            "SecurityGroupRuleId": "sgr-00e4182d98008e519",
            "GroupId": "sg-08c2854a9b34f089b",
            "GroupOwnerId": "999999999999",
            "IsEgress": false,
            "IpProtocol": "tcp",
            "FromPort": 3306,
            "ToPort": 3306,
            "ReferencedGroupInfo": {
                "GroupId": "sg-0f13aa5ebac4e8118",
                "UserId": "999999999999"
            }
        }
    ]
}

サブネットグループ作成

コマンド
aws rds create-db-subnet-group \
    --db-subnet-group-name ${DB_SUBNET_GROUP_NAME} \
    --db-subnet-group-description "${DB_SUBNET_GROUP_DESC}" \
    --subnet-ids ${AZ1_PRI_ID} ${AZ2_PRI_ID}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ aws rds create-db-subnet-group \
>     --db-subnet-group-name ${DB_SUBNET_GROUP_NAME} \
>     --db-subnet-group-description "${DB_SUBNET_GROUP_DESC}" \
>     --subnet-ids ${AZ1_PRI_ID} ${AZ2_PRI_ID}
{
    "DBSubnetGroup": {
        "DBSubnetGroupName": "db-subnet-user1",
        "DBSubnetGroupDescription": "RDS for MySQL",
        "VpcId": "vpc-02b5fbe797028d4e8",
        "SubnetGroupStatus": "Complete",
        "Subnets": [
            {
                "SubnetIdentifier": "subnet-04ef02ee504c79f77",
                "SubnetAvailabilityZone": {
                    "Name": "ap-northeast-1a"
                },
                "SubnetOutpost": {},
                "SubnetStatus": "Active"
            },
            {
                "SubnetIdentifier": "subnet-06ddf6a468a549ff8",
                "SubnetAvailabilityZone": {
                    "Name": "ap-northeast-1c"
                },
                "SubnetOutpost": {},
                "SubnetStatus": "Active"
            }
        ],
        "DBSubnetGroupArn": "arn:aws:rds:ap-northeast-1:999999999999:subgrp:db-subnet-user1",
        "SupportedNetworkTypes": [
            "IPV4"
        ]
    }
}

RDS作成

コマンド
aws rds create-db-instance \
    --db-name ${DB_NAME} \
    --db-instance-identifier ${DB_INSTANCE_IDENTIFIER} \
    --allocated-storage ${ALLOCATED_STORAGE} \
    --db-instance-class ${DB_INSTANCE_CLASS} \
    --engine ${ENGINE} \
    --master-username ${MASTER_USERNAME} \
    --master-user-password ${MASTER_USER_PASSWORD} \
    --vpc-security-group-ids ${RDS_SG_ID} \
    --availability-zone ${AZ_1} \
    --db-subnet-group-name ${DB_SUBNET_GROUP_NAME} \
    --backup-retention-period 0 \
    --no-publicly-accessible \
    --max-allocated-storage ${MAX_ALLOCATED_STORAGE} \
    --storage-encrypted \
    --no-cli-pager

出力
[cloudshell-user@ip-10-132-84-39 ~]$ aws rds create-db-instance \
>     --db-name ${DB_NAME} \
>     --db-instance-identifier ${DB_INSTANCE_IDENTIFIER} \
>     --allocated-storage ${ALLOCATED_STORAGE} \
>     --db-instance-class ${DB_INSTANCE_CLASS} \
>     --engine ${ENGINE} \
>     --master-username ${MASTER_USERNAME} \
>     --master-user-password ${MASTER_USER_PASSWORD} \
>     --vpc-security-group-ids ${RDS_SG_ID} \
>     --availability-zone ${AZ_1} \
>     --db-subnet-group-name ${DB_SUBNET_GROUP_NAME} \
>     --backup-retention-period 0 \
>     --no-publicly-accessible \
>     --max-allocated-storage ${MAX_ALLOCATED_STORAGE} \
>     --storage-encrypted \
>     --no-cli-pager
{
    "DBInstance": {
        "DBInstanceIdentifier": "db-user1",
        "DBInstanceClass": "db.t3.micro",
        "Engine": "mysql",
        "DBInstanceStatus": "creating",
        "MasterUsername": "admin",
        "DBName": "wordpress",
        "AllocatedStorage": 20,
        "PreferredBackupWindow": "13:43-14:13",
        "BackupRetentionPeriod": 0,
        "DBSecurityGroups": [],
        "VpcSecurityGroups": [
            {
                "VpcSecurityGroupId": "sg-08c2854a9b34f089b",
                "Status": "active"
            }
        ],
        "DBParameterGroups": [
            {
                "DBParameterGroupName": "default.mysql8.0",
                "ParameterApplyStatus": "in-sync"
            }
        ],
        "AvailabilityZone": "ap-northeast-1a",
        "DBSubnetGroup": {
            "DBSubnetGroupName": "db-subnet-user1",
            "DBSubnetGroupDescription": "RDS for MySQL",
            "VpcId": "vpc-02b5fbe797028d4e8",
            "SubnetGroupStatus": "Complete",
            "Subnets": [
                {
                    "SubnetIdentifier": "subnet-04ef02ee504c79f77",
                    "SubnetAvailabilityZone": {
                        "Name": "ap-northeast-1a"
                    },
                    "SubnetOutpost": {},
                    "SubnetStatus": "Active"
                },
                {
                    "SubnetIdentifier": "subnet-06ddf6a468a549ff8",
                    "SubnetAvailabilityZone": {
                        "Name": "ap-northeast-1c"
                    },
                    "SubnetOutpost": {},
                    "SubnetStatus": "Active"
                }
            ]
        },
        "PreferredMaintenanceWindow": "sun:15:03-sun:15:33",
        "PendingModifiedValues": {
            "MasterUserPassword": "****"
        },
        "MultiAZ": false,
        "EngineVersion": "8.0.35",
        "AutoMinorVersionUpgrade": true,
        "ReadReplicaDBInstanceIdentifiers": [],
        "LicenseModel": "general-public-license",
        "OptionGroupMemberships": [
            {
                "OptionGroupName": "default:mysql-8-0",
                "Status": "in-sync"
            }
        ],
        "PubliclyAccessible": false,
        "StorageType": "gp2",
        "DbInstancePort": 0,
        "StorageEncrypted": true,
        "KmsKeyId": "arn:aws:kms:ap-northeast-1:999999999999:key/951b3fa0-aedb-4215-a2e6-9b7c2f5292e5",
        "DbiResourceId": "db-JLWEZ2TQ2U6TEYZGZWHYZ7R3L4",
        "CACertificateIdentifier": "rds-ca-rsa2048-g1",
        "DomainMemberships": [],
        "CopyTagsToSnapshot": false,
        "MonitoringInterval": 0,
        "DBInstanceArn": "arn:aws:rds:ap-northeast-1:999999999999:db:db-user1",
        "IAMDatabaseAuthenticationEnabled": false,
        "PerformanceInsightsEnabled": false,
        "DeletionProtection": false,
        "AssociatedRoles": [],
        "MaxAllocatedStorage": 1000,
        "TagList": [],
        "CustomerOwnedIpEnabled": false,
        "BackupTarget": "region",
        "NetworkType": "IPV4",
        "StorageThroughput": 0,
        "CertificateDetails": {
            "CAIdentifier": "rds-ca-rsa2048-g1"
        },
        "DedicatedLogVolume": false,
        "EngineLifecycleSupport": "open-source-rds-extended-support"
    }
}

確認

詳細

コマンド
# 詳細
aws rds describe-db-instances \
    --db-instance-identifier ${DB_INSTANCE_IDENTIFIER} \
    --no-cli-pager

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # 詳細
[cloudshell-user@ip-10-132-84-39 ~]$ aws rds describe-db-instances \
>     --db-instance-identifier ${DB_INSTANCE_IDENTIFIER} \
>     --no-cli-pager
{
    "DBInstances": [
        {
            "DBInstanceIdentifier": "db-user1",
            "DBInstanceClass": "db.t3.micro",
            "Engine": "mysql",
            "DBInstanceStatus": "available",
            "MasterUsername": "admin",
            "DBName": "wordpress",
            "Endpoint": {
                "Address": "db-user1.clacqicsiqrt.ap-northeast-1.rds.amazonaws.com",
                "Port": 3306,
                "HostedZoneId": "Z24O6O9L7SGTNB"
            },
            "AllocatedStorage": 20,
            "InstanceCreateTime": "2024-08-25T09:35:37.302000+00:00",
            "PreferredBackupWindow": "13:43-14:13",
            "BackupRetentionPeriod": 0,
            "DBSecurityGroups": [],
            "VpcSecurityGroups": [
                {
                    "VpcSecurityGroupId": "sg-08c2854a9b34f089b",
                    "Status": "active"
                }
            ],
            "DBParameterGroups": [
                {
                    "DBParameterGroupName": "default.mysql8.0",
                    "ParameterApplyStatus": "in-sync"
                }
            ],
            "AvailabilityZone": "ap-northeast-1a",
            "DBSubnetGroup": {
                "DBSubnetGroupName": "db-subnet-user1",
                "DBSubnetGroupDescription": "RDS for MySQL",
                "VpcId": "vpc-02b5fbe797028d4e8",
                "SubnetGroupStatus": "Complete",
                "Subnets": [
                    {
                        "SubnetIdentifier": "subnet-04ef02ee504c79f77",
                        "SubnetAvailabilityZone": {
                            "Name": "ap-northeast-1a"
                        },
                        "SubnetOutpost": {},
                        "SubnetStatus": "Active"
                    },
                    {
                        "SubnetIdentifier": "subnet-06ddf6a468a549ff8",
                        "SubnetAvailabilityZone": {
                            "Name": "ap-northeast-1c"
                        },
                        "SubnetOutpost": {},
                        "SubnetStatus": "Active"
                    }
                ]
            },
            "PreferredMaintenanceWindow": "sun:15:03-sun:15:33",
            "PendingModifiedValues": {},
            "MultiAZ": false,
            "EngineVersion": "8.0.35",
            "AutoMinorVersionUpgrade": true,
            "ReadReplicaDBInstanceIdentifiers": [],
            "LicenseModel": "general-public-license",
            "OptionGroupMemberships": [
                {
                    "OptionGroupName": "default:mysql-8-0",
                    "Status": "in-sync"
                }
            ],
            "PubliclyAccessible": false,
            "StorageType": "gp2",
            "DbInstancePort": 0,
            "StorageEncrypted": true,
            "KmsKeyId": "arn:aws:kms:ap-northeast-1:999999999999:key/951b3fa0-aedb-4215-a2e6-9b7c2f5292e5",
            "DbiResourceId": "db-JLWEZ2TQ2U6TEYZGZWHYZ7R3L4",
            "CACertificateIdentifier": "rds-ca-rsa2048-g1",
            "DomainMemberships": [],
            "CopyTagsToSnapshot": false,
            "MonitoringInterval": 0,
            "DBInstanceArn": "arn:aws:rds:ap-northeast-1:999999999999:db:db-user1",
            "IAMDatabaseAuthenticationEnabled": false,
            "PerformanceInsightsEnabled": false,
            "DeletionProtection": false,
            "AssociatedRoles": [],
            "MaxAllocatedStorage": 1000,
            "TagList": [],
            "CustomerOwnedIpEnabled": false,
            "ActivityStreamStatus": "stopped",
            "BackupTarget": "region",
            "NetworkType": "IPV4",
            "StorageThroughput": 0,
            "CertificateDetails": {
                "CAIdentifier": "rds-ca-rsa2048-g1",
                "ValidTill": "2025-08-25T09:34:46+00:00"
            },
            "DedicatedLogVolume": false,
            "IsStorageConfigUpgradeAvailable": false,
            "EngineLifecycleSupport": "open-source-rds-extended-support"
        }
    ]
}

エンドポイントアドレス

コマンド
# エンドポイントアドレス
aws rds describe-db-instances \
    --db-instance-identifier ${DB_INSTANCE_IDENTIFIER} \
    --query DBInstances[].Endpoint.Address \
    --output text

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # エンドポイントアドレス
[cloudshell-user@ip-10-132-84-39 ~]$ aws rds describe-db-instances \
>     --db-instance-identifier ${DB_INSTANCE_IDENTIFIER} \
>     --query DBInstances[].Endpoint.Address \
>     --output text
db-user1.clacqicsiqrt.ap-northeast-1.rds.amazonaws.com

05 ELB の作成 ~ 負荷分散用のロードバランサーを作成する ~

変数

コマンド
# ELBセキュリティグループ名
ELB_SECURITY_GROUP_NAME='elb-user1' \
&& echo ${ELB_SECURITY_GROUP_NAME}

# DBセキュリティグループ説明
ELB_SECURITY_GROUP_DESCRIPTION='elb-user1' \
&& echo ${ELB_SECURITY_GROUP_DESCRIPTION}

# ターゲットタイプ
Target_GROUP_TYPE="instance" \
&& echo ${Target_GROUP_TYPE}

# ターゲットグループ名
Target_GROUP_NAME="target-user1" \
&& echo ${Target_GROUP_NAME}

# ターゲットグループ プロトコル
Target_GROUP_PROTOCOL="HTTP" \
&& echo ${Target_GROUP_PROTOCOL}

# ターゲットグループ ポート
Target_GROUP_PORT="80" \
&& echo ${Target_GROUP_PORT}

# ターゲットグループ プロトコルバージョン
Target_GROUP_PROTOCOLVERSION="HTTP1" \
&& echo ${Target_GROUP_PROTOCOLVERSION}

# ヘルスチェックプロトコル
HEALTH_CHECK_PROTOCOL="HTTP" \
&& echo ${HEALTH_CHECK_PROTOCOL}

# ヘルスチェックパス
HEALTH_CHECK_PATH="/wp-includes/images/blank.gif" \
&& echo ${HEALTH_CHECK_PATH}

# ロードバランサー名
LB_NAME="elb-user1" \
&& echo ${LB_NAME}

# リスナー プロトコル
LISTENER_PROTOCOL="HTTP" \
&& echo ${LISTENER_PROTOCOL}

# リスナー ポート
LISTENER_PORT="80" \
&& echo ${LISTENER_PORT}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # ELBセキュリティグループ名
[cloudshell-user@ip-10-132-84-39 ~]$ ELB_SECURITY_GROUP_NAME='elb-user1' \
> && echo ${ELB_SECURITY_GROUP_NAME}
elb-user1
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # DBセキュリティグループ説明
[cloudshell-user@ip-10-132-84-39 ~]$ ELB_SECURITY_GROUP_DESCRIPTION='elb-user1' \
> && echo ${ELB_SECURITY_GROUP_DESCRIPTION}
elb-user1
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ターゲットタイプ
[cloudshell-user@ip-10-132-84-39 ~]$ Target_GROUP_TYPE="instance" \
> && echo ${Target_GROUP_TYPE}
instance
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ターゲットグループ名
[cloudshell-user@ip-10-132-84-39 ~]$ Target_GROUP_NAME="target-user1" \
> && echo ${Target_GROUP_NAME}
target-user1
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ターゲットグループ プロトコル
[cloudshell-user@ip-10-132-84-39 ~]$ Target_GROUP_PROTOCOL="HTTP" \
> && echo ${Target_GROUP_PROTOCOL}
HTTP
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ターゲットグループ ポート
[cloudshell-user@ip-10-132-84-39 ~]$ Target_GROUP_PORT="80" \
> && echo ${Target_GROUP_PORT}
80
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ターゲットグループ プロトコルバージョン
[cloudshell-user@ip-10-132-84-39 ~]$ Target_GROUP_PROTOCOLVERSION="HTTP1" \
> && echo ${Target_GROUP_PROTOCOLVERSION}
HTTP1
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ヘルスチェックプロトコル
[cloudshell-user@ip-10-132-84-39 ~]$ HEALTH_CHECK_PROTOCOL="HTTP" \
> && echo ${HEALTH_CHECK_PROTOCOL}
HTTP
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ヘルスチェックパス
[cloudshell-user@ip-10-132-84-39 ~]$ HEALTH_CHECK_PATH="/wp-includes/images/blank.gif" \
> && echo ${HEALTH_CHECK_PATH}
/wp-includes/images/blank.gif
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ロードバランサー名
[cloudshell-user@ip-10-132-84-39 ~]$ LB_NAME="elb-user1" \
> && echo ${LB_NAME}
elb-user1
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # リスナー プロトコル
[cloudshell-user@ip-10-132-84-39 ~]$ LISTENER_PROTOCOL="HTTP" \
> && echo ${LISTENER_PROTOCOL}
HTTP
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # リスナー ポート
[cloudshell-user@ip-10-132-84-39 ~]$ LISTENER_PORT="80" \
> && echo ${LISTENER_PORT}
80

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

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

コマンド
# セキュリティグループ作成
aws ec2 create-security-group \
    --group-name ${ELB_SECURITY_GROUP_NAME} \
    --description ${ELB_SECURITY_GROUP_DESCRIPTION} \
    --vpc-id ${VPC_ID}

# ID取得
ELB_SECURITY_GROUP_ID=$( \
    aws ec2 describe-security-groups \
        --filters Name=vpc-id,Values=${VPC_ID} \
                  Name=group-name,Values=${ELB_SECURITY_GROUP_NAME} \
        --query "SecurityGroups[].GroupId" \
        --output text \
) \
&& echo ${ELB_SECURITY_GROUP_ID}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # セキュリティグループ作成
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 create-security-group \
>     --group-name ${ELB_SECURITY_GROUP_NAME} \
>     --description ${ELB_SECURITY_GROUP_DESCRIPTION} \
>     --vpc-id ${VPC_ID}
{
    "GroupId": "sg-07b48cc330643f5ad"
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ID取得
[cloudshell-user@ip-10-132-84-39 ~]$ ELB_SECURITY_GROUP_ID=$( \
>     aws ec2 describe-security-groups \
>         --filters Name=vpc-id,Values=${VPC_ID} \
>                   Name=group-name,Values=${ELB_SECURITY_GROUP_NAME} \
>         --query "SecurityGroups[].GroupId" \
>         --output text \
> ) \
> && echo ${ELB_SECURITY_GROUP_ID}
sg-07b48cc330643f5ad

ルール追加

コマンド
# ルール追加
aws ec2 authorize-security-group-ingress \
    --group-id ${ELB_SECURITY_GROUP_ID} \
    --protocol tcp \
    --port 80 \
    --cidr 0.0.0.0/0

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # ルール追加
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 authorize-security-group-ingress \
>     --group-id ${ELB_SECURITY_GROUP_ID} \
>     --protocol tcp \
>     --port 80 \
>     --cidr 0.0.0.0/0
{
    "Return": true,
    "SecurityGroupRules": [
        {
            "SecurityGroupRuleId": "sgr-0dc1cd74abcc810af",
            "GroupId": "sg-07b48cc330643f5ad",
            "GroupOwnerId": "999999999999",
            "IsEgress": false,
            "IpProtocol": "tcp",
            "FromPort": 80,
            "ToPort": 80,
            "CidrIpv4": "0.0.0.0/0"
        }
    ]
}

ターゲットグループ作成

ターゲットグループ作成

コマンド
# ターゲットグループ作成
aws elbv2 create-target-group \
    --name ${Target_GROUP_NAME} \
    --protocol ${Target_GROUP_PROTOCOL} \
    --port ${Target_GROUP_PORT} \
    --vpc-id ${VPC_ID} \
    --target-type ${Target_GROUP_TYPE} \
    --health-check-protocol ${HEALTH_CHECK_PROTOCOL} \
    --health-check-path ${HEALTH_CHECK_PATH}

# ARN取得
TARGET_GROUP_ARN=$(
    aws elbv2 describe-target-groups \
        --names ${Target_GROUP_NAME} \
        --query 'TargetGroups[*].TargetGroupArn' \
        --output text
) \
&& echo ${TARGET_GROUP_ARN}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # ターゲットグループ作成
[cloudshell-user@ip-10-132-84-39 ~]$ aws elbv2 create-target-group \
>     --name ${Target_GROUP_NAME} \
>     --protocol ${Target_GROUP_PROTOCOL} \
>     --port ${Target_GROUP_PORT} \
>     --vpc-id ${VPC_ID} \
>     --target-type ${Target_GROUP_TYPE} \
>     --health-check-protocol ${HEALTH_CHECK_PROTOCOL} \
>     --health-check-path ${HEALTH_CHECK_PATH}
{
    "TargetGroups": [
        {
            "TargetGroupArn": "arn:aws:elasticloadbalancing:ap-northeast-1:999999999999:targetgroup/target-user1/a8bc1528bb902b2e",
            "TargetGroupName": "target-user1",
            "Protocol": "HTTP",
            "Port": 80,
            "VpcId": "vpc-02b5fbe797028d4e8",
            "HealthCheckProtocol": "HTTP",
            "HealthCheckPort": "traffic-port",
            "HealthCheckEnabled": true,
            "HealthCheckIntervalSeconds": 30,
            "HealthCheckTimeoutSeconds": 5,
            "HealthyThresholdCount": 5,
            "UnhealthyThresholdCount": 2,
            "HealthCheckPath": "/wp-includes/images/blank.gif",
            "Matcher": {
                "HttpCode": "200"
            },
            "TargetType": "instance",
            "ProtocolVersion": "HTTP1",
            "IpAddressType": "ipv4"
        }
    ]
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ARN取得
[cloudshell-user@ip-10-132-84-39 ~]$ TARGET_GROUP_ARN=$(
>     aws elbv2 describe-target-groups \
>         --names ${Target_GROUP_NAME} \
>         --query 'TargetGroups[*].TargetGroupArn' \
>         --output text
> ) \
> && echo ${TARGET_GROUP_ARN}
arn:aws:elasticloadbalancing:ap-northeast-1:999999999999:targetgroup/target-user1/a8bc1528bb902b2e

ターゲットの登録

コマンド
# ターゲットの登録
aws elbv2 register-targets \
    --target-group-arn ${TARGET_GROUP_ARN} \
    --targets Id=${EC2_ID_1}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # ターゲットの登録
[cloudshell-user@ip-10-132-84-39 ~]$ aws elbv2 register-targets \
>     --target-group-arn ${TARGET_GROUP_ARN} \
>     --targets Id=${EC2_ID_1}

ロードバランサー作成

ロードバランサー作成

コマンド
# ロードバランサー作成
aws elbv2 create-load-balancer \
    --name ${LB_NAME} \
    --type application \
    --scheme internet-facing \
    --ip-address-type ipv4 \
    --subnets ${AZ1_PUB_ID} ${AZ2_PUB_ID} \
    --security-groups ${ELB_SECURITY_GROUP_ID}

# ARN取得
LB_ARN=$(
    aws elbv2 describe-load-balancers \
        --names ${LB_NAME} \
        --query 'LoadBalancers[*].LoadBalancerArn' \
        --output text
) \
&& echo ${LB_ARN}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # ロードバランサー作成
[cloudshell-user@ip-10-132-84-39 ~]$ aws elbv2 create-load-balancer \
>     --name ${LB_NAME} \
>     --type application \
>     --scheme internet-facing \
>     --ip-address-type ipv4 \
>     --subnets ${AZ1_PUB_ID} ${AZ2_PUB_ID} \
>     --security-groups ${ELB_SECURITY_GROUP_ID}
{
    "LoadBalancers": [
        {
            "LoadBalancerArn": "arn:aws:elasticloadbalancing:ap-northeast-1:999999999999:loadbalancer/app/elb-user1/ebb545cf60231bce",
            "DNSName": "elb-user1-154512834.ap-northeast-1.elb.amazonaws.com",
            "CanonicalHostedZoneId": "Z14GRHDCWA56QT",
            "CreatedTime": "2024-08-25T09:41:49.814000+00:00",
            "LoadBalancerName": "elb-user1",
            "Scheme": "internet-facing",
            "VpcId": "vpc-02b5fbe797028d4e8",
            "State": {
                "Code": "provisioning"
            },
            "Type": "application",
            "AvailabilityZones": [
                {
                    "ZoneName": "ap-northeast-1a",
                    "SubnetId": "subnet-09ce509c9397d5932",
                    "LoadBalancerAddresses": []
                },
                {
                    "ZoneName": "ap-northeast-1c",
                    "SubnetId": "subnet-0d31beb3e7dd1140d",
                    "LoadBalancerAddresses": []
                }
            ],
            "SecurityGroups": [
                "sg-07b48cc330643f5ad"
            ],
            "IpAddressType": "ipv4"
        }
    ]
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ARN取得
[cloudshell-user@ip-10-132-84-39 ~]$ LB_ARN=$(
>     aws elbv2 describe-load-balancers \
>         --names ${LB_NAME} \
>         --query 'LoadBalancers[*].LoadBalancerArn' \
>         --output text
> ) \
> && echo ${LB_ARN}
arn:aws:elasticloadbalancing:ap-northeast-1:999999999999:loadbalancer/app/elb-user1/ebb545cf60231bce

リスナーの追加

コマンド
# リスナーの追加
aws elbv2 create-listener \
    --load-balancer-arn ${LB_ARN} \
    --protocol ${LISTENER_PROTOCOL} \
    --port ${LISTENER_PORT} \
    --default-actions Type=forward,TargetGroupArn=${TARGET_GROUP_ARN}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # リスナーの追加
[cloudshell-user@ip-10-132-84-39 ~]$ aws elbv2 create-listener \
>     --load-balancer-arn ${LB_ARN} \
>     --protocol ${LISTENER_PROTOCOL} \
>     --port ${LISTENER_PORT} \
>     --default-actions Type=forward,TargetGroupArn=${TARGET_GROUP_ARN}
{
    "Listeners": [
        {
            "ListenerArn": "arn:aws:elasticloadbalancing:ap-northeast-1:999999999999:listener/app/elb-user1/ebb545cf60231bce/eb993c4a74201432",
            "LoadBalancerArn": "arn:aws:elasticloadbalancing:ap-northeast-1:999999999999:loadbalancer/app/elb-user1/ebb545cf60231bce",
            "Port": 80,
            "Protocol": "HTTP",
            "DefaultActions": [
                {
                    "Type": "forward",
                    "TargetGroupArn": "arn:aws:elasticloadbalancing:ap-northeast-1:999999999999:targetgroup/target-user1/a8bc1528bb902b2e",
                    "ForwardConfig": {
                        "TargetGroups": [
                            {
                                "TargetGroupArn": "arn:aws:elasticloadbalancing:ap-northeast-1:999999999999:targetgroup/target-user1/a8bc1528bb902b2e",
                                "Weight": 1
                            }
                        ],
                        "TargetGroupStickinessConfig": {
                            "Enabled": false
                        }
                    }
                }
            ]
        }
    ]
}

確認

ELB(詳細)

コマンド
# ELB(詳細)
aws elbv2 describe-load-balancers --names ${LB_NAME}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # ELB(詳細)
[cloudshell-user@ip-10-132-84-39 ~]$ aws elbv2 describe-load-balancers --names ${LB_NAME}
{
    "LoadBalancers": [
        {
            "LoadBalancerArn": "arn:aws:elasticloadbalancing:ap-northeast-1:999999999999:loadbalancer/app/elb-user1/ebb545cf60231bce",
            "DNSName": "elb-user1-154512834.ap-northeast-1.elb.amazonaws.com",
            "CanonicalHostedZoneId": "Z14GRHDCWA56QT",
            "CreatedTime": "2024-08-25T09:41:49.814000+00:00",
            "LoadBalancerName": "elb-user1",
            "Scheme": "internet-facing",
            "VpcId": "vpc-02b5fbe797028d4e8",
            "State": {
                "Code": "active"
            },
            "Type": "application",
            "AvailabilityZones": [
                {
                    "ZoneName": "ap-northeast-1a",
                    "SubnetId": "subnet-09ce509c9397d5932",
                    "LoadBalancerAddresses": []
                },
                {
                    "ZoneName": "ap-northeast-1c",
                    "SubnetId": "subnet-0d31beb3e7dd1140d",
                    "LoadBalancerAddresses": []
                }
            ],
            "SecurityGroups": [
                "sg-07b48cc330643f5ad"
            ],
            "IpAddressType": "ipv4"
        }
    ]
}

ELB(DNS名)

コマンド
# ELB(DNS名)
aws elbv2 describe-load-balancers \
    --names ${LB_NAME} \
    --query LoadBalancers[].DNSName \
    --output text

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # ELB(DNS名)
[cloudshell-user@ip-10-132-84-39 ~]$ aws elbv2 describe-load-balancers \
>     --names ${LB_NAME} \
>     --query LoadBalancers[].DNSName \
>     --output text
elb-user1-154512834.ap-northeast-1.elb.amazonaws.com

ターゲットグループ(詳細)

コマンド
# ターゲットグループ(詳細)
aws elbv2 describe-target-groups --names ${Target_GROUP_NAME}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # ターゲットグループ(詳細)
[cloudshell-user@ip-10-132-84-39 ~]$ aws elbv2 describe-target-groups --names ${Target_GROUP_NAME}
{
    "TargetGroups": [
        {
            "TargetGroupArn": "arn:aws:elasticloadbalancing:ap-northeast-1:999999999999:targetgroup/target-user1/a8bc1528bb902b2e",
            "TargetGroupName": "target-user1",
            "Protocol": "HTTP",
            "Port": 80,
            "VpcId": "vpc-02b5fbe797028d4e8",
            "HealthCheckProtocol": "HTTP",
            "HealthCheckPort": "traffic-port",
            "HealthCheckEnabled": true,
            "HealthCheckIntervalSeconds": 30,
            "HealthCheckTimeoutSeconds": 5,
            "HealthyThresholdCount": 5,
            "UnhealthyThresholdCount": 2,
            "HealthCheckPath": "/wp-includes/images/blank.gif",
            "Matcher": {
                "HttpCode": "200"
            },
            "LoadBalancerArns": [
                "arn:aws:elasticloadbalancing:ap-northeast-1:999999999999:loadbalancer/app/elb-user1/ebb545cf60231bce"
            ],
            "TargetType": "instance",
            "ProtocolVersion": "HTTP1",
            "IpAddressType": "ipv4"
        }
    ]
}

ターゲットグループ(ステータス)

コマンド
# ターゲットグループ(ステータス)
aws elbv2 describe-target-health \
    --target-group-arn ${TARGET_GROUP_ARN}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # ターゲットグループ(ステータス)
[cloudshell-user@ip-10-132-84-39 ~]$ aws elbv2 describe-target-health \
>     --target-group-arn ${TARGET_GROUP_ARN}
{
    "TargetHealthDescriptions": [
        {
            "Target": {
                "Id": "i-0ed3b54d25b834102",
                "Port": 80
            },
            "HealthCheckPort": "80",
            "TargetHealth": {
                "State": "healthy"
            }
        }
    ]
}

06 WordPressの初期設定 ~ WordPressの初期設定を行い簡単なブログを作る ~

EC2 Instance Connect を使用して接続

コマンド
aws ec2-instance-connect ssh --instance-id ${EC2_ID_1}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2-instance-connect ssh --instance-id ${EC2_ID_1}
The authenticity of host '3.112.34.36 (3.112.34.36)' can't be established.
ED25519 key fingerprint is SHA256:JW9Kmz/CN/UURjH30gRGFlNygLNUdzpUcCVhsJ0cQ1o.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '3.112.34.36' (ED25519) to the list of known hosts.
   ,     #_
   ~\_  ####_        Amazon Linux 2
  ~~  \_#####\
  ~~     \###|       AL2 End of Life is 2025-06-30.
  ~~       \#/ ___
   ~~       V~' '->
    ~~~         /    A newer version of Amazon Linux is available!
      ~~._.   _/
         _/ _/       Amazon Linux 2023, GA and supported until 2028-03-15.
       _/m/'           https://aws.amazon.com/linux/amazon-linux-2023/

[ec2-user@ip-10-0-0-6 ~]$ 

WP-CLIのインストール

コマンド
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

php wp-cli.phar --info

chmod +x wp-cli.phar

sudo mv wp-cli.phar /usr/local/bin/wp

wp --info

出力
[ec2-user@ip-10-0-0-6 ~]$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 6882k  100 6882k    0     0  17.6M      0 --:--:-- --:--:-- --:--:-- 17.6M
[ec2-user@ip-10-0-0-6 ~]$ 
[ec2-user@ip-10-0-0-6 ~]$ php wp-cli.phar --info
OS:     Linux 4.14.350-266.564.amzn2.x86_64 #1 SMP Sat Aug 10 09:56:03 UTC 2024 x86_64
Shell:  /bin/bash
PHP binary:     /usr/bin/php
PHP version:    7.4.33
php.ini used:   /etc/php.ini
MySQL binary:   /usr/bin/mysql
MySQL version:  mysql  Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1
SQL modes:
WP-CLI root dir:        phar://wp-cli.phar/vendor/wp-cli/wp-cli
WP-CLI vendor dir:      phar://wp-cli.phar/vendor
WP_CLI phar path:       /home/ec2-user
WP-CLI packages dir:
WP-CLI cache dir:       /home/ec2-user/.wp-cli/cache
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 2.11.0
[ec2-user@ip-10-0-0-6 ~]$ 
[ec2-user@ip-10-0-0-6 ~]$ chmod +x wp-cli.phar
[ec2-user@ip-10-0-0-6 ~]$ 
[ec2-user@ip-10-0-0-6 ~]$ sudo mv wp-cli.phar /usr/local/bin/wp
[ec2-user@ip-10-0-0-6 ~]$ 
[ec2-user@ip-10-0-0-6 ~]$ wp --info
OS:     Linux 4.14.350-266.564.amzn2.x86_64 #1 SMP Sat Aug 10 09:56:03 UTC 2024 x86_64
Shell:  /bin/bash
PHP binary:     /usr/bin/php
PHP version:    7.4.33
php.ini used:   /etc/php.ini
MySQL binary:   /usr/bin/mysql
MySQL version:  mysql  Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1
SQL modes:
WP-CLI root dir:        phar://wp-cli.phar/vendor/wp-cli/wp-cli
WP-CLI vendor dir:      phar://wp-cli.phar/vendor
WP_CLI phar path:       /home/ec2-user
WP-CLI packages dir:
WP-CLI cache dir:       /home/ec2-user/.wp-cli/cache
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 2.11.0

変数

コマンド
DB_NAME="wordpress" \
&& echo ${DB_NAME}

MASTER_USERNAME="admin" \
&& echo ${MASTER_USERNAME}

MASTER_USER_PASSWORD="AjO5PqEZI6IX" \
&& echo ${MASTER_USER_PASSWORD}

RDS_INSTANCE="db-user1.clacqicsiqrt.ap-northeast-1.rds.amazonaws.com" \
&& echo ${RDS_INSTANCE}

WP_URL="elb-user1-154512834.ap-northeast-1.elb.amazonaws.com" \
&& echo ${WP_URL}

WP_TITLE="はじめてのAWS" \
&& echo ${WP_TITLE}

WP_USERNAME="admin" \
&& echo ${WP_USERNAME}

WP_PASSWORD=$(< /dev/urandom tr -dc 'A-Za-z0-9' | head -c12) \
&& echo ${WP_PASSWORD}

WP_EMAIL="username@example.com" \
&& echo ${WP_EMAIL}

出力
[ec2-user@ip-10-0-0-6 ~]$ DB_NAME="wordpress" \
> && echo ${DB_NAME}
wordpress
[ec2-user@ip-10-0-0-6 ~]$ 
[ec2-user@ip-10-0-0-6 ~]$ MASTER_USERNAME="admin" \
> && echo ${MASTER_USERNAME}
admin
[ec2-user@ip-10-0-0-6 ~]$ 
[ec2-user@ip-10-0-0-6 ~]$ MASTER_USER_PASSWORD="AjO5PqEZI6IX" \
> && echo ${MASTER_USER_PASSWORD}
AjO5PqEZI6IX
[ec2-user@ip-10-0-0-6 ~]$ 
[ec2-user@ip-10-0-0-6 ~]$ RDS_INSTANCE="db-user1.clacqicsiqrt.ap-northeast-1.rds.amazonaws.com" \
> && echo ${RDS_INSTANCE}
db-user1.clacqicsiqrt.ap-northeast-1.rds.amazonaws.com
[ec2-user@ip-10-0-0-6 ~]$ 
[ec2-user@ip-10-0-0-6 ~]$ WP_URL="elb-user1-154512834.ap-northeast-1.elb.amazonaws.com" \
> && echo ${WP_URL}
elb-user1-154512834.ap-northeast-1.elb.amazonaws.com
[ec2-user@ip-10-0-0-6 ~]$ 
[ec2-user@ip-10-0-0-6 ~]$ WP_TITLE="はじめてのAWS" \
> && echo ${WP_TITLE}
はじめてのAWS
[ec2-user@ip-10-0-0-6 ~]$ 
[ec2-user@ip-10-0-0-6 ~]$ WP_USERNAME="admin" \
> && echo ${WP_USERNAME}
admin
[ec2-user@ip-10-0-0-6 ~]$ 
[ec2-user@ip-10-0-0-6 ~]$ WP_PASSWORD=$(< /dev/urandom tr -dc 'A-Za-z0-9' | head -c12) \
> && echo ${WP_PASSWORD}
m2NouEqLPS5d
[ec2-user@ip-10-0-0-6 ~]$ 
[ec2-user@ip-10-0-0-6 ~]$ WP_EMAIL="username@example.com" \
> && echo ${WP_EMAIL}
username@example.com

WordPressの初期設定

コマンド
# WordPressの初期設定
wp core download

sudo -u apache /usr/local/bin/wp config create \
    --path=/var/www/html \
    --dbname=${DB_NAME} \
    --dbuser=${MASTER_USERNAME} \
    --dbpass=${MASTER_USER_PASSWORD} \
    --dbhost=${RDS_INSTANCE} \
    --dbprefix=wp_

wp core install \
    --url=http://${WP_URL} \
    --title="${WP_TITLE}" \
    --admin_user=${WP_USERNAME} \
    --admin_password=${WP_PASSWORD} \
    --admin_email=${WP_EMAIL}

wp option update blog_public 0

出力
[ec2-user@ip-10-0-0-6 ~]$ # WordPressの初期設定
[ec2-user@ip-10-0-0-6 ~]$ wp core download
Downloading WordPress 6.6.1 (en_US)...
md5 hash verified: a15f676931133623b7b347f1fabc966b
Success: WordPress downloaded.
[ec2-user@ip-10-0-0-6 ~]$ 
[ec2-user@ip-10-0-0-6 ~]$ wp config create \
>     --dbname=${DB_NAME} \
>     --dbuser=${MASTER_USERNAME} \
>     --dbpass=${MASTER_USER_PASSWORD} \
>     --dbhost=${RDS_INSTANCE} \
>     --dbprefix=wp_
Success: Generated 'wp-config.php' file.
[ec2-user@ip-10-0-0-6 ~]$ 
[ec2-user@ip-10-0-0-6 ~]$ wp core install \
>     --url=http://${WP_URL} \
>     --title="${WP_TITLE}" \
>     --admin_user=${WP_USERNAME} \
>     --admin_password=${WP_PASSWORD} \
>     --admin_email=${WP_EMAIL}
Success: WordPress installed successfully.
[ec2-user@ip-10-0-0-6 ~]$ 
[ec2-user@ip-10-0-0-6 ~]$ sudo cp -p wp-config.php /var/www/html
[ec2-user@ip-10-0-0-6 ~]$ wp core install \
>     --url=http://${WP_URL} \
>     --title="${WP_TITLE}" \
>     --admin_user=${WP_USERNAME} \
>     --admin_password=${WP_PASSWORD} \
>     --admin_email=${WP_EMAIL}
WordPress is already installed.
[ec2-user@ip-10-0-0-6 ~]$ 
[ec2-user@ip-10-0-0-6 ~]$ wp option update blog_public 0
Success: Updated 'blog_public' option.

EC2 Instance Connect 切断

コマンド
exit
出力
[ec2-user@ip-10-0-0-6 ~]$ exit
logout
Connection to 3.112.34.36 closed.

6. 07 AMIの作成と作成したAMIから2つ目のEC2インスタンスの起動

変数

コマンド
# イメージ名
AMI_NAME='wordpress-user1' \
&& echo ${AMI_NAME}

# EC2インスタンス名 2
EC2_NAME_2='webserver#2-user1' \
&& echo ${EC2_NAME_2}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # イメージ名
[cloudshell-user@ip-10-132-84-39 ~]$ AMI_NAME='wordpress-user1' \
> && echo ${AMI_NAME}
wordpress-user1
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # EC2インスタンス名 2
[cloudshell-user@ip-10-132-84-39 ~]$ EC2_NAME_2='webserver#2-user1' \
> && echo ${EC2_NAME_2}
webserver#2-user1

AMI の作成

コマンド
# AMI作成
aws ec2 create-image \
    --instance-id ${EC2_ID_1} \
    --name "${AMI_NAME}"

# ID取得
IMAGE_ID=$(
    aws ec2 describe-images \
        --filters "Name=name,Values=${AMI_NAME}" \
        --query 'Images[0].ImageId' \
        --output text
) \
&& echo ${IMAGE_ID}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # AMI作成
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 create-image \
>     --instance-id ${EC2_ID_1} \
>     --name "${AMI_NAME}"
{
    "ImageId": "ami-0dd3897e244f061da"
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ID取得
[cloudshell-user@ip-10-132-84-39 ~]$ IMAGE_ID=$(
>     aws ec2 describe-images \
>         --filters "Name=name,Values=${AMI_NAME}" \
>         --query 'Images[0].ImageId' \
>         --output text
> ) \
> && echo ${IMAGE_ID}
ami-0dd3897e244f061da

2つ⽬の EC2 インスタンスの作成

コマンド
# EC2インスタンス作成
aws ec2 run-instances \
    --image-id ${IMAGE_ID}  \
    --instance-type ${EC2_INSTANCE_TYPE} \
    --security-group-ids ${EC2_SECURITY_GROUP_ID} \
    --subnet-id ${AZ2_PUB_ID} \
    --associate-public-ip-address \
    --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${EC2_NAME_2}}]" \
    --no-cli-pager

# インスタンスID
EC2_ID_2=$( \
    aws ec2 describe-instances \
        --filters Name=tag:Name,Values=${EC2_NAME_2}  \
        --query "Reservations[*].Instances[*].[InstanceId]" \
        --output text
) \
&& echo ${EC2_ID_2} 

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # EC2インスタンス作成
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 run-instances \
>     --image-id ${IMAGE_ID}  \
>     --instance-type ${EC2_INSTANCE_TYPE} \
>     --security-group-ids ${EC2_SECURITY_GROUP_ID} \
>     --subnet-id ${AZ2_PUB_ID} \
>     --associate-public-ip-address \
>     --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${EC2_NAME_2}}]" \
>     --no-cli-pager
{
    "Groups": [],
    "Instances": [
        {
            "AmiLaunchIndex": 0,
            "ImageId": "ami-0dd3897e244f061da",
            "InstanceId": "i-05d36122200065fdb",
            "InstanceType": "t2.micro",
            "LaunchTime": "2024-08-25T10:56:35+00:00",
            "Monitoring": {
                "State": "disabled"
            },
            "Placement": {
                "AvailabilityZone": "ap-northeast-1c",
                "GroupName": "",
                "Tenancy": "default"
            },
            "PrivateDnsName": "ip-10-0-1-86.ap-northeast-1.compute.internal",
            "PrivateIpAddress": "10.0.1.86",
            "ProductCodes": [],
            "PublicDnsName": "",
            "State": {
                "Code": 0,
                "Name": "pending"
            },
            "StateTransitionReason": "",
            "SubnetId": "subnet-0d31beb3e7dd1140d",
            "VpcId": "vpc-02b5fbe797028d4e8",
            "Architecture": "x86_64",
            "BlockDeviceMappings": [],
            "ClientToken": "4f91e9c3-878c-410e-9b7f-4c2e8afef03e",
            "EbsOptimized": false,
            "EnaSupport": true,
            "Hypervisor": "xen",
            "NetworkInterfaces": [
                {
                    "Attachment": {
                        "AttachTime": "2024-08-25T10:56:35+00:00",
                        "AttachmentId": "eni-attach-0d3c0eb282a9800ca",
                        "DeleteOnTermination": true,
                        "DeviceIndex": 0,
                        "Status": "attaching",
                        "NetworkCardIndex": 0
                    },
                    "Description": "",
                    "Groups": [
                        {
                            "GroupName": "web-user1",
                            "GroupId": "sg-0f13aa5ebac4e8118"
                        }
                    ],
                    "Ipv6Addresses": [],
                    "MacAddress": "0a:c5:5e:53:dc:9f",
                    "NetworkInterfaceId": "eni-058844cac8665e433",
                    "OwnerId": "999999999999",
                    "PrivateIpAddress": "10.0.1.86",
                    "PrivateIpAddresses": [
                        {
                            "Primary": true,
                            "PrivateIpAddress": "10.0.1.86"
                        }
                    ],
                    "SourceDestCheck": true,
                    "Status": "in-use",
                    "SubnetId": "subnet-0d31beb3e7dd1140d",
                    "VpcId": "vpc-02b5fbe797028d4e8",
                    "InterfaceType": "interface"
                }
            ],
            "RootDeviceName": "/dev/xvda",
            "RootDeviceType": "ebs",
            "SecurityGroups": [
                {
                    "GroupName": "web-user1",
                    "GroupId": "sg-0f13aa5ebac4e8118"
                }
            ],
            "SourceDestCheck": true,
            "StateReason": {
                "Code": "pending",
                "Message": "pending"
            },
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "webserver#2-user1"
                }
            ],
            "VirtualizationType": "hvm",
            "CpuOptions": {
                "CoreCount": 1,
                "ThreadsPerCore": 1
            },
            "CapacityReservationSpecification": {
                "CapacityReservationPreference": "open"
            },
            "MetadataOptions": {
                "State": "pending",
                "HttpTokens": "optional",
                "HttpPutResponseHopLimit": 1,
                "HttpEndpoint": "enabled",
                "HttpProtocolIpv6": "disabled",
                "InstanceMetadataTags": "disabled"
            },
            "EnclaveOptions": {
                "Enabled": false
            },
            "PrivateDnsNameOptions": {
                "HostnameType": "ip-name",
                "EnableResourceNameDnsARecord": false,
                "EnableResourceNameDnsAAAARecord": false
            },
            "MaintenanceOptions": {
                "AutoRecovery": "default"
            },
            "CurrentInstanceBootMode": "legacy-bios"
        }
    ],
    "OwnerId": "999999999999",
    "ReservationId": "r-029ca72ab07d2a83c"
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # インスタンスID
[cloudshell-user@ip-10-132-84-39 ~]$ EC2_ID_2=$( \
>     aws ec2 describe-instances \
>         --filters Name=tag:Name,Values=${EC2_NAME_2}  \
>         --query "Reservations[*].Instances[*].[InstanceId]" \
>         --output text
> ) \
> && echo ${EC2_ID_2} 
i-05d36122200065fdb

2つ目のEC2インスタンスをELBに登録

コマンド
aws elbv2 register-targets \
    --target-group-arn ${TARGET_GROUP_ARN} \
    --targets Id=${EC2_ID_2}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ aws elbv2 register-targets \
>     --target-group-arn ${TARGET_GROUP_ARN} \
>     --targets Id=${EC2_ID_2}

ターゲットグループ(ステータス)

コマンド
# ターゲットグループ(ステータス)
aws elbv2 describe-target-health \
    --target-group-arn ${TARGET_GROUP_ARN}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # ターゲットグループ(ステータス)
[cloudshell-user@ip-10-132-84-39 ~]$ aws elbv2 describe-target-health \
>     --target-group-arn ${TARGET_GROUP_ARN}
{
    "TargetHealthDescriptions": [
        {
            "Target": {
                "Id": "i-05d36122200065fdb",
                "Port": 80
            },
            "HealthCheckPort": "80",
            "TargetHealth": {
                "State": "healthy"
            }
        },
        {
            "Target": {
                "Id": "i-0ed3b54d25b834102",
                "Port": 80
            },
            "HealthCheckPort": "80",
            "TargetHealth": {
                "State": "healthy"
            }
        }
    ]
}

08 RDSのマルチAZ配置 〜 すでに作成済みのRDS DB インスタンスのマルチAZ化を行う 〜

RDS変更

コマンド
aws rds modify-db-instance \
    --db-instance-identifier ${DB_INSTANCE_IDENTIFIER} \
    --multi-az \
    --apply-immediately \
    --no-cli-pager

出力
[cloudshell-user@ip-10-132-84-39 ~]$ aws rds modify-db-instance \
>     --db-instance-identifier ${DB_INSTANCE_IDENTIFIER} \
>     --multi-az \
>     --apply-immediately \
>     --no-cli-pager
{
    "DBInstance": {
        "DBInstanceIdentifier": "db-user1",
        "DBInstanceClass": "db.t3.micro",
        "Engine": "mysql",
        "DBInstanceStatus": "available",
        "MasterUsername": "admin",
        "DBName": "wordpress",
        "Endpoint": {
            "Address": "db-user1.clacqicsiqrt.ap-northeast-1.rds.amazonaws.com",
            "Port": 3306,
            "HostedZoneId": "Z24O6O9L7SGTNB"
        },
        "AllocatedStorage": 20,
        "InstanceCreateTime": "2024-08-25T09:35:37.302000+00:00",
        "PreferredBackupWindow": "13:43-14:13",
        "BackupRetentionPeriod": 0,
        "DBSecurityGroups": [],
        "VpcSecurityGroups": [
            {
                "VpcSecurityGroupId": "sg-08c2854a9b34f089b",
                "Status": "active"
            }
        ],
        "DBParameterGroups": [
            {
                "DBParameterGroupName": "default.mysql8.0",
                "ParameterApplyStatus": "in-sync"
            }
        ],
        "AvailabilityZone": "ap-northeast-1a",
        "DBSubnetGroup": {
            "DBSubnetGroupName": "db-subnet-user1",
            "DBSubnetGroupDescription": "RDS for MySQL",
            "VpcId": "vpc-02b5fbe797028d4e8",
            "SubnetGroupStatus": "Complete",
            "Subnets": [
                {
                    "SubnetIdentifier": "subnet-04ef02ee504c79f77",
                    "SubnetAvailabilityZone": {
                        "Name": "ap-northeast-1a"
                    },
                    "SubnetOutpost": {},
                    "SubnetStatus": "Active"
                },
                {
                    "SubnetIdentifier": "subnet-06ddf6a468a549ff8",
                    "SubnetAvailabilityZone": {
                        "Name": "ap-northeast-1c"
                    },
                    "SubnetOutpost": {},
                    "SubnetStatus": "Active"
                }
            ]
        },
        "PreferredMaintenanceWindow": "sun:15:03-sun:15:33",
        "PendingModifiedValues": {
            "MultiAZ": true
        },
        "MultiAZ": false,
        "EngineVersion": "8.0.35",
        "AutoMinorVersionUpgrade": true,
        "ReadReplicaDBInstanceIdentifiers": [],
        "LicenseModel": "general-public-license",
        "OptionGroupMemberships": [
            {
                "OptionGroupName": "default:mysql-8-0",
                "Status": "in-sync"
            }
        ],
        "PubliclyAccessible": false,
        "StorageType": "gp2",
        "DbInstancePort": 0,
        "StorageEncrypted": true,
        "KmsKeyId": "arn:aws:kms:ap-northeast-1:999999999999:key/951b3fa0-aedb-4215-a2e6-9b7c2f5292e5",
        "DbiResourceId": "db-JLWEZ2TQ2U6TEYZGZWHYZ7R3L4",
        "CACertificateIdentifier": "rds-ca-rsa2048-g1",
        "DomainMemberships": [],
        "CopyTagsToSnapshot": false,
        "MonitoringInterval": 0,
        "DBInstanceArn": "arn:aws:rds:ap-northeast-1:999999999999:db:db-user1",
        "IAMDatabaseAuthenticationEnabled": false,
        "PerformanceInsightsEnabled": false,
        "DeletionProtection": false,
        "AssociatedRoles": [],
        "MaxAllocatedStorage": 1000,
        "TagList": [],
        "CustomerOwnedIpEnabled": false,
        "BackupTarget": "region",
        "NetworkType": "IPV4",
        "StorageThroughput": 0,
        "CertificateDetails": {
            "CAIdentifier": "rds-ca-rsa2048-g1",
            "ValidTill": "2025-08-25T09:34:46+00:00"
        },
        "DedicatedLogVolume": false,
        "EngineLifecycleSupport": "open-source-rds-extended-support"
    }
}

09 Webシステム全体の可用性の確認 〜 EC2インスタンスの停止やRDSのフェイルオーバーを行う 〜

オプション 1:EC2 インスタンスを1つ停⽌させ、全体の可⽤性の確認

EC2インスタンス停止

コマンド
aws ec2 stop-instances --instance-ids ${EC2_ID_1}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 stop-instances --instance-ids ${EC2_ID_1}
{
    "StoppingInstances": [
        {
            "CurrentState": {
                "Code": 64,
                "Name": "stopping"
            },
            "InstanceId": "i-0ed3b54d25b834102",
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        }
    ]
}

通信確認

コマンド(別タブで実施)
url=http://elb-user1-154512834.ap-northeast-1.elb.amazonaws.com/
while true; do TZ=JST-9 date; curl -o /dev/null -s -w "%{http_code}\n" ${url} ; sleep 1s; done

出力(別タブで実施)
[cloudshell-user@ip-10-132-84-39 ~]$ url=http://elb-user1-154512834.ap-northeast-1.elb.amazonaws.com/
[cloudshell-user@ip-10-132-84-39 ~]$ while true; do TZ=JST-9 date; curl -o /dev/null -s -w "%{http_code}\n" ${url} ; sleep 1s; done
Sun Aug 25 08:29:23 PM JST 2024
200
Sun Aug 25 08:29:25 PM JST 2024
200
Sun Aug 25 08:29:26 PM JST 2024
200
Sun Aug 25 08:29:27 PM JST 2024
200
Sun Aug 25 08:29:29 PM JST 2024
200
Sun Aug 25 08:29:30 PM JST 2024
200
Sun Aug 25 08:29:31 PM JST 2024
200
Sun Aug 25 08:29:33 PM JST 2024
200
Sun Aug 25 08:29:34 PM JST 2024
200
Sun Aug 25 08:29:35 PM JST 2024
200
Sun Aug 25 08:29:37 PM JST 2024
200
Sun Aug 25 08:29:38 PM JST 2024
200
Sun Aug 25 08:29:39 PM JST 2024
200
Sun Aug 25 08:29:41 PM JST 2024
200
Sun Aug 25 08:29:42 PM JST 2024
200
Sun Aug 25 08:29:43 PM JST 2024
200
Sun Aug 25 08:29:45 PM JST 2024
502
Sun Aug 25 08:29:46 PM JST 2024
502
Sun Aug 25 08:29:47 PM JST 2024
200
Sun Aug 25 08:29:48 PM JST 2024
200
Sun Aug 25 08:29:50 PM JST 2024
504
Sun Aug 25 08:30:01 PM JST 2024
200
Sun Aug 25 08:30:03 PM JST 2024
200
Sun Aug 25 08:30:04 PM JST 2024
504
Sun Aug 25 08:30:15 PM JST 2024
504
Sun Aug 25 08:30:26 PM JST 2024
200
Sun Aug 25 08:30:28 PM JST 2024
200
Sun Aug 25 08:30:29 PM JST 2024
200
Sun Aug 25 08:30:30 PM JST 2024
200
Sun Aug 25 08:30:32 PM JST 2024
200
Sun Aug 25 08:30:33 PM JST 2024
200
Sun Aug 25 08:30:34 PM JST 2024
200
Sun Aug 25 08:30:36 PM JST 2024
200
Sun Aug 25 08:30:37 PM JST 2024
200
Sun Aug 25 08:30:38 PM JST 2024
200
Sun Aug 25 08:30:40 PM JST 2024
200
Sun Aug 25 08:30:41 PM JST 2024
200
Sun Aug 25 08:30:43 PM JST 2024
200
Sun Aug 25 08:30:44 PM JST 2024
200
Sun Aug 25 08:30:45 PM JST 2024
200
Sun Aug 25 08:30:47 PM JST 2024
200
Sun Aug 25 08:30:48 PM JST 2024
200
Sun Aug 25 08:30:49 PM JST 2024
200
Sun Aug 25 08:30:51 PM JST 2024
200
Sun Aug 25 08:30:52 PM JST 2024
200
Sun Aug 25 08:30:53 PM JST 2024
200
Sun Aug 25 08:30:55 PM JST 2024
200
Sun Aug 25 08:30:56 PM JST 2024
200
Sun Aug 25 08:30:58 PM JST 2024
200
Sun Aug 25 08:30:59 PM JST 2024
200
Sun Aug 25 08:31:00 PM JST 2024
200
Sun Aug 25 08:31:02 PM JST 2024
200
Sun Aug 25 08:31:03 PM JST 2024
200
Sun Aug 25 08:31:04 PM JST 2024
200
Sun Aug 25 08:31:06 PM JST 2024
200
Sun Aug 25 08:31:07 PM JST 2024
200
Sun Aug 25 08:31:08 PM JST 2024
200
Sun Aug 25 08:31:10 PM JST 2024
200
Sun Aug 25 08:31:11 PM JST 2024
200
Sun Aug 25 08:31:13 PM JST 2024
200
Sun Aug 25 08:31:14 PM JST 2024
200
Sun Aug 25 08:31:15 PM JST 2024
200
Sun Aug 25 08:31:17 PM JST 2024
200
Sun Aug 25 08:31:18 PM JST 2024
200
Sun Aug 25 08:31:19 PM JST 2024
200
Sun Aug 25 08:31:21 PM JST 2024
200
Sun Aug 25 08:31:22 PM JST 2024
200
Sun Aug 25 08:31:23 PM JST 2024
200
Sun Aug 25 08:31:25 PM JST 2024
200
Sun Aug 25 08:31:26 PM JST 2024
200
Sun Aug 25 08:31:27 PM JST 2024
200
Sun Aug 25 08:31:29 PM JST 2024
200
Sun Aug 25 08:31:30 PM JST 2024
200
Sun Aug 25 08:31:31 PM JST 2024
200
Sun Aug 25 08:31:33 PM JST 2024
200
Sun Aug 25 08:31:34 PM JST 2024
200
Sun Aug 25 08:31:36 PM JST 2024
200
Sun Aug 25 08:31:37 PM JST 2024
200
Sun Aug 25 08:31:38 PM JST 2024
200
Sun Aug 25 08:31:40 PM JST 2024
200
Sun Aug 25 08:31:41 PM JST 2024
200
Sun Aug 25 08:31:42 PM JST 2024
200
Sun Aug 25 08:31:44 PM JST 2024
200
Sun Aug 25 08:31:45 PM JST 2024
200
Sun Aug 25 08:31:47 PM JST 2024
200
Sun Aug 25 08:31:48 PM JST 2024
200
Sun Aug 25 08:31:49 PM JST 2024
200
Sun Aug 25 08:31:51 PM JST 2024
200
Sun Aug 25 08:31:52 PM JST 2024
200
Sun Aug 25 08:31:53 PM JST 2024
200
Sun Aug 25 08:31:55 PM JST 2024
200
Sun Aug 25 08:31:56 PM JST 2024
200
Sun Aug 25 08:31:58 PM JST 2024
200
Sun Aug 25 08:31:59 PM JST 2024
200
Sun Aug 25 08:32:00 PM JST 2024
200
Sun Aug 25 08:32:02 PM JST 2024
200
Sun Aug 25 08:32:03 PM JST 2024
200
Sun Aug 25 08:32:04 PM JST 2024
200
Sun Aug 25 08:32:06 PM JST 2024
200
Sun Aug 25 08:32:07 PM JST 2024
200
Sun Aug 25 08:32:08 PM JST 2024
200
Sun Aug 25 08:32:10 PM JST 2024
200
Sun Aug 25 08:32:11 PM JST 2024
200
Sun Aug 25 08:32:12 PM JST 2024
200
Sun Aug 25 08:32:13 PM JST 2024
200
Sun Aug 25 08:32:15 PM JST 2024
200
Sun Aug 25 08:32:16 PM JST 2024
200
Sun Aug 25 08:32:18 PM JST 2024
200
Sun Aug 25 08:32:19 PM JST 2024
200
Sun Aug 25 08:32:20 PM JST 2024
200
Sun Aug 25 08:32:22 PM JST 2024
200
Sun Aug 25 08:32:23 PM JST 2024
200
Sun Aug 25 08:32:24 PM JST 2024
200
Sun Aug 25 08:32:25 PM JST 2024
200
Sun Aug 25 08:32:27 PM JST 2024
200
Sun Aug 25 08:32:28 PM JST 2024
200
Sun Aug 25 08:32:29 PM JST 2024
200
Sun Aug 25 08:32:31 PM JST 2024
200
Sun Aug 25 08:32:32 PM JST 2024
^C

EC2インスタンス開始

コマンド
aws ec2 start-instances --instance-ids ${EC2_ID_1}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 start-instances --instance-ids ${EC2_ID_1}
{
    "StartingInstances": [
        {
            "CurrentState": {
                "Code": 0,
                "Name": "pending"
            },
            "InstanceId": "i-0ed3b54d25b834102",
            "PreviousState": {
                "Code": 80,
                "Name": "stopped"
            }
        }
    ]
}
コマンド(別タブで実施)
url=http://elb-user1-154512834.ap-northeast-1.elb.amazonaws.com/
while true; do TZ=JST-9 date; curl -o /dev/null -s -w "%{http_code}\n" ${url} ; sleep 1s; done

出力(別タブで実施)
[cloudshell-user@ip-10-132-84-39 ~]$ url=http://elb-user1-154512834.ap-northeast-1.elb.amazonaws.com/
[cloudshell-user@ip-10-132-84-39 ~]$ while true; do TZ=JST-9 date; curl -o /dev/null -s -w "%{http_code}\n" ${url} ; sleep 1s; done
Sun Aug 25 08:29:23 PM JST 2024
200
Sun Aug 25 08:29:25 PM JST 2024
200
Sun Aug 25 08:29:26 PM JST 2024
200
Sun Aug 25 08:29:27 PM JST 2024
200
Sun Aug 25 08:29:29 PM JST 2024
200
Sun Aug 25 08:29:30 PM JST 2024
200
Sun Aug 25 08:29:31 PM JST 2024
200
Sun Aug 25 08:29:33 PM JST 2024
200
Sun Aug 25 08:29:34 PM JST 2024
200
Sun Aug 25 08:29:35 PM JST 2024
200
Sun Aug 25 08:29:37 PM JST 2024
200
Sun Aug 25 08:29:38 PM JST 2024
200
Sun Aug 25 08:29:39 PM JST 2024
200
Sun Aug 25 08:29:41 PM JST 2024
200
Sun Aug 25 08:29:42 PM JST 2024
200
Sun Aug 25 08:29:43 PM JST 2024
200
Sun Aug 25 08:29:45 PM JST 2024
502
Sun Aug 25 08:29:46 PM JST 2024
502
Sun Aug 25 08:29:47 PM JST 2024
200
Sun Aug 25 08:29:48 PM JST 2024
200
Sun Aug 25 08:29:50 PM JST 2024
504
Sun Aug 25 08:30:01 PM JST 2024
200
Sun Aug 25 08:30:03 PM JST 2024
200
Sun Aug 25 08:30:04 PM JST 2024
504
Sun Aug 25 08:30:15 PM JST 2024
504
Sun Aug 25 08:30:26 PM JST 2024
200
Sun Aug 25 08:30:28 PM JST 2024
200
Sun Aug 25 08:30:29 PM JST 2024
200
Sun Aug 25 08:30:30 PM JST 2024
200
Sun Aug 25 08:30:32 PM JST 2024
200
Sun Aug 25 08:30:33 PM JST 2024
200
Sun Aug 25 08:30:34 PM JST 2024
200
Sun Aug 25 08:30:36 PM JST 2024
200
Sun Aug 25 08:30:37 PM JST 2024
200
Sun Aug 25 08:30:38 PM JST 2024
200
Sun Aug 25 08:30:40 PM JST 2024
200
Sun Aug 25 08:30:41 PM JST 2024
200
Sun Aug 25 08:30:43 PM JST 2024
200
Sun Aug 25 08:30:44 PM JST 2024
200
Sun Aug 25 08:30:45 PM JST 2024
200
Sun Aug 25 08:30:47 PM JST 2024
200
Sun Aug 25 08:30:48 PM JST 2024
200
Sun Aug 25 08:30:49 PM JST 2024
200
Sun Aug 25 08:30:51 PM JST 2024
200
Sun Aug 25 08:30:52 PM JST 2024
200
Sun Aug 25 08:30:53 PM JST 2024
200
Sun Aug 25 08:30:55 PM JST 2024
200
Sun Aug 25 08:30:56 PM JST 2024
200
Sun Aug 25 08:30:58 PM JST 2024
200
Sun Aug 25 08:30:59 PM JST 2024
200
Sun Aug 25 08:31:00 PM JST 2024
200
Sun Aug 25 08:31:02 PM JST 2024
200
Sun Aug 25 08:31:03 PM JST 2024
200
Sun Aug 25 08:31:04 PM JST 2024
200
Sun Aug 25 08:31:06 PM JST 2024
200
Sun Aug 25 08:31:07 PM JST 2024
200
Sun Aug 25 08:31:08 PM JST 2024
200
Sun Aug 25 08:31:10 PM JST 2024
200
Sun Aug 25 08:31:11 PM JST 2024
200
Sun Aug 25 08:31:13 PM JST 2024
200
Sun Aug 25 08:31:14 PM JST 2024
200
Sun Aug 25 08:31:15 PM JST 2024
200
Sun Aug 25 08:31:17 PM JST 2024
200
Sun Aug 25 08:31:18 PM JST 2024
200
Sun Aug 25 08:31:19 PM JST 2024
200
Sun Aug 25 08:31:21 PM JST 2024
200
Sun Aug 25 08:31:22 PM JST 2024
200
Sun Aug 25 08:31:23 PM JST 2024
200
Sun Aug 25 08:31:25 PM JST 2024
200
Sun Aug 25 08:31:26 PM JST 2024
200
Sun Aug 25 08:31:27 PM JST 2024
200
Sun Aug 25 08:31:29 PM JST 2024
200
Sun Aug 25 08:31:30 PM JST 2024
200
Sun Aug 25 08:31:31 PM JST 2024
200
Sun Aug 25 08:31:33 PM JST 2024
200
Sun Aug 25 08:31:34 PM JST 2024
200
Sun Aug 25 08:31:36 PM JST 2024
200
Sun Aug 25 08:31:37 PM JST 2024
200
Sun Aug 25 08:31:38 PM JST 2024
200
Sun Aug 25 08:31:40 PM JST 2024
200
Sun Aug 25 08:31:41 PM JST 2024
200
Sun Aug 25 08:31:42 PM JST 2024
200
Sun Aug 25 08:31:44 PM JST 2024
200
Sun Aug 25 08:31:45 PM JST 2024
200
Sun Aug 25 08:31:47 PM JST 2024
200
Sun Aug 25 08:31:48 PM JST 2024
200
Sun Aug 25 08:31:49 PM JST 2024
200
Sun Aug 25 08:31:51 PM JST 2024
200
Sun Aug 25 08:31:52 PM JST 2024
200
Sun Aug 25 08:31:53 PM JST 2024
200
Sun Aug 25 08:31:55 PM JST 2024
200
Sun Aug 25 08:31:56 PM JST 2024
200
Sun Aug 25 08:31:58 PM JST 2024
200
Sun Aug 25 08:31:59 PM JST 2024
200
Sun Aug 25 08:32:00 PM JST 2024
200
Sun Aug 25 08:32:02 PM JST 2024
200
Sun Aug 25 08:32:03 PM JST 2024
200
Sun Aug 25 08:32:04 PM JST 2024
200
Sun Aug 25 08:32:06 PM JST 2024
200
Sun Aug 25 08:32:07 PM JST 2024
200
Sun Aug 25 08:32:08 PM JST 2024
200
Sun Aug 25 08:32:10 PM JST 2024
200
Sun Aug 25 08:32:11 PM JST 2024
200
Sun Aug 25 08:32:12 PM JST 2024
200
Sun Aug 25 08:32:13 PM JST 2024
200
Sun Aug 25 08:32:15 PM JST 2024
200
Sun Aug 25 08:32:16 PM JST 2024
200
Sun Aug 25 08:32:18 PM JST 2024
200
Sun Aug 25 08:32:19 PM JST 2024
200
Sun Aug 25 08:32:20 PM JST 2024
200
Sun Aug 25 08:32:22 PM JST 2024
200
Sun Aug 25 08:32:23 PM JST 2024
200
Sun Aug 25 08:32:24 PM JST 2024
200
Sun Aug 25 08:32:25 PM JST 2024
200
Sun Aug 25 08:32:27 PM JST 2024
200
Sun Aug 25 08:32:28 PM JST 2024
200
Sun Aug 25 08:32:29 PM JST 2024
200
Sun Aug 25 08:32:31 PM JST 2024
200
Sun Aug 25 08:32:32 PM JST 2024
^C

オプション 2:RDS DB インスタンスのフェイルオーバーを⾏い、全体の可⽤性を確認

DBインスタンス再起動

コマンド
aws rds reboot-db-instance \
    --db-instance-identifier ${DB_INSTANCE_IDENTIFIER} \
    --force-failover \
    --no-cli-pager

出力
[cloudshell-user@ip-10-132-84-39 ~]$ aws rds reboot-db-instance \
>     --db-instance-identifier ${DB_INSTANCE_IDENTIFIER} \
>     --force-failover
>     --no-cli-pager
{
    "DBInstance": {
        "DBInstanceIdentifier": "db-user1",
        "DBInstanceClass": "db.t3.micro",
        "Engine": "mysql",
        "DBInstanceStatus": "rebooting",
        "MasterUsername": "admin",
        "DBName": "wordpress",
        "Endpoint": {
            "Address": "db-user1.clacqicsiqrt.ap-northeast-1.rds.amazonaws.com",
            "Port": 3306,
            "HostedZoneId": "Z24O6O9L7SGTNB"
        },
        "AllocatedStorage": 20,
        "InstanceCreateTime": "2024-08-25T09:35:37.302000+00:00",
        "PreferredBackupWindow": "13:43-14:13",
        "BackupRetentionPeriod": 0,
        "DBSecurityGroups": [],
        "VpcSecurityGroups": [
            {
                "VpcSecurityGroupId": "sg-08c2854a9b34f089b",
                "Status": "active"
            }
        ],
        "DBParameterGroups": [
            {
                "DBParameterGroupName": "default.mysql8.0",
                "ParameterApplyStatus": "in-sync"
            }
        ],
        "AvailabilityZone": "ap-northeast-1a",
        "DBSubnetGroup": {
            "DBSubnetGroupName": "db-subnet-user1",
            "DBSubnetGroupDescription": "RDS for MySQL",
            "VpcId": "vpc-02b5fbe797028d4e8",
            "SubnetGroupStatus": "Complete",
            "Subnets": [
                {
                    "SubnetIdentifier": "subnet-04ef02ee504c79f77",
                    "SubnetAvailabilityZone": {
                        "Name": "ap-northeast-1a"
                    },
                    "SubnetOutpost": {},
                    "SubnetStatus": "Active"
                },
                {
                    "SubnetIdentifier": "subnet-06ddf6a468a549ff8",
                    "SubnetAvailabilityZone": {
                        "Name": "ap-northeast-1c"
                    },
                    "SubnetOutpost": {},
                    "SubnetStatus": "Active"
                }
            ]
        },
        "PreferredMaintenanceWindow": "sun:15:03-sun:15:33",
        "PendingModifiedValues": {},
        "MultiAZ": true,
        "EngineVersion": "8.0.35",
        "AutoMinorVersionUpgrade": true,
        "ReadReplicaDBInstanceIdentifiers": [],
        "LicenseModel": "general-public-license",
        "OptionGroupMemberships": [
            {
                "OptionGroupName": "default:mysql-8-0",
                "Status": "in-sync"
            }
        ],
        "SecondaryAvailabilityZone": "ap-northeast-1c",
        "PubliclyAccessible": false,
        "StorageType": "gp2",
        "DbInstancePort": 0,
        "StorageEncrypted": true,
        "KmsKeyId": "arn:aws:kms:ap-northeast-1:999999999999:key/951b3fa0-aedb-4215-a2e6-9b7c2f5292e5",
        "DbiResourceId": "db-JLWEZ2TQ2U6TEYZGZWHYZ7R3L4",
        "CACertificateIdentifier": "rds-ca-rsa2048-g1",
        "DomainMemberships": [],
        "CopyTagsToSnapshot": false,
        "MonitoringInterval": 0,
        "DBInstanceArn": "arn:aws:rds:ap-northeast-1:999999999999:db:db-user1",
        "IAMDatabaseAuthenticationEnabled": false,
        "PerformanceInsightsEnabled": false,
        "DeletionProtection": false,
        "AssociatedRoles": [],
        "MaxAllocatedStorage": 1000,
        "TagList": [],
        "CustomerOwnedIpEnabled": false,
        "BackupTarget": "region",
        "NetworkType": "IPV4",
        "StorageThroughput": 0,
        "CertificateDetails": {
            "CAIdentifier": "rds-ca-rsa2048-g1",
            "ValidTill": "2025-08-25T09:34:46+00:00"
        },
        "DedicatedLogVolume": false,
        "EngineLifecycleSupport": "open-source-rds-extended-support"
    }
}
コマンド(別タブで実施)
url=http://elb-user1-154512834.ap-northeast-1.elb.amazonaws.com/
while true; do TZ=JST-9 date; curl -o /dev/null -s -w "%{http_code}\n" ${url} ; sleep 1s; done

出力(別タブで実施)
[cloudshell-user@ip-10-132-84-39 ~]$ url=http://elb-user1-154512834.ap-northeast-1.elb.amazonaws.com/
[cloudshell-user@ip-10-132-84-39 ~]$ while true; do TZ=JST-9 date; curl -o /dev/null -s -w "%{http_code}\n" ${url} ; sleep 1s; done
Sun Aug 25 08:37:40 PM JST 2024
200
Sun Aug 25 08:37:42 PM JST 2024
200
Sun Aug 25 08:37:43 PM JST 2024
200
Sun Aug 25 08:37:44 PM JST 2024
200
Sun Aug 25 08:37:46 PM JST 2024
200
Sun Aug 25 08:37:47 PM JST 2024
200
Sun Aug 25 08:37:48 PM JST 2024
200
Sun Aug 25 08:37:50 PM JST 2024
200
Sun Aug 25 08:37:51 PM JST 2024
200
Sun Aug 25 08:37:52 PM JST 2024
200
Sun Aug 25 08:37:54 PM JST 2024
200
Sun Aug 25 08:37:55 PM JST 2024
200
Sun Aug 25 08:37:56 PM JST 2024
200
Sun Aug 25 08:37:58 PM JST 2024
200
Sun Aug 25 08:37:59 PM JST 2024
200
Sun Aug 25 08:38:00 PM JST 2024 ←1分間通信断
504
Sun Aug 25 08:39:01 PM JST 2024
200
Sun Aug 25 08:39:03 PM JST 2024
200
Sun Aug 25 08:39:04 PM JST 2024
200
Sun Aug 25 08:39:05 PM JST 2024
200
Sun Aug 25 08:39:07 PM JST 2024
200
Sun Aug 25 08:39:08 PM JST 2024
200
Sun Aug 25 08:39:09 PM JST 2024
200
Sun Aug 25 08:39:11 PM JST 2024
200
Sun Aug 25 08:39:12 PM JST 2024
200
Sun Aug 25 08:39:13 PM JST 2024
200
Sun Aug 25 08:39:15 PM JST 2024
200
Sun Aug 25 08:39:16 PM JST 2024
200
Sun Aug 25 08:39:17 PM JST 2024
200
Sun Aug 25 08:39:19 PM JST 2024
200
Sun Aug 25 08:39:20 PM JST 2024
200
Sun Aug 25 08:39:21 PM JST 2024
200
Sun Aug 25 08:39:23 PM JST 2024
200
Sun Aug 25 08:39:24 PM JST 2024
200
Sun Aug 25 08:39:25 PM JST 2024
200
Sun Aug 25 08:39:27 PM JST 2024
200
Sun Aug 25 08:39:28 PM JST 2024
200
Sun Aug 25 08:39:29 PM JST 2024
200
Sun Aug 25 08:39:31 PM JST 2024
200
Sun Aug 25 08:39:32 PM JST 2024
200
Sun Aug 25 08:39:33 PM JST 2024
200
Sun Aug 25 08:39:34 PM JST 2024
200
Sun Aug 25 08:39:36 PM JST 2024
200
Sun Aug 25 08:39:37 PM JST 2024
200
Sun Aug 25 08:39:38 PM JST 2024
200
Sun Aug 25 08:39:40 PM JST 2024
200
Sun Aug 25 08:39:41 PM JST 2024
200
Sun Aug 25 08:39:43 PM JST 2024
200
Sun Aug 25 08:39:44 PM JST 2024
200
Sun Aug 25 08:39:45 PM JST 2024
200

イベント確認

コマンド
aws rds describe-events \
    --source-identifier ${DB_INSTANCE_IDENTIFIER} \
    --source-type db-instance \
    --output table \
    --no-cli-pager

出力
[cloudshell-user@ip-10-132-84-39 ~]$ aws rds describe-events \
>     --source-identifier ${DB_INSTANCE_IDENTIFIER} \
>     --source-type db-instance \
>     --output table \
>     --no-cli-pager
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|                                                                                            DescribeEvents                                                                                             |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
||                                                                                               Events                                                                                                ||
|+------------------------------------+-----------------------------------------------------------------+---------------------------------------------------------+--------------------+---------------+|
||                Date                |                             Message                             |                        SourceArn                        | SourceIdentifier   |  SourceType   ||
|+------------------------------------+-----------------------------------------------------------------+---------------------------------------------------------+--------------------+---------------+|
||  2024-08-25T11:06:52.329000+00:00  |  Applying modification to convert to a Multi-AZ DB Instance     |  arn:aws:rds:ap-northeast-1:999999999999:db:db-user1    |  db-user1          |  db-instance  ||
|+------------------------------------+-----------------------------------------------------------------+---------------------------------------------------------+--------------------+---------------+|
|||                                                                                          EventCategories                                                                                          |||
||+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+||
|||  configuration change                                                                                                                                                                             |||
||+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+||
||                                                                                               Events                                                                                                ||
|+----------------------------------+-----------------------------------------------------------------------+-------------------------------------------------------+-------------------+--------------+|
||               Date               |                                Message                                |                       SourceArn                       | SourceIdentifier  | SourceType   ||
|+----------------------------------+-----------------------------------------------------------------------+-------------------------------------------------------+-------------------+--------------+|
||  2024-08-25T11:15:35.168000+00:00|  Finished applying modification to convert to a Multi-AZ DB Instance  |  arn:aws:rds:ap-northeast-1:999999999999:db:db-user1  |  db-user1         |  db-instance ||
|+----------------------------------+-----------------------------------------------------------------------+-------------------------------------------------------+-------------------+--------------+|
|||                                                                                          EventCategories                                                                                          |||
||+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+||
|||  configuration change                                                                                                                                                                             |||
||+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+||
||                                                                                               Events                                                                                                ||
|+-----------------------------------------+-----------------------------------------------+-----------------------------------------------------------------+-----------------------+-----------------+|
||                  Date                   |                    Message                    |                            SourceArn                            |   SourceIdentifier    |   SourceType    ||
|+-----------------------------------------+-----------------------------------------------+-----------------------------------------------------------------+-----------------------+-----------------+|
||  2024-08-25T11:38:00.724000+00:00       |  Multi-AZ instance failover started.          |  arn:aws:rds:ap-northeast-1:999999999999:db:db-user1            |  db-user1             |  db-instance    ||
|+-----------------------------------------+-----------------------------------------------+-----------------------------------------------------------------+-----------------------+-----------------+|
|||                                                                                          EventCategories                                                                                          |||
||+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+||
|||  failover                                                                                                                                                                                         |||
||+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+||
||                                                                                               Events                                                                                                ||
|+---------------------------------------------+--------------------------------+-----------------------------------------------------------------------+-------------------------+--------------------+|
||                    Date                     |            Message             |                               SourceArn                               |    SourceIdentifier     |    SourceType      ||
|+---------------------------------------------+--------------------------------+-----------------------------------------------------------------------+-------------------------+--------------------+|
||  2024-08-25T11:38:16.147000+00:00           |  DB instance restarted         |  arn:aws:rds:ap-northeast-1:999999999999:db:db-user1                  |  db-user1               |  db-instance       ||
|+---------------------------------------------+--------------------------------+-----------------------------------------------------------------------+-------------------------+--------------------+|
|||                                                                                          EventCategories                                                                                          |||
||+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+||
|||  availability                                                                                                                                                                                     |||
||+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+||
||                                                                                               Events                                                                                                ||
|+---------------------------------------------+--------------------------------+-----------------------------------------------------------------------+-------------------------+--------------------+|
||                    Date                     |            Message             |                               SourceArn                               |    SourceIdentifier     |    SourceType      ||
|+---------------------------------------------+--------------------------------+-----------------------------------------------------------------------+-------------------------+--------------------+|
||  2024-08-25T11:38:21.678000+00:00           |  DB instance restarted         |  arn:aws:rds:ap-northeast-1:999999999999:db:db-user1                  |  db-user1               |  db-instance       ||
|+---------------------------------------------+--------------------------------+-----------------------------------------------------------------------+-------------------------+--------------------+|
|||                                                                                          EventCategories                                                                                          |||
||+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+||
|||  availability                                                                                                                                                                                     |||
||+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+||
||                                                                                               Events                                                                                                ||
|+-----------------------------------------+-----------------------------------------------+-----------------------------------------------------------------+-----------------------+-----------------+|
||                  Date                   |                    Message                    |                            SourceArn                            |   SourceIdentifier    |   SourceType    ||
|+-----------------------------------------+-----------------------------------------------+-----------------------------------------------------------------+-----------------------+-----------------+|
||  2024-08-25T11:38:34.615000+00:00       |  Multi-AZ instance failover completed         |  arn:aws:rds:ap-northeast-1:999999999999:db:db-user1            |  db-user1             |  db-instance    ||
|+-----------------------------------------+-----------------------------------------------+-----------------------------------------------------------------+-----------------------+-----------------+|
|||                                                                                          EventCategories                                                                                          |||
||+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+||
|||  failover                                                                                                                                                                                         |||
||+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+||
||                                                                                               Events                                                                                                ||
|+--------------------------------------+----------------------------------------------------------+------------------------------------------------------------+---------------------+----------------+|
||                 Date                 |                         Message                          |                         SourceArn                          |  SourceIdentifier   |  SourceType    ||
|+--------------------------------------+----------------------------------------------------------+------------------------------------------------------------+---------------------+----------------+|
||  2024-08-25T11:38:34.615000+00:00    |  The user requested a failover of the DB instance.       |  arn:aws:rds:ap-northeast-1:999999999999:db:db-user1       |  db-user1           |  db-instance   ||
|+--------------------------------------+----------------------------------------------------------+------------------------------------------------------------+---------------------+----------------+|

詳細

コマンド
# 詳細
aws rds describe-db-instances \
    --db-instance-identifier ${DB_INSTANCE_IDENTIFIER} \
    --no-cli-pager

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # 詳細
[cloudshell-user@ip-10-132-84-39 ~]$ aws rds describe-db-instances \
>     --db-instance-identifier ${DB_INSTANCE_IDENTIFIER} \
>     --no-cli-pager
{
    "DBInstances": [
        {
            "DBInstanceIdentifier": "db-user1",
            "DBInstanceClass": "db.t3.micro",
            "Engine": "mysql",
            "DBInstanceStatus": "available",
            "MasterUsername": "admin",
            "DBName": "wordpress",
            "Endpoint": {
                "Address": "db-user1.clacqicsiqrt.ap-northeast-1.rds.amazonaws.com",
                "Port": 3306,
                "HostedZoneId": "Z24O6O9L7SGTNB"
            },
            "AllocatedStorage": 20,
            "InstanceCreateTime": "2024-08-25T09:35:37.302000+00:00",
            "PreferredBackupWindow": "13:43-14:13",
            "BackupRetentionPeriod": 0,
            "DBSecurityGroups": [],
            "VpcSecurityGroups": [
                {
                    "VpcSecurityGroupId": "sg-08c2854a9b34f089b",
                    "Status": "active"
                }
            ],
            "DBParameterGroups": [
                {
                    "DBParameterGroupName": "default.mysql8.0",
                    "ParameterApplyStatus": "in-sync"
                }
            ],
            "AvailabilityZone": "ap-northeast-1c",
            "DBSubnetGroup": {
                "DBSubnetGroupName": "db-subnet-user1",
                "DBSubnetGroupDescription": "RDS for MySQL",
                "VpcId": "vpc-02b5fbe797028d4e8",
                "SubnetGroupStatus": "Complete",
                "Subnets": [
                    {
                        "SubnetIdentifier": "subnet-04ef02ee504c79f77",
                        "SubnetAvailabilityZone": {
                            "Name": "ap-northeast-1a"
                        },
                        "SubnetOutpost": {},
                        "SubnetStatus": "Active"
                    },
                    {
                        "SubnetIdentifier": "subnet-06ddf6a468a549ff8",
                        "SubnetAvailabilityZone": {
                            "Name": "ap-northeast-1c"
                        },
                        "SubnetOutpost": {},
                        "SubnetStatus": "Active"
                    }
                ]
            },
            "PreferredMaintenanceWindow": "sun:15:03-sun:15:33",
            "PendingModifiedValues": {},
            "MultiAZ": true,
            "EngineVersion": "8.0.35",
            "AutoMinorVersionUpgrade": true,
            "ReadReplicaDBInstanceIdentifiers": [],
            "LicenseModel": "general-public-license",
            "OptionGroupMemberships": [
                {
                    "OptionGroupName": "default:mysql-8-0",
                    "Status": "in-sync"
                }
            ],
            "SecondaryAvailabilityZone": "ap-northeast-1a",
            "PubliclyAccessible": false,
            "StorageType": "gp2",
            "DbInstancePort": 0,
            "StorageEncrypted": true,
            "KmsKeyId": "arn:aws:kms:ap-northeast-1:999999999999:key/951b3fa0-aedb-4215-a2e6-9b7c2f5292e5",
            "DbiResourceId": "db-JLWEZ2TQ2U6TEYZGZWHYZ7R3L4",
            "CACertificateIdentifier": "rds-ca-rsa2048-g1",
            "DomainMemberships": [],
            "CopyTagsToSnapshot": false,
            "MonitoringInterval": 0,
            "DBInstanceArn": "arn:aws:rds:ap-northeast-1:999999999999:db:db-user1",
            "IAMDatabaseAuthenticationEnabled": false,
            "PerformanceInsightsEnabled": false,
            "DeletionProtection": false,
            "AssociatedRoles": [],
            "MaxAllocatedStorage": 1000,
            "TagList": [],
            "CustomerOwnedIpEnabled": false,
            "ActivityStreamStatus": "stopped",
            "BackupTarget": "region",
            "NetworkType": "IPV4",
            "StorageThroughput": 0,
            "CertificateDetails": {
                "CAIdentifier": "rds-ca-rsa2048-g1",
                "ValidTill": "2025-08-25T09:34:46+00:00"
            },
            "DedicatedLogVolume": false,
            "IsStorageConfigUpgradeAvailable": false,
            "EngineLifecycleSupport": "open-source-rds-extended-support"
        }
    ]
}

10 補足 & まとめ & 今後のラーニングパスについて

RDS削除

コマンド
# RDS削除
aws rds delete-db-instance \
    --db-instance-identifier ${DB_INSTANCE_IDENTIFIER} \
    --skip-final-snapshot \
    --delete-automated-backups \
    --no-cli-pager

# サブネットグループ削除
aws rds delete-db-subnet-group --db-subnet-group-name ${DB_SUBNET_GROUP_NAME}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # RDS削除
[cloudshell-user@ip-10-132-84-39 ~]$ aws rds delete-db-instance \
>     --db-instance-identifier ${DB_INSTANCE_IDENTIFIER} \
>     --skip-final-snapshot \
>     --delete-automated-backups \
>     --no-cli-pager
{
    "DBInstance": {
        "DBInstanceIdentifier": "db-user1",
        "DBInstanceClass": "db.t3.micro",
        "Engine": "mysql",
        "DBInstanceStatus": "deleting",
        "MasterUsername": "admin",
        "DBName": "wordpress",
        "Endpoint": {
            "Address": "db-user1.clacqicsiqrt.ap-northeast-1.rds.amazonaws.com",
            "Port": 3306,
            "HostedZoneId": "Z24O6O9L7SGTNB"
        },
        "AllocatedStorage": 20,
        "InstanceCreateTime": "2024-08-25T09:35:37.302000+00:00",
        "PreferredBackupWindow": "13:43-14:13",
        "BackupRetentionPeriod": 0,
        "DBSecurityGroups": [],
        "VpcSecurityGroups": [
            {
                "VpcSecurityGroupId": "sg-08c2854a9b34f089b",
                "Status": "active"
            }
        ],
        "DBParameterGroups": [
            {
                "DBParameterGroupName": "default.mysql8.0",
                "ParameterApplyStatus": "in-sync"
            }
        ],
        "AvailabilityZone": "ap-northeast-1c",
        "DBSubnetGroup": {
            "DBSubnetGroupName": "db-subnet-user1",
            "DBSubnetGroupDescription": "RDS for MySQL",
            "VpcId": "vpc-02b5fbe797028d4e8",
            "SubnetGroupStatus": "Complete",
            "Subnets": [
                {
                    "SubnetIdentifier": "subnet-04ef02ee504c79f77",
                    "SubnetAvailabilityZone": {
                        "Name": "ap-northeast-1a"
                    },
                    "SubnetOutpost": {},
                    "SubnetStatus": "Active"
                },
                {
                    "SubnetIdentifier": "subnet-06ddf6a468a549ff8",
                    "SubnetAvailabilityZone": {
                        "Name": "ap-northeast-1c"
                    },
                    "SubnetOutpost": {},
                    "SubnetStatus": "Active"
                }
            ]
        },
        "PreferredMaintenanceWindow": "sun:15:03-sun:15:33",
        "PendingModifiedValues": {},
        "MultiAZ": true,
        "EngineVersion": "8.0.35",
        "AutoMinorVersionUpgrade": true,
        "ReadReplicaDBInstanceIdentifiers": [],
        "LicenseModel": "general-public-license",
        "OptionGroupMemberships": [
            {
                "OptionGroupName": "default:mysql-8-0",
                "Status": "in-sync"
            }
        ],
        "SecondaryAvailabilityZone": "ap-northeast-1a",
        "PubliclyAccessible": false,
        "StorageType": "gp2",
        "DbInstancePort": 0,
        "StorageEncrypted": true,
        "KmsKeyId": "arn:aws:kms:ap-northeast-1:999999999999:key/951b3fa0-aedb-4215-a2e6-9b7c2f5292e5",
        "DbiResourceId": "db-JLWEZ2TQ2U6TEYZGZWHYZ7R3L4",
        "CACertificateIdentifier": "",
        "DomainMemberships": [],
        "CopyTagsToSnapshot": false,
        "MonitoringInterval": 0,
        "DBInstanceArn": "arn:aws:rds:ap-northeast-1:999999999999:db:db-user1",
        "IAMDatabaseAuthenticationEnabled": false,
        "PerformanceInsightsEnabled": false,
        "DeletionProtection": false,
        "AssociatedRoles": [],
        "MaxAllocatedStorage": 1000,
        "TagList": [],
        "CustomerOwnedIpEnabled": false,
        "BackupTarget": "region",
        "NetworkType": "IPV4",
        "StorageThroughput": 0,
        "DedicatedLogVolume": false,
        "EngineLifecycleSupport": "open-source-rds-extended-support"
    }
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # サブネットグループ削除
[cloudshell-user@ip-10-132-84-39 ~]$ aws rds delete-db-subnet-group --db-subnet-group-name ${DB_SUBNET_GROUP_NAME}

EC2削除

コマンド
# EC2インスタンス削除
aws ec2 terminate-instances --instance-ids ${EC2_ID_1} ${EC2_ID_2}

# スナップショットID取得
SNAPSHOT_ID=$( \
    aws ec2 describe-images \
        --image-ids ${IMAGE_ID} \
        --query Images[].BlockDeviceMappings[].Ebs.SnapshotId \
        --output text
) \
&& echo ${SNAPSHOT_ID}

# AMI削除
aws ec2 deregister-image --image-id ${IMAGE_ID}

# スナップショットを削除する
aws ec2 delete-snapshot --snapshot-id ${SNAPSHOT_ID}
出力
[cloudshell-user@ip-10-132-84-39 ~]$ # EC2インスタンス削除
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 terminate-instances --instance-ids ${EC2_ID_1} ${EC2_ID_2}
{
    "TerminatingInstances": [
        {
            "CurrentState": {
                "Code": 32,
                "Name": "shutting-down"
            },
            "InstanceId": "i-05d36122200065fdb",
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        },
        {
            "CurrentState": {
                "Code": 32,
                "Name": "shutting-down"
            },
            "InstanceId": "i-0ed3b54d25b834102",
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        }
    ]
}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # スナップショットID取得
[cloudshell-user@ip-10-132-84-39 ~]$ SNAPSHOT_ID=$( \
>     aws ec2 describe-images \
>         --image-ids ${IMAGE_ID} \
>         --query Images[].BlockDeviceMappings[].Ebs.SnapshotId \
>         --output text
> ) \
> && echo ${SNAPSHOT_ID}
snap-0c96f46dc1fe85e4a
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # AMI削除
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 deregister-image --image-id ${IMAGE_ID}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # スナップショットを削除する
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 delete-snapshot --snapshot-id ${SNAPSHOT_ID}

ロードバランサー削除

コマンド
# ロードバランサー削除
aws elbv2 delete-load-balancer --load-balancer-arn ${LB_ARN}

# ターゲットグループ削除
aws elbv2 delete-target-group --target-group-arn ${TARGET_GROUP_ARN}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # ロードバランサー削除
[cloudshell-user@ip-10-132-84-39 ~]$ aws elbv2 delete-load-balancer --load-balancer-arn ${LB_ARN}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ターゲットグループ削除
[cloudshell-user@ip-10-132-84-39 ~]$ aws elbv2 delete-target-group --target-group-arn ${TARGET_GROUP_ARN}

VPC削除

コマンド

# セキュリティグループ削除
aws ec2 delete-security-group --group-id ${ELB_SECURITY_GROUP_ID}
aws ec2 delete-security-group --group-id ${RDS_SG_ID}
aws ec2 delete-security-group --group-id ${EC2_SECURITY_GROUP_ID}

# インターネットゲートウェイ デタッチ
aws ec2 detach-internet-gateway \
    --internet-gateway-id ${IGW_ID}\
    --vpc-id ${VPC_ID}

# インターネットゲートウェイ削除
aws ec2 delete-internet-gateway --internet-gateway-id ${IGW_ID}

# Subnet 削除
aws ec2 delete-subnet --subnet-id ${AZ1_PUB_ID}
aws ec2 delete-subnet --subnet-id ${AZ2_PUB_ID}
aws ec2 delete-subnet --subnet-id ${AZ1_PRI_ID}
aws ec2 delete-subnet --subnet-id ${AZ2_PRI_ID}

# ルートテーブル削除
aws ec2 delete-route-table --route-table-id ${PUB_RT_ID}

# VPC削除
aws ec2 delete-vpc --vpc-id ${VPC_ID}

出力
[cloudshell-user@ip-10-132-84-39 ~]$ # セキュリティグループ削除
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 delete-security-group --group-id ${ELB_SECURITY_GROUP_ID}
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 delete-security-group --group-id ${RDS_SG_ID}
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 delete-security-group --group-id ${EC2_SECURITY_GROUP_ID}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # インターネットゲートウェイ デタッチ
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 detach-internet-gateway \
>     --internet-gateway-id ${IGW_ID}\
>     --vpc-id ${VPC_ID}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # インターネットゲートウェイ削除
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 delete-internet-gateway --internet-gateway-id ${IGW_ID}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # Subnet 削除
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 delete-subnet --subnet-id ${AZ1_PUB_ID}
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 delete-subnet --subnet-id ${AZ2_PUB_ID}
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 delete-subnet --subnet-id ${AZ1_PRI_ID}
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 delete-subnet --subnet-id ${AZ2_PRI_ID}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # ルートテーブル削除
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 delete-route-table --route-table-id ${PUB_RT_ID}
[cloudshell-user@ip-10-132-84-39 ~]$ 
[cloudshell-user@ip-10-132-84-39 ~]$ # VPC削除
[cloudshell-user@ip-10-132-84-39 ~]$ aws ec2 delete-vpc --vpc-id ${VPC_ID}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?