Node.js 向けの mysql ドライバーパッケージを使用して、AnalyticDB for MySQL クラスターに接続します。
前提条件
作業を開始する前に、以下の要件を満たしていることを確認してください。
Node.js がインストールされていること。インストールは nodejs.org から行えます。
mysqlドライバーパッケージがインストールされていること。次のコマンドを実行してインストールします。npm install mysql --saveご利用の Node.js ホストの IP アドレスが、クラスターのホワイトリストに追加されていること。「ホワイトリストの設定」をご参照ください。
クラスターエンドポイントを取得済みであること。AnalyticDB for MySQL コンソールの クラスター情報 ページから取得できます。
ご利用の Node.js ホスト(例:Elastic Compute Service (ECS) インスタンス)がクラスターと同じ VPC 内にある場合は、内部エンドポイントを使用します。
それ以外の場合は、パブリックエンドポイントを申請してください。「パブリックエンドポイントの申請またはリリース」をご参照ください。
AnalyticDB for MySQL クラスターへの接続
認証情報をソースコード内にハードコードせず、環境変数として保存してください。
サンプルコードを実行する前に、以下の環境変数を設定します。
| 変数 | 説明 | 例 |
|---|---|---|
ADB_HOST | クラスターエンドポイント | am-bp***.ads.aliyuncs.com |
ADB_PORT | ポート番号 | 3306 |
ADB_USER | アカウント名(特権または標準) | account_name |
ADB_PASSWORD | アカウントパスワード | account_password |
ADB_DATABASE | データベース名 | db_name |
次のサンプルコードは、クラスターに接続し、クエリを実行してから接続を閉じます。
// ステップ 1: mysql ドライバーをインポートします。
const mysql = require('mysql');
// ステップ 2: 環境変数から認証情報を使用して接続を作成します。
const connection = mysql.createConnection({
host: process.env.ADB_HOST,
port: parseInt(process.env.ADB_PORT, 10) || 3306,
user: process.env.ADB_USER,
password: process.env.ADB_PASSWORD,
database: process.env.ADB_DATABASE,
// 接続確立時のタイムアウト値。デフォルト: 10000 ms。
connectTimeout: 10000,
});
// ステップ 3: 接続を開きます。
connection.connect((err) => {
if (err) throw err;
console.log('Connection established.');
// ステップ 4: クエリを実行します。
connection.query(
'SELECT count(*) AS count FROM information_schema.tables',
(err, results) => {
if (err) throw err;
console.log('Count:', results[0].count);
// ステップ 5: 接続を閉じます。
connection.end((err) => {
if (err) throw err;
console.log('Connection closed.');
});
}
);
});コードが正常に実行されると、次のような出力が表示されます。
Connection established.
Count: 42
Connection closed.注意事項
本番環境では接続プールを使用してください。 各リクエストごとに新しい接続を作成すると遅延が発生します。
mysql.createPool()を使用して、再利用可能な接続のプールを管理してください。詳細については、mysql ドキュメントをご参照ください。SQL インジェクションを防ぐためにパラメーター化クエリを使用してください。
mysqlパッケージは、クライアント側でクエリの値をエスケープ処理します。ユーザー入力値を SQL 文字列に直接埋め込むのではなく、パラメーターとして渡してください。例については、「クエリ値のエスケープ」をご参照ください。