AWS-Command-Line-Interface

【初心者向け】AWS CLIを使ってEC2+RDSを構築してみよう

はじめに

こんにちは新入社員のタナミです。

今回はAWS CLIを使ってEC2+RDSを構築してみようと思います!

これからAWS CLIを触って見ようという方の参考になればと思います。

CLIを立ち上げよう

今回はAWSのマネジメントコンソール上からCLIと検索しCloudShellを使って構築を行って行きます。

VPCを作成しよう

まずはVPCの作成を行います。
3行目のValue=でVPC名の設定を行っているので設定したい名前に変更してください。

VPC_ID=$(aws ec2 create-vpc \
    --cidr-block 10.0.0.0/16 \
    --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=blogcli-vpc}]' \
    --query 'Vpc.VpcId' --output text)

次にVPCが作成出来たか確認を行います。
下記コマンドを実行しVPC ID: vpc-VPCのIDと返ってくれば成功です。

echo "VPC ID: $VPC_ID"

インターネットゲートウェイを作成しよう

次にインターネットゲートウェイを作成します。
インターネットゲートウェイを作成することでVPCがインターネットとやり取り出来るようになります。

IGW_ID=$(aws ec2 create-internet-gateway \
    --tag-specifications 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=blogcli-igw}]' \
    --query 'InternetGateway.InternetGatewayId' --output text)

作成したインターネットゲートウェイにVPCをアタッチします。

aws ec2 attach-internet-gateway \
    --vpc-id $VPC_ID \
    --internet-gateway-id $IGW_ID

サブネットを作成しよう

次にサブネットの作成を行います。
サブネットはEC2用のパブリックサブネットとRDS用のプライベートサブネットを作成します。

#パブリックサブネットの作成
PUBLIC_SUBNET_ID=$(aws ec2 create-subnet \
    --vpc-id $VPC_ID \
    --cidr-block 10.0.1.0/24 \
    --availability-zone $(aws ec2 describe-availability-zones --query 'AvailabilityZones[0].ZoneName' --output text) \
    --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=blogcli-PublicSubnet}]' \
    --query 'Subnet.SubnetId' --output text)

#プライベートサブネットの作成
PRIVATE_SUBNET1_ID=$(aws ec2 create-subnet \
    --vpc-id $VPC_ID \
    --cidr-block 10.0.2.0/24 \
    --availability-zone $(aws ec2 describe-availability-zones --query 'AvailabilityZones[0].ZoneName' --output text) \
    --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=blogcli-PrivateSubnet}]' \
    --query 'Subnet.SubnetId' --output text)

PRIVATE_SUBNET2_ID=$(aws ec2 create-subnet \
    --vpc-id $VPC_ID \
    --cidr-block 10.0.3.0/24 \
    --availability-zone $(aws ec2 describe-availability-zones --query 'AvailabilityZones[1].ZoneName' --output text) \
    --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=blogcli-PrivateSubnet2}]' \
    --query 'Subnet.SubnetId' --output text)

ルートテーブルを作成しよう

次にルートテーブルを作成します。
ルートテーブルを作成しパブリックサブネットに割り当てることでサブネットがインターネットと直接やり取り出来るようになります。

#ルートテーブルの作成
ROUTE_TABLE_ID=$(aws ec2 create-route-table \
    --vpc-id $VPC_ID \
    --tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=blogcli-PublicRouteTable}]' \
    --query 'RouteTable.RouteTableId' --output text)

#インターネットへのデフォルトルートを設定
aws ec2 create-route \
    --route-table-id $ROUTE_TABLE_ID \
    --destination-cidr-block 0.0.0.0/0 \
    --gateway-id $IGW_ID

#パブリックサブネットにこのルートテーブルを割り当て
aws ec2 associate-route-table \
    --subnet-id $PUBLIC_SUBNET_ID \
    --route-table-id $ROUTE_TABLE_ID

DNSを有効化しよう

最後にDNSを有効化する必要があります。

aws ec2 modify-vpc-attribute \
    --vpc-id $VPC_ID \
    --enable-dns-support

aws ec2 modify-vpc-attribute \
    --vpc-id $VPC_ID \
    --enable-dns-hostnames

EC2を作成する下準備

さて、VPCの作成は完了したので次にEC2の作成...と行きたいところですがまだやるべきことがあります。
それがセキュリティーグループキーペアの作成です!

セキュリティーグループを作成しよう

それではEC2とついでにRDSのセキュリティーグループを作成します。
また、SSH接続を許可するIPは必ず自身のIPアドレスを指定してください。

EC2のセキュリティーグループ

EC2_SG_ID=$(aws ec2 create-security-group \
    --group-name EC2-SecurityGroup \
    --description "Security group for EC2 instance" \
    --vpc-id $VPC_ID \
    --tag-specifications 'ResourceType=security-group,Tags=[{Key=Name,Value=blogcli-EC2-SG}]' \
    --query 'GroupId' --output text)

#SSH接続を許可
aws ec2 authorize-security-group-ingress \
    --group-id $EC2_SG_ID \
    --protocol tcp \
    --port 22 \
    --cidr 0.0.0.0/0

