AWS CLIでRDSインスタンスを作成してEC2から接続する方法

当ページのリンクには広告が含まれています。
AWS CLIでRDSを構築する

AWSのリソースを作成するときはマネジメントコンソール画面で行うことが多いかと思います。

マネジメントコンソールではなく、AWS CLIでもさまざまなAWS環境を構築することが可能です。

今回はAWS CLIでRDSのDBインスタンスを作成する環境を構築します。

また、DBインスタンスの作成に必要なVPCやサブネットグループ等も作成していきます。

AWS CLIを使用するとマネジメントコンソールよりも複雑になってしまいますが、細かい部分までパラメータで指定する必要があるのでいい勉強になるのでぜひトライしてみましょう!

今回は無料利用枠の範囲内のパラメータを使用するので、安心して実行してください。

以下の記事では、現役のAWSエンジニア目線でAWSが学べるスクールを4つ厳選したのでぜひ参考にしてください。

>>【2023年最新】AWS初心者におすすめAWSが学べるスクール4選を見る

目次

最終構成

今回構築するのは最終的に以下のような構成です。

EC2とRDSのAWS構成図

以下のリソースを作成していきます。

リソース記事内でのIDの表記備考
VPCvpc-123456リージョン:ap-northeast-1
CIDR:10.0.0.0/16
プライベートサブネットsubnet-aaaaaaアベイラビリティゾーン:ap-northeast-1a
CIDR:10.0.1.0/24
プライベートサブネットsubnet-aaaaaaアベイラビリティゾーン:ap-northeast-1c
CIDR:10.0.3.0/24
サブネットグループmy-db-subnet-group上記2つのサブネットを関連づけたグループ
セキュリティグループsg-123456内容はデフォルトのまま
DBインスタンスmy-rds-db作成対象のDBインスタンス

VPC、サブネット、セキュリティグループの作成

まずは、RDSインスタンスの作成に必要な以下のリソースを作成します。

お手持ちですでにこれらのリソースがある人は、ない分だけ作成でもいいです。

  • VPC
  • プライベートサブネット(2つのアベイラビリティゾーンに1つずつ)
  • サブネットグループ
  • セキュリティグループ

VPCの作成

デフォルトのVPCでもいいですが、別途作成したい方はaws ec2 create-vpcコマンドで。

$ aws ec2 create-vpc --cidr-block 10.0.0.0/16 --query Vpc.VpcId --output text

上記コマンドのパラメータ等の詳細は以下で紹介しているので、興味があればぜひ読んでみてください。

今回は上記で作成したVPCがあればOKです。

サブネットの作成

RDSを起動するにはサブネットグループとして複数アベイラビリティゾーン(AZ)のサブネットが必要になるので、ap-northeast-1aとap-northeast-1cのそれぞれプライベートサブネットを作成します。

サブネットの作成はaws ec2 create-subnetコマンドを使いましょう。

CIDRは何でもいいですが、10.0.1.0/24と10.0.3.0/24にしました。

aws ec2 create-subnet \
--vpc-id vpc-123456 \
--cidr-block 10.0.1.0/24 \
--availability-zone ap-northeast-1a \
--query Subnet.SubnetId --output text
aws ec2 create-subnet \
--vpc-id vpc-123456 \
--cidr-block 10.0.3.0/24 \
--availability-zone ap-northeast-1c \
--query Subnet.SubnetId --output text

aws ec2 create-subnetコマンドの詳細もVPCの記事に記載しています。

サブネットグループの作成

RDSインスタンスを起動するには、複数のサブネットをまとめたサブネットグループというものが必要になります。

aws rds create-db-subnet-groupコマンドで、サブネットグループの作成が可能です。

パラメータは以下の通りです。

パラメータ内容設定値例
–db-subnet-group-nameサブネットグループ名任意の文字列
–db-subnet-group-descriptionサブネットの説明任意の文字列
–subnet-idsサブネットグループに関連づけるサブネットIDの一覧(スペース区切りで並べる)subnet-aaaaaa subnet-cccccc

今回はmy-db-subnet-groupという名前のサブネットグループを以下のように作成します。
(subnet-aaaaaaはap-notheast-1aのサブネット、subnet-ccccccはap-notheast-1cのサブネットを表す)

aws rds create-db-subnet-group \
--db-subnet-group-name my-db-subnet-group \
--db-subnet-group-description "Subnet group for RDS" \
--subnet-ids subnet-aaaaaa subnet-cccccc

マネジメントコンソール画面で実際に確認すると、ちゃんと設定した内容でサブネットグループが作成されていることがわかります。

RDSのサブネットグループのマネジメントコンソール画面

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

