ローカル環境からAmazon RDS(MySQL)にアクセスしてみた

ローカル環境からAmazon RDS(MySQL)にアクセスしてみた

2025.09.30

注意:RDS MySQLのインスタンスはDBサーバーであって、デフォルトのシステムDB(mysql, information_schema, performance_schema, sys)は入っていますが、編集してはいけません。はテスト用のDBは別途作成する必要があります。

実行環境

  • AWSアカウント + AWS CLI
  • MacOS Sequoia 15.6.1
  • Node.js: v22.11.0
  • npm: v10.9.0

手順

最初のセットアップから最後アクセス成功までの手順は下記となります。

  • ネットワーク設定
  • RDS(MySQL)をセットアップ
  • ローカルスクリプトを準備(package.json.envsetup-with-db.jstest.js
  • スクリプト実行

ネットワーク設定

RDSに付与するVPC関連(Route Table/Security Group/Internet Gateway/Network ACL)はローカルマシンのIP、もしくは 0.0.0.0/0allow allで、ローカルマシンからのアクセスを許容するように設定します。

自分のテスト環境のネットワーク設定イメージです。

			
			Local Machine
    ↓
Internet
    ↓
Internet Gateway (igw-04717792f3af330b0)
    ↓
Route Table (rtb-0ce1de65a18956dda)
    ↓
Network ACL (acl-0d62a0a0c3404cb65) - Allow all
    ↓
Subnet (subnet-061e0eb74d5edb959 or subnet-0ce61331a170e1e13)
    ↓
Security Group (sg-0c8489cbc0bae27fe) - Allow all
    ↓
RDS Instance (rds-mysql) on port 3306

		

RDS(MySQL)をセットアップ

  • Amazon RDBコンソール画面に入って、Create databaseを押す
  • Engine TypeにMySQLを選ぶ
  • 簡単な設定を行う:DB instance sizeFree tier、DB instance identifier rds-mysql、Master username admin、Credentials management Self managed、Master password/Confirm master password は自由に
  • 最後までRDS Instanceを作成できて、statusがAvailableになったら、詳細画面に入ると、Modifyで追加設定を行う
  • Connectivity部分のAdditional configurationを開いて、Public accessibleを選択し、次の画面い進む
  • Schedule modificationsにApply immediatelyを選択し、Modify DB instanceで変更完了にする

image (2)
image (3)
image (4)
image (5)
image (6)
image (7)

ローカルスクリプトを準備

package.json

			
			{
    "name": "aws-rds-test",
    "version": "1.0.0",
    "type": "module",
    "scripts": {
        "setup": "node setup.js",
        "test": "node test.js"
    },
    "dependencies": {
        "dotenv": "^17.2.2",
        "mysql2": "^3.0.0"
    }
}

		

.env

			
			RDS_HOSTNAME=xxx.xxxxx.ap-northeast-1.rds.amazonaws.com
RDS_USERNAME=admin
RDS_PASSWORD=yyyyyyy
RDS_DB_NAME=testrds
RDS_PORT=3306

		

setup-with-db.js

			
			import dotenv from 'dotenv';
import mysql from 'mysql2/promise';

// Load .env file
dotenv.config();

// Configuration - connect without database first
const connectionConfig = {
  host: process.env.RDS_HOSTNAME,
  user: process.env.RDS_USERNAME,
  password: process.env.RDS_PASSWORD,
  // No database specified - connect to server
  port: process.env.RDS_PORT || 3306,
  ssl: 'Amazon RDS'
};

// Create database and table
async function setupDatabase() {
  const connection = await mysql.createConnection(connectionConfig);
  
  // Create database
  await connection.execute('CREATE DATABASE IF NOT EXISTS testrds');
  console.log('✅ Database "testrds" created successfully');
  
  // Close connection and reconnect to the new database
  await connection.end();
  
  const dbConnection = await mysql.createConnection({
    ...connectionConfig,
    database: 'testrds'
  });
  
  // Create users table
  const sql = `
    CREATE TABLE IF NOT EXISTS users (
      id INT AUTO_INCREMENT PRIMARY KEY,
      name VARCHAR(255) NOT NULL,
      email VARCHAR(255) UNIQUE NOT NULL,
      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )
  `;

  await dbConnection.execute(sql);
  console.log('✅ Users table created successfully');
  
  await dbConnection.end();
}

// Run setup
setupDatabase();

		

test.js

			
			import dotenv from 'dotenv';
import mysql from 'mysql2/promise';

// Load .env file
dotenv.config();

// Configuration
const connectionConfig = {
  host: process.env.RDS_HOSTNAME,
  user: process.env.RDS_USERNAME,
  password: process.env.RDS_PASSWORD,
  database: process.env.RDS_DB_NAME,
  port: process.env.RDS_PORT || 3306,
  ssl: 'Amazon RDS'
};

// Write user record
async function writeUser(name, email) {
  const connection = await mysql.createConnection(connectionConfig);
  
  const [result] = await connection.execute(
    'INSERT INTO users (name, email) VALUES (?, ?)',
    [name, email]
  );
  
  console.log(`✅ User created: ${name} (${email})`);
  
  await connection.end();
  return result;
}

// Read user records
async function readUsers() {
  const connection = await mysql.createConnection(connectionConfig);
  
  const [rows] = await connection.execute(
    'SELECT id, name, email, created_at FROM users ORDER BY id DESC LIMIT 10'
  );
  
  console.log('📖 Users in database:');
  
  if (rows.length > 0) {
    rows.forEach(row => {
      console.log(`  ID: ${row.id}, Name: ${row.name}, Email: ${row.email}, Created: ${row.created_at}`);
    });
  } else {
    console.log('  No users found');
  }
  
  await connection.end();
  return rows;
}

// Run tests
async function runTests() {
  await writeUser('John Doe', 'john@example.com');
  await readUsers();
}

runTests();

		

スクリプトを実行

以下の順番にコマンド・スクリプトを実行します。

			
			npm install
node setup-with-db.js
node test.js

		

node setup-with-db.js実行結果(testrdbというDBとusersテーブルの作成):

			
			✅ Database "testrdb" created successfully
✅ Users table created successfully

		

node test.js実行結果(John Doeユーザーデータの追加とユーザーデータ一覧の取得):

			
			✅ User created: John Doe (john@example.com)
📖 Users in database:
  ID: 1, Name: John Doe, Email: john@example.com, Created: Tue Sep 30 2025 11:41:38 GMT+0900 (Japan Standard Time)

		

これで、ローカルマシンから RDS(MySQL) にアクセス成功になりました。

以上。

この記事をシェアする

FacebookHatena blogX

関連記事

ローカル環境からAmazon RDS(MySQL)にアクセスしてみた | DevelopersIO