技術検証：AWS CLIを活用したRDSインスタンス（MySQL）の作成と主要パラメータの解説

## はじめに

この記事では、AWS CLIを使用してRDSインスタンス（MySQL）を作成する手順を解説します。

:::note warn
***基本的な設定からRDSインスタンスの起動までの流れを、シンプルにまとめました。***
:::

未来の自分への備忘録としても体系的に整理していきますが、この記事が誰かの技術の支えになれば幸いです！

## 知識整理

今回解説するRDSに関して、過去の記事でも情報を整理しています。***詳細を知りたい方は、以下の記事を参考にしてください。***

https://qiita.com/free-honda/items/d20fb420b98eb99bcddd



## 前提条件

AWS CLIがインストール済みで、初期セットアップが完了していることを前提に進めます。

この記事では、以下のようなイメージでRDSインスタンスを作成します。***手動操作ではなく、コマンドラインでの自動化を実現しています！***

![スクリーンショット 2024-12-23 21.54.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/d8de979a-6eb8-3a25-1d0e-e826dd3493f5.png)
引用画像：https://qiita.com/kokichi8/items/834ca1f26e80fe264733

***AWS CLIのインストール手順やセットアップについては、過去の記事を参考にしてみてください！***

https://qiita.com/free-honda/items/389059edbdb5e7adcd0b

https://qiita.com/free-honda/items/866986d98fdb2fc1a56e

また、今回の記事ではrootユーザーで技術検証を行っていますが、IAMユーザーで作業する場合は、IAMポリシーに「```AmazonRDSFullAccess```」または同等の権限が付与されていることを確認してください。

https://qiita.com/free-honda/items/5bb71782c8a84585206a

***IAMポリシーの設定手順については、上記の記事をご参考ください！***

## 実際に作成してみた

ここでは、AWS CLIを使用してシンプルな構成のRDSインスタンスを作成する手順を説明します。

### 事前準備

まず、以下のコマンドを実行して利用可能なVPCを確認します。出力された```vpc-id```をメモしておきます。

```bash
aws ec2 describe-vpcs
```

RDSインスタンスにアクセスするためのセキュリティグループを作成します。以下のコマンドで、事前に確認した```vpc-id```を指定してください。

```bash
aws ec2 create-security-group \
    --group-name MySQLSecurityGroup \
    --description "Security group for MySQL RDS instance" \
    --vpc-id vpc-12345678
```

***セキュリティグループが正しく作成されていることを確認できました！***

![スクリーンショット 2024-12-23 20.48.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/4b459908-4450-6ad5-0c04-ae94b95027ee.png)

次に、作成したセキュリティグループID（例: ```sg-12345678```）を使用して外部アクセスを許可します。以下のコマンドを実行してください。

```bash
aws ec2 authorize-security-group-ingress \
    --group-id sg-12345678 \
    --protocol tcp \
    --port 3306 \
    --cidr 0.0.0.0/0
```

インバウンドルールに、想定通りの設定が追加されていることを確認できます。

![スクリーンショット 2024-12-23 20.55.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/dd8639ee-7294-5c1e-7817-1a9da1e6cdad.png)

:::note alert
***```0.0.0.0/0```はすべてのIPアドレスからのアクセスを許可します。本番環境では、特定のIPアドレスや範囲に制限することを強く推奨します！***
:::

RDSインスタンスを作成するには、サブネットグループを指定する必要があります。以下のコマンドを実行してサブネットグループを作成してください。

```bash
aws rds create-db-subnet-group \
    --db-subnet-group-name my-mysql-subnet-group \
    --db-subnet-group-description "Subnet group for MySQL RDS instance" \
    --subnet-ids subnet-0b9f8b9f546a1a8f1 subnet-0245c6346cfb1723d
```

***※```subnet-ids```の部分はご自身の環境に合わせて置き換えて、少なくとも2つのサブネットを選択する必要があります。***

![スクリーンショット 2024-12-23 21.32.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/b51d53c9-bade-4b7f-aa5a-4f4390d6ccd4.png)

サブネットグループが正しく作成されていることが確認できました！

### RDSインスタンスの作成手順

RDSインスタンスを作成するには、以下のコマンドを使用します。

```bash
aws rds create-db-instance \
    --db-instance-identifier my-mysql-instance \
    --db-instance-class db.t3.micro \
    --engine mysql \
    --allocated-storage 20 \
    --master-username admin \
    --master-user-password MySecurePassword123 \
    --vpc-security-group-ids sg-03161308e5ea0da80 \
    --db-subnet-group-name my-mysql-subnet-group \
    --backup-retention-period 7 \
    --db-name mydatabase \
    --storage-type gp2
```

:::note alert
**注意:**
```--vpc-security-group-ids```の部分は、事前に作成したセキュリティグループIDに置き換えてください！
:::

***コマンドが正常に実行されると、マネジメントコンソールからも作成プロセスが確認できます！***

![スクリーンショット 2024-12-23 21.49.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/5f8c92b9-0f55-2f0d-a814-c8bcbe3bf7da.png)

### パラメータ説明

***以下に、コマンドで使用した主要なパラメータを簡単に解説していきます！***

:::note
**```--db-instance-identifier```**: RDSインスタンスの一意の名前。

**```--db-instance-class```**: インスタンスの種類。例: db.t3.micro。

**```--engine```**: 使用するデータベースエンジン。ここではmysql。

**```--allocated-storage```**: ストレージの容量（GB）。

**```--master-username```**: データベースの管理者ユーザー名。

**```--master-user-password```**: データベースの管理者パスワード。

**```--vpc-security-group-ids```**: セキュリティグループのID。

**```--backup-retention-period```**: バックアップ保持期間（例: 7日間）。

**```--availability-zone```**: 配置するアベイラビリティゾーン。

**```--db-name```**: 作成するデータベース名。

**```--storage-type```**: ストレージタイプ。gp2は汎用SSD。
:::

### インスタンスのステータス確認

RDSインスタンスが作成されるまでに数分かかる場合があります。以下のコマンドを実行し、ステータスを確認してください。

```bash
aws rds describe-db-instances \
    --db-instance-identifier my-mysql-instance
```

出力に```DBInstanceStatus```が表示され、```available```になるまで待機します。

```bash
{
    "DBInstances": [
        {
            "DBInstanceIdentifier": "my-mysql-instance",
            "DBInstanceClass": "db.t3.micro",
            "Engine": "mysql",
            "DBInstanceStatus": "available",
            "MasterUsername": "admin",
            "DBName": "mydatabase",・・・・（省略）
```

最後に、マネジメントコンソール上からデータベースが作成されていることを確認します。

![スクリーンショット 2024-12-23 21.59.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/6f4af1fe-df84-70e5-88fc-e404fac39517.png)

***ステータスが「利用可能」になっていれば、検証は大成功です！***

## まとめ

AWS CLIを使用してRDSインスタンス（MySQL）を作成する手順をご紹介しました。

:::note alert
***基本的な手順を説明しましたが、必要に応じてIDや設定値を修正すれば、そのままハンズオン形式で実践できる内容となっています。ぜひ試してみてください！！***
:::

この記事が、どなたかの技術的な支えになれば幸いです！

## 関連記事

https://qiita.com/propella/items/807ec930c9f6c9f6d5b8

https://cloud5.jp/cli-rds/

https://qiita.com/kokichi8/items/834ca1f26e80fe264733

https://en-junior.com/rds_cli/