セキュリティグループをaws ec2 create-security-groupコマンドで作成します。

このセキュリティグループは、RDSのDBインスタンスにアタッチするセキュリティグループです。

aws ec2 create-security-groupコマンドのパラメータは、以下のものを使用します。

パラメータ内容設定値例
–group-nameセキュリティグループ名任意の文字列
–descriptionセキュリティグループの説明任意の文字列
–vpc-idセキュリティグループを作成するVPCのIDvpc-xxxxxx

rds-sgという名前のセキュリティグループを作成します。

$ aws ec2 create-security-group \
--group-name rds-sg \
--description "Security group for RDS" \
--vpc-id vpc-123456

返ってくるセキュリティグループのIDを控えておいてください。

DBインスタンスを作成する

ここまででやっと事前準備が完了しました。

では続いてDBインスタンスをaws cliで作成していきましょう。

一応、RDSのAWS CLIコマンドの公式ドキュメントはこちらです。

DBインスタンスの作成

aws rds create-db-instanceコマンドでDBインスタンスを作成できます。

このコマンドで今回使用するパラメータは以下の通りです。

パラメータが多いですが、マネジメントコンソール画面で構築するときも様々なパラメータを設定する必要があります。

パラメータ内容設定値例
–db-instance-identifierDBインスタンス名任意の文字列
–db-instance-classインスタンスタイプ(DBの性能)db.t3.microなど
–vpc-security-group-idsRDSにアタッチするセキュリティグループIDsg-xxxxxx
–db-subnet-groupRDSインスタンスに関連づけるサブネットグループ
–engine使用するDBエンジン名mysqlなど
–master-usernameマスターアカウントのユーザー名adminなど
–master-user-passwordマスターアカウントのパスワード
–allocated-storageストレージの割り当て200など
–backup-retention-periodDB インスタンスの自動バックアップを保持する日数3など

では、my-rds-dbというインスタンスを作成します。

ユーザー名とパスワードはもっとマシなものにした方がいいです。

$ aws rds create-db-instance \
--db-instance-identifier my-rds-db \
--db-instance-class db.t3.micro \
--vpc-security-group sg-123456 \
--db-subnet-group my-db-subnet-group \
--engine mysql \
--master-username admin \
--master-user-password adminadmin \
--allocated-storage 200 \
--backup-retention-period 3

DBインスタンスの作成には結構時間がかかるので気長に待ちましょう。

DBインスタンスの状態の確認

インスタンスの状態はaws rds describe-db-instancesコマンドで、--db-instance-identifierパラメータにさきほどのDBインスタンス名(今回だとmy-rds-db)を指定すれば確認できます。

$ aws rds describe-db-instances \
--db-instance-identifier my-rds-db

このコマンドを実行すると、DBインスタンスの詳細がずらっと表示されます。

その中で、DBInstancesのDBInstanceStatusというところが作成状況です。

ここがavailableになれば、作成完了しています。

ちなみに、--queryパラメータを使用すれば、コマンドの出力のうち、必要なパラメータだけ取り出すことが可能です。

$ aws rds describe-db-instances \
--db-instance-identifier my-rds-db \
--query 'DBInstances[].DBInstanceStatus' --output text

DBインスタンスのエンドポイントも同様にaws rds describe-db-instancesコマンドの結果に、DBInstances.Endpointというパラメータに含まれています。

aws rds describe-db-instances \
--db-instance-identifier my-rds-db \
--query 'DBInstances[].Endpoint.Address' --output text

マネジメントコンソールでDBインスタンスを確認

ちゃんとDBインスタンスができているのか、マネジメントコンソール画面で確認しておきます。

以下のように、指定した識別子のDBインスタンスが作成できていることを確認できました。

ちなみに、「リージョンとAZ」に記載されている、DBインスタンスが立ち上がったAZは、サブネットグループのサブネットのうち自動でどちらかに設定されるので、ap-northeast-1aの方もいらっしゃるかもしれません。

作成完了したRDSのマネジメントコンソール画面

DBインスタンスを削除する

最後に、作成したDBインスタンスを削除しておきましょう。

DBインスタンスの削除はaws rds delete-db-instanceコマンドで行えます。

–db-instance-identifierパラメータはいつものようにDBインスタンスの名前です。

–skip-final-snapshotというパラメータがありますが、これはDBインスタンスの削除前にスナップショット(バックアップ)を必要としないという意味のパラメータです。

$ aws rds delete-db-instance --db-instance-identifier my-rds-db --skip-final-snapshot

上記コマンド実行後、aws rds describe-db-instancesコマンドでDBインスタンスの状態を確認すると、deletingになります。

しばらくすると、削除が完了します。

$ aws rds describe-db-instances \
--db-instance-identifier my-rds-db \
--query 'DBInstances[].DBInstanceStatus' --output text

EC2からRDSにログインする

続いて、EC2からRDSにログインし、MySQLのクエリを実行するまでを確認します。

EC2インスタンスの作成方法までは紹介しないので、別途作成して頂くか、以下の記事を参考にまずはEC2インスタンスを作成しておいてください。

セキュリティグループの編集

RDSインスタンスに設定したセキュリティグループのインバウンドルールに、ログイン用のルールを追加する必要があります。

セキュリティグループへのインバウンドルールの追加はaws ec2 authorize-security-group-ingressコマンドが使用できます。

今回使用するパラメータは以下の通りです。

パラメータ内容設定値例
–group-idセキュリティグループIDsg-xxxxxx
–protocol追加するルールのプロトコル(tcp/udp/icmp)tcp
–port追加するルールのポート番号(MySQLの場合は3306)3306
–source-group追加するルールのソースとなるセキュリティグループsg-yyyyyy
–cidr追加するルールのソースとなるCIDR0.0.0.0/0

MySQLのDBインスタンスの場合はプロトコルをtcp、ポート番号を3306に指定してください。

また、ルールのソース(アクセス元)の指定はセキュリティグループを指定する方法と、CIDRを指定する方法があります。

EC2などのAWSリソースからの接続には基本的にはセキュリティグループを使用するといいです。

EC2にアタッチしているセキュリティグループをRDSのセキュリティグループのソースに指定することで、EC2からの接続を許可するようになります。(以下のsg-yyyyyyはEC2にアタッチしているセキュリティグループを表す)

aws ec2 authorize-security-group-ingress \
--group-id sg-123456 \
--protocol tcp \
--port 3306 \
--source-group sg-yyyyyy

一方で、一応CIDRを指定する方法もあります。

0.0.0.0/0のようにフルオープンはセキュリティ上あまりおすすめしませんが、一応それでも接続は可能です。

また、EC2のプライベートIPアドレスを指定する方法もあります。(12.34.56.78/32のように)

今回RDSインスタンスはプライベートサブネットに配置しているため、EC2のパブリックIPアドレスを指定しても接続できないことには注意してください。

RDSエンドポイントの取得

aws rds describe-db-instancesコマンドでRDSインスタンスのエンドポイント(接続先)を取得します。

$ aws rds describe-db-instances \
--db-instance-identifier my-rds-db \
--query 'DBInstances[].Endpoint.Address' --output text

mysqlコマンドのインストール

MySQLに接続するにはクライアント側(EC2側)で

[ec2-user]$はEC2上で実行するコマンドと思ってください。

[ec2-user]$ sudo yum install mysql -y

RDSへの接続

いよいよRDSのDBインスタンスに接続します。

mysqlコマンドを使用することでRDSへの接続が可能です。

-hパラメータには先ほど取得したDBインスタンスのエンドポイント、-uパラメータにはRDSインスタンス生成時に指定したユーザー名を指定します。

最後に-pオプションを付けることでパスワードが聞かれるので、RDSインスタンス生成時に指定したパスワードを入力してEnterを実行してください。

[ec2-user]$ mysql -h {RDSインスタンスのエンドポイント} -u admin -p
Enter password:

以下のような画面になり、プロンプトがMSQL [none]>になっていれば成功です。

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 28
Server version: 8.0.28 Source distribution

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

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

MySQL [(none)]>

試しに簡単なMySQLのSQLを実行してみます。

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

このようにMySQLのクエリも成功しました!

ログアウトするときはexitコマンドか、Ctrl+CでEC2に戻れます。

まとめ

今回はAWS CLIを使用してRDSのDBインスタンスを作成しました。

さらに、EC2からRDSのインスタンスに接続し、簡単ではありますがSQLを実行することができました。

マネジメントコンソールだともう少し分かりやすく作成できますが、AWS CLIを使うことでRDS作成に必要なパラメータなどをより詳しく理解できるかと思います。

TerraformやCloudFormationなどのIaCツールでも、同様に細かいパラメータ等を調べて構築する必要があり、勉強になると思いますのでぜひトライしてみてください。

もっと詳しくAWSを知るには

さらにAWSを詳しく知りたいという方は、スクールでAWSを学ぶのもおすすめです。

AWSをスクールで学習するのは、以下のメリットがあります。

  • 必要最低限のサービスを厳選して学習できる
  • ハンズオン形式で効率的に学習できる
  • AWS以外のエンジニアに必要なスキルも同時に学習できる

以下の記事では、AWSが学べるスクールを現役のエンジニア目線で4つに厳選してランキングしているので、ぜひ参考にしてみてください。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次