Amazon RDS とは?基本的な使い方やインスタンス作成を学ぼう
アプリケーション開発においてデータベースは欠かせない存在ですが、サーバーのセットアップや OS のパッチ適用、バックアップの管理など、運用面の負担は小さくないです。Amazon RDS(Relational Database Service)はそうした管理作業の多くを AWS が代わりに担ってくれるマネージド型のリレーショナルデータベースサービスです。本記事では RDS の基本概念から実際のインスタンス作成・接続手順まで説明します。
Amazon RDS とは
RDS は AWS が提供するフルマネージドのリレーショナルデータベースサービスです。データベースエンジンのインストールや OS のパッチ適用、自動バックアップ、フェイルオーバーといった運用タスクを AWS が管理してくれるため、開発者はアプリケーションの構築に集中できます。
EC2 上にデータベースを自前でセットアップする方法と比較すると、日々の運用コストを大幅に削減できる点が大きなメリットです。一方で OS レベルへのアクセスや細かいエンジン設定のカスタマイズには制限があるため、そういった要件がある場合は EC2 上での自己管理型データベースが選択肢になります。
Amazon Relational Database Service (Amazon RDS) とは - Amazon Relational Database Service
Amazon RDS ウェブサービスを使用して、AWS クラウドで簡単にリレーショナルデータベースを設定、運用、およびスケーリングします。
サポートするデータベースエンジン
RDS は複数のデータベースエンジンをサポートしており、既存のシステムで使用しているエンジンをそのまま移行しやすくなっています。
| エンジン | 概要 |
|---|---|
| MySQL | 最も広く普及したオープンソースのリレーショナルデータベース |
| PostgreSQL | 高機能・高拡張性で、JSON サポートや豊富な型を持つオープンソース DB |
| MariaDB | MySQL から派生したオープンソース DB。MySQL と高い互換性を持つ |
| Oracle | エンタープライズ向けの商用データベース |
| Microsoft SQL Server | Windows 環境や .NET アプリとの親和性が高い Microsoft 製 DB |
| Amazon Aurora | AWS が独自開発したエンジン。MySQL・PostgreSQL 互換で高い性能と可用性を持つ |
中でも Amazon Aurora は RDS 専用に設計されており、同等の MySQL・PostgreSQL と比較してより高いスループットと可用性を実現しています。パフォーマンスや信頼性を重視する場合は Aurora を検討する価値があります。
Amazon Aurora とは - Amazon Aurora
Aurora の概念について説明し、Aurora の初期計画を行います。
主要な機能
RDS にはデータベースの可用性・安全性・パフォーマンスを高めるための機能が複数備わっています。用途やコストに合わせて適切な機能を選択しましょう。
| 機能 | 概要 | 主な効果 |
|---|---|---|
| 自動バックアップ・スナップショット | デフォルトで有効。最大 35 日のポイントインタイムリカバリが可能。手動スナップショットは明示的に削除するまで保持される | 障害発生時に任意の時点へ復元できる |
| マルチ AZ 配置 | 別 AZ にスタンバイレプリカを自動作成し、障害時に 1〜2 分で自動フェイルオーバー。エンドポイントの変更は不要 | 単一障害点を排除し、高可用性を確保できる |
| リードレプリカ | 読み取りクエリを別インスタンスに分散。クロスリージョン対応。スタンドアロン DB への昇格も可能 | 読み取り負荷の高いワークロードのパフォーマンスを改善できる |
バックアップの概要 - Amazon Relational Database Service
自動バックアップと手動バックアップに関する概念。DB インスタンスとマルチ AZ DB クラスターの自動バックアップを有効化および無効化し、バックアップ保持期間を変更して、デフォルトの Amazon ...
Amazon RDS でのマルチ AZ 配置の設定と管理 - Amazon Relational Database Service
マルチ AZ 配置を使用して、Amazon RDS で DB インスタンスの高可用性およびフェイルオーバーサポートを取得します。
DB インスタンスのリードレプリカの操作 - Amazon Relational Database Service
ソース Amazon RDS DB インスタンスからリードレプリカを作成して、読み取り操作をスケールアウトします。
AWS CLI で RDS を使ってみる
AWS CLI を使って MySQL エンジンの RDS インスタンスを作成し、接続するまでの流れを確認します。サブネットグループとセキュリティグループを用意してからインスタンスを作成するのが基本的な手順です。事前に VPC・サブネットが作成済みであることを前提としています。
サブネットグループの作成
RDS インスタンスは VPC 内に配置するため、まずデータベース用のサブネットグループを作成します。サブネットグループには 2 つ以上の AZ のサブネットを含める必要があります。
❯ aws rds create-db-subnet-group \
--db-subnet-group-name exrecord-rds-subnet-group \
--db-subnet-group-description "Subnet group for exrecord RDS" \
--subnet-ids subnet-0a1b2c3d4e5f67890 subnet-0a1b2c3d4e5f67891
{
"DBSubnetGroup": {
"DBSubnetGroupName": "exrecord-rds-subnet-group",
"DBSubnetGroupDescription": "Subnet group for exrecord RDS",
"VpcId": "vpc-0a1b2c3d4e5f67890",
"SubnetGroupStatus": "Complete",
"Subnets": [
{
"SubnetIdentifier": "subnet-0a1b2c3d4e5f67891",
"SubnetAvailabilityZone": {
"Name": "ap-northeast-1c"
},
"SubnetOutpost": {},
"SubnetStatus": "Active"
},
{
"SubnetIdentifier": "subnet-0a1b2c3d4e5f67890",
"SubnetAvailabilityZone": {
"Name": "ap-northeast-1a"
},
"SubnetOutpost": {},
"SubnetStatus": "Active"
}
],
"DBSubnetGroupArn": "arn:aws:rds:ap-northeast-1:123456789012:subgrp:exrecord-rds-subnet-group",
"SupportedNetworkTypes": [
"IPV4"
]
}
}
セキュリティグループの作成
RDS インスタンスへの接続を制御するセキュリティグループを作成します。ここでは MySQL のデフォルトポート 3306 への接続を許可します。実際の運用では、接続元を特定の IP アドレスや EC2 インスタンスのセキュリティグループに限定しましょう。
❯ aws ec2 create-security-group \
--group-name exrecord-rds-sg \
--description "Security group for exrecord RDS" \
--vpc-id vpc-0a1b2c3d4e5f67890
{
"GroupId": "sg-0a1b2c3d4e5f67890",
"SecurityGroupArn": "arn:aws:ec2:ap-northeast-1:123456789012:security-group/sg-0a1b2c3d4e5f67890"
}
作成したセキュリティグループに MySQL (3306) のインバウンドルールを追加します。ここでは AWS のデフォルト VPC の CIDR(172.31.0.0/16)を指定しています。カスタム VPC を使用している場合はご自身の VPC の CIDR に合わせて変更しましょう。
❯ aws ec2 authorize-security-group-ingress \
--group-id sg-0a1b2c3d4e5f67890 \
--protocol tcp \
--port 3306 \
--cidr 172.31.0.0/16
{
"Return": true,
"SecurityGroupRules": [
{
"SecurityGroupRuleId": "sgr-0a1b2c3d4e5f67890",
"GroupId": "sg-0a1b2c3d4e5f67890",
"GroupOwnerId": "123456789012",
"IsEgress": false,
"IpProtocol": "tcp",
"FromPort": 3306,
"ToPort": 3306,
"CidrIpv4": "172.31.0.0/16",
"SecurityGroupRuleArn": "arn:aws:ec2:ap-northeast-1:123456789012:security-group-rule/sgr-0a1b2c3d4e5f67890"
}
]
}
RDS インスタンスの作成
サブネットグループとセキュリティグループが準備できたら、RDS インスタンスを作成します。--no-publicly-accessible を指定することで VPC 外からの直接接続を制限し、セキュアな構成にします。
❯ aws rds create-db-instance \
--db-instance-identifier exrecord-mysql \
--db-instance-class db.t3.micro \
--engine mysql \
--engine-version 8.0 \
--master-username admin \
--master-user-password MyPassword123! \
--allocated-storage 20 \
--db-subnet-group-name exrecord-rds-subnet-group \
--vpc-security-group-ids sg-0a1b2c3d4e5f67890 \
--no-publicly-accessible \
--backup-retention-period 7
実行結果
{
"DBInstance": {
"DBInstanceIdentifier": "exrecord-mysql",
"DBInstanceClass": "db.t3.micro",
"Engine": "mysql",
"DBInstanceStatus": "creating",
"MasterUsername": "admin",
"AllocatedStorage": 20,
"PreferredBackupWindow": "14:39-15:09",
"BackupRetentionPeriod": 7,
"DBSecurityGroups": [],
"VpcSecurityGroups": [
{
"VpcSecurityGroupId": "sg-0a1b2c3d4e5f67890",
"Status": "active"
}
],
"DBParameterGroups": [
{
"DBParameterGroupName": "default.mysql8.0",
"ParameterApplyStatus": "in-sync"
}
],
"DBSubnetGroup": {
"DBSubnetGroupName": "exrecord-rds-subnet-group",
"DBSubnetGroupDescription": "Subnet group for exrecord RDS",
"VpcId": "vpc-0a1b2c3d4e5f67890",
"SubnetGroupStatus": "Complete",
"Subnets": [
{
"SubnetIdentifier": "subnet-0a1b2c3d4e5f67891",
"SubnetAvailabilityZone": {
"Name": "ap-northeast-1c"
},
"SubnetOutpost": {},
"SubnetStatus": "Active"
},
{
"SubnetIdentifier": "subnet-0a1b2c3d4e5f67890",
"SubnetAvailabilityZone": {
"Name": "ap-northeast-1a"
},
"SubnetOutpost": {},
"SubnetStatus": "Active"
}
]
},
"PreferredMaintenanceWindow": "sat:17:16-sat:17:46",
"UpgradeRolloutOrder": "second",
"PendingModifiedValues": {
"MasterUserPassword": "****"
},
"MultiAZ": false,
"EngineVersion": "8.0.45",
"AutoMinorVersionUpgrade": true,
"ReadReplicaDBInstanceIdentifiers": [],
"LicenseModel": "general-public-license",
"StorageThroughput": 0,
"OptionGroupMemberships": [
{
"OptionGroupName": "default:mysql-8-0",
"Status": "in-sync"
}
],
"PubliclyAccessible": false,
"StorageType": "gp2",
"DbInstancePort": 0,
"StorageEncrypted": false,
"DbiResourceId": "db-0a1b2c3d4e5f67890",
"CACertificateIdentifier": "rds-ca-rsa2048-g1",
"DomainMemberships": [],
"CopyTagsToSnapshot": false,
"MonitoringInterval": 0,
"DBInstanceArn": "arn:aws:rds:ap-northeast-1:123456789012:db:exrecord-mysql",
"IAMDatabaseAuthenticationEnabled": false,
"DatabaseInsightsMode": "standard",
"PerformanceInsightsEnabled": false,
"DeletionProtection": false,
"AssociatedRoles": [],
"TagList": [],
"CustomerOwnedIpEnabled": false,
"NetworkType": "IPV4",
"BackupTarget": "region",
"CertificateDetails": {
"CAIdentifier": "rds-ca-rsa2048-g1"
},
"DedicatedLogVolume": false,
"EngineLifecycleSupport": "open-source-rds-extended-support"
}
}
インスタンスの作成には数分かかります。以下のコマンドでステータスが available になるまで待ちます。
❯ aws rds describe-db-instances \
--db-instance-identifier exrecord-mysql \
--query "DBInstances[0].DBInstanceStatus"
"available"
エンドポイントの確認
インスタンスが available になったら、接続に使用するエンドポイントを確認します。エンドポイントはインスタンス作成時に自動で割り当てられる DNS 名で、アプリケーションや MySQL クライアントからの接続先として使用します。
❯ aws rds describe-db-instances \
--db-instance-identifier exrecord-mysql \
--query "DBInstances[0].Endpoint"
{
"Address": "exrecord-mysql.c0a1b2c3d4e5.ap-northeast-1.rds.amazonaws.com",
"Port": 3306,
"HostedZoneId": "Z24O6O9L7SGTNB"
}
MySQL クライアントからの接続
同一 VPC 内の EC2 インスタンスや踏み台サーバーから、取得したエンドポイントを使って接続できます。RDS インスタンスをパブリックアクセス不可に設定しているため、インターネット経由での直接接続はできないです。接続元のサーバーに mysql クライアントがインストールされている必要があります。
[ec2-user@ip-172-31-x-x ~]$ mysql -h exrecord-mysql.c0a1b2c3d4e5.ap-northeast-1.rds.amazonaws.com \
-u admin \
-p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 39
Server version: 8.0.45 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 コマンドでデータベースの操作が行えます。
インスタンスの削除
不要になったインスタンスは削除しましょう。--skip-final-snapshot を指定すると最終スナップショットを作成せずに削除できますが、本番環境では省略してスナップショットを残しておくことをお勧めします。
❯ aws rds delete-db-instance \
--db-instance-identifier exrecord-mysql \
--skip-final-snapshot
実行結果
{
"DBInstance": {
"DBInstanceIdentifier": "exrecord-mysql",
"DBInstanceClass": "db.t3.micro",
"Engine": "mysql",
"DBInstanceStatus": "deleting",
"MasterUsername": "admin",
"Endpoint": {
"Address": "exrecord-mysql.c0a1b2c3d4e5.ap-northeast-1.rds.amazonaws.com",
"Port": 3306,
"HostedZoneId": "Z24O6O9L7SGTNB"
},
"AllocatedStorage": 20,
"InstanceCreateTime": "2026-04-17T19:41:16.201000+00:00",
"PreferredBackupWindow": "14:39-15:09",
"BackupRetentionPeriod": 7,
"DBSecurityGroups": [],
"VpcSecurityGroups": [
{
"VpcSecurityGroupId": "sg-0a1b2c3d4e5f67890",
"Status": "active"
}
],
"DBParameterGroups": [
{
"DBParameterGroupName": "default.mysql8.0",
"ParameterApplyStatus": "in-sync"
}
],
"AvailabilityZone": "ap-northeast-1c",
"DBSubnetGroup": {
"DBSubnetGroupName": "exrecord-rds-subnet-group",
"DBSubnetGroupDescription": "Subnet group for exrecord RDS",
"VpcId": "vpc-0a1b2c3d4e5f67890",
"SubnetGroupStatus": "Complete",
"Subnets": [
{
"SubnetIdentifier": "subnet-0a1b2c3d4e5f67891",
"SubnetAvailabilityZone": {
"Name": "ap-northeast-1c"
},
"SubnetOutpost": {},
"SubnetStatus": "Active"
},
{
"SubnetIdentifier": "subnet-0a1b2c3d4e5f67890",
"SubnetAvailabilityZone": {
"Name": "ap-northeast-1a"
},
"SubnetOutpost": {},
"SubnetStatus": "Active"
}
]
},
"PreferredMaintenanceWindow": "sat:17:16-sat:17:46",
"UpgradeRolloutOrder": "second",
"PendingModifiedValues": {},
"LatestRestorableTime": "2026-04-17T20:04:38+00:00",
"MultiAZ": false,
"EngineVersion": "8.0.45",
"AutoMinorVersionUpgrade": true,
"ReadReplicaDBInstanceIdentifiers": [],
"LicenseModel": "general-public-license",
"StorageThroughput": 0,
"OptionGroupMemberships": [
{
"OptionGroupName": "default:mysql-8-0",
"Status": "in-sync"
}
],
"PubliclyAccessible": false,
"StorageType": "gp2",
"DbInstancePort": 0,
"StorageEncrypted": false,
"DbiResourceId": "db-0a1b2c3d4e5f67890",
"CACertificateIdentifier": "",
"DomainMemberships": [],
"CopyTagsToSnapshot": false,
"MonitoringInterval": 0,
"DBInstanceArn": "arn:aws:rds:ap-northeast-1:123456789012:db:exrecord-mysql",
"IAMDatabaseAuthenticationEnabled": false,
"DatabaseInsightsMode": "standard",
"PerformanceInsightsEnabled": false,
"DeletionProtection": false,
"AssociatedRoles": [],
"TagList": [],
"CustomerOwnedIpEnabled": false,
"NetworkType": "IPV4",
"BackupTarget": "region",
"DedicatedLogVolume": false,
"EngineLifecycleSupport": "open-source-rds-extended-support"
}
}
まとめ
Amazon RDS の基本概念と AWS CLI を使ったインスタンスの作成・接続手順について説明しました。
- RDS は OS のパッチ適用やバックアップなどの運用管理を AWS が担うマネージドデータベースサービス
- MySQL・PostgreSQL・Aurora など複数のエンジンをサポートしており、既存システムを移行しやすい
- マルチ AZ で可用性を高め、リードレプリカで読み取り性能をスケールできる
- インスタンスは VPC 内に配置し、セキュリティグループで接続元を制限することでセキュアな構成を保てる
- 自動バックアップとスナップショットを活用することで、障害時の復旧にも対応できる