目次
はじめに
こんにちは新入社員のタナミです。
今回は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を使う場面は多々あると思うので、なるべく使って行きたいところです。
ではまた次のブログでお会いしましょう!
よろしくお願いします。