RDSのセキュリティーグループ

RDS_SG_ID=$(aws ec2 create-security-group \
    --group-name RDS-SecurityGroup \
    --description "Security group for RDS instance" \
    --vpc-id $VPC_ID \
    --tag-specifications 'ResourceType=security-group,Tags=[{Key=Name,Value=blogcli-RDS-SG}]' \
    --query 'GroupId' --output text)

#EC2からRDSへの接続の許可
aws ec2 authorize-security-group-ingress \
    --group-id $RDS_SG_ID \
    --protocol tcp \
    --port 3306 \
    --source-group $EC2_SG_ID

キーペアを作成しよう

次にキーペアの作成を行います。

aws ec2 create-key-pair \
    --key-name MyKeyPair \
    --query 'KeyMaterial' \
    --output text > blogcli-MyKeyPair.pem

#権限設定
chmod 400 blogcli-MyKeyPair.pem

#公開鍵の作成
ssh-keygen -y -f blogcli-MyKeyPair.pem > blogcli-MyKeyPair.pub

PUB_KEY_B64=$(base64 -w 0 blogcli-MyKeyPair.pub)

#公開鍵のインポート
aws ec2 import-key-pair \
    --key-name blogcli-MyKeyPair \
    --public-key-material "$PUB_KEY_B64"

また、CloudShellの左上のアクションからファイルのダウンロードで秘密鍵をダウンロードしておきましょう

EC2インスタンスを作成しよう

セキュリティーグループとキーペアを作成することが出来たので
次にEC2インスタンスの作成を行います。

INSTANCE_ID=$(aws ec2 run-instances \
    --image-id ami-07faa35bbd2230d90 \
    --count 1 \
    --instance-type t3.small \
    --key-name blogcli-MyKeyPair \
    --security-group-ids $EC2_SG_ID \
    --subnet-id $PUBLIC_SUBNET_ID \
    --associate-public-ip-address \
    --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=blogcli-EC2}]' \
    --query 'Instances[0].InstanceId' --output text)

以下のコマンドでインスタンスIDが表示されていれば作成完了です!

echo "EC2 Instance ID: $INSTANCE_ID"

RDSを作成しよう

次にRDSを作成しましょう
まずはサブネットグループを作成する必要があります。

aws rds create-db-subnet-group \
    --db-subnet-group-name mydb-subnet-group \
    --db-subnet-group-description "DB subnet group for MariaDB" \
    --subnet-ids $PRIVATE_SUBNET1_ID $PRIVATE_SUBNET2_ID \
    --tags Key=Name,Value=MyDBSubnetGroup

サブネットグループの作成が完了しました。

では、RDSの作成を行いましょう!
master-user-passwordにてパスワードの設定を必ず行ってください。

aws rds create-db-instance \
    --db-instance-identifier blogclidb \
    --db-instance-class db.t3.micro \
    --engine mariadb \
    --master-username admin \
    --master-user-password 'password' \
    --allocated-storage 20 \
    --vpc-security-group-ids $RDS_SG_ID \
    --db-subnet-group-name mydb-subnet-group \
    --backup-retention-period 0 \
    --no-multi-az \
    --no-publicly-accessible \
    --storage-type gp2 \
    --tags Key=Name,Value=blogcli-DB

RDSの作成には時間がかかるので下記コマンド実行しRDSの作成が完了するまで待機します。

aws rds wait db-instance-available --db-instance-identifier blogclidb

EC2からRDSに接続しよう

EC2とRDSを作成することが出来たのでEC2からRDSに接続しましょう!

パブリックIPアドレスとRDSエンドポイントを調べよう

下記コマンドで出力されたものをそれぞれメモしておきます。

#パブリックIPアドレス
echo "EC2 Public IP:"
aws ec2 describe-instances \
    --instance-ids $INSTANCE_ID \
    --query 'Reservations[0].Instances[0].PublicIpAddress' \
    --output text

#RDSのエンドポイント
echo "RDS Endpoint:"
aws rds describe-db-instances \
    --db-instance-identifier blogclidb \
    --query 'DBInstances[0].Endpoint.Address' \
    --output text

EC2にMariaDBクライアントをインストールしよう

作成したEC2にSSH接続します。

ssh -i MyKeyPair.pem ec2-user@パブリックIPをここに貼り付け

下記コマンドからMariaDBクライアントをインストールしましょう。

sudo su -

dnf update
dnf install mariadb105

MariaDBにログインしよう

MariaDBクライアントのインストールが完了したのでRDSエンドポイントを使って作成したRDSにログインします。

mysql -h RDSエンドポイントをここに貼り付け -u admin -p

ログイン後に以下が表示されていれば無事EC2+RDSが構築出来た事になります!

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 76
Server version: 11.4.5-MariaDB managed by https://aws.amazon.com/rds/

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

まとめ

今回はAWS CLIを使ってEC2+RDSを構築してみました。

AWS CLIがどのようなものか体感できたかと思います。
自分は改めてのマネジメントコンソール便利さに気づけました。

しかしながら、今後もCLIを使う場面は多々あると思うので、なるべく使って行きたいところです。
ではまた次のブログでお会いしましょう!

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA