クイック スタート:Node.js を使用して Azure Database for MySQL に接続してデータを照会する
注意事項
この記事では、サービス終了 (EOL) 状態となっている Linux ディストリビューションである CentOS について説明します。 適宜、使用と計画を検討してください。 詳細については、「CentOS のサポート終了に関するガイダンス」を参照してください。
適用対象: Azure Database for MySQL - シングル サーバー
重要
Azure Database for MySQL シングル サーバーは廃止パスにあります。 Azure Database for MySQL フレキシブル サーバーにアップグレードすることを強くお勧めします。 Azure Database for MySQL フレキシブル サーバーへの移行の詳細については、Azure Database for MySQL シングル サーバーの現状に関するページを参照してください
このクイックスタートでは、Node.js を使用して Azure Database for MySQL に接続します。 Mac、Linux、Windows の各プラットフォームから SQL ステートメントを使用して、データベース内のデータをクエリ、挿入、更新、削除できます。
この記事は、Node.js を使用した開発には慣れているものの、Azure Database for MySQL の使用は初めてであるユーザーを想定しています。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- Azure Database for MySQL サーバー。 Azure portal を使用して Azure Database for MySQL サーバーを作成するか、Azure CLI を使用して Azure Database for MySQL サーバーを作成してください。
重要
Azure portal または Azure CLI を使用して、接続元の IP アドレスにサーバーのファイアウォール規則が追加されていることを確認します。
Node.js と MySQL コネクタのインストール
プラットフォームに応じて、該当するセクションの手順に従って Node.js をインストールしてください。 npm を使用して mysql2 パッケージとその依存関係をプロジェクト フォルダーにインストールしてください。
Node.js ダウンロード ページにアクセスし、必要な Windows インストーラー オプションを選択します。
ローカル プロジェクト フォルダーを作成します (例:
nodejsmysql
)。コマンド プロンプトを開き、ディレクトリをプロジェクト フォルダーに変更します (例:
cd c:\nodejsmysql\
)。NPM ツールを実行して、mysql2 ライブラリをプロジェクト フォルダーにインストールします。
cd c:\nodejsmysql\ "C:\Program Files\nodejs\npm" install mysql2 "C:\Program Files\nodejs\npm" list
npm list
の出力テキストを確認してインストール結果を検証します。 バージョン番号は、新しいパッチのリリースに伴って変わる場合があります。
接続情報の取得
Azure Database for MySQL に接続するために必要な接続情報を取得します。 完全修飾サーバー名とログイン資格情報が必要です。
- Azure Portal にログインします。
- Azure portal の左側のメニューにある [すべてのリソース] を選択し、作成したサーバー (例: mydemoserver) を検索します。
- サーバー名を選択します。
- サーバーの [概要] パネルから、 [サーバー名] と [サーバー管理者ログイン名] を書き留めます。 パスワードを忘れた場合も、このパネルからパスワードをリセットすることができます。
コード サンプルの実行
JavaScript コードを新しいテキスト ファイルに貼り付け、そのファイルを .js というファイル拡張子でプロジェクト フォルダーに保存します (例: C:\nodejsmysql\createtable.js や/home/username/nodejsmysql/createtable.js)。
コードの
host
、user
、password
およびdatabase
構成オプションを、サーバーとデータベースを作成した時に指定した値に置き換えます。SSL 証明書を取得する: Azure Database for MySQL サーバーで SSL 経由で通信するために必要な証明書を https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem からダウンロードし、ローカル ドライブに保存します。
Microsoft Internet Explorer と Microsoft Edge の場合: ダウンロードが完了したら、証明書の名前を DigiCertGlobalRootCA.crt.pem に変更します。
ソブリン クラウドにおけるサーバーの証明書については、Azure Government、21Vianet によって運営される Microsoft Azure、Azure Germany の各リンクを参照してください。
ssl
config オプションで、ca-cert
ファイル名をこのローカル ファイルのパスに置き換えます。コマンド プロンプトまたは Bash シェルを開き、ディレクトリをプロジェクト フォルダーに変更します (
cd nodejsmysql
)。アプリケーションを実行するには、node コマンドに続けてファイル名を入力します (例:
node createtable.js
)。Windows で環境変数 PATH に node アプリケーションが追加されていない場合、node アプリケーションを起動するには完全パスを使用する必要があります (例:
"C:\Program Files\nodejs\node.exe" createtable.js
)
接続、テーブルの作成、データの挿入
接続し、SQL ステートメント CREATE TABLE および INSERT INTO を使用してデータを読み込むには、次のコードを使用します。
MySQL サーバーとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーへの接続を確立するには、connect() 関数を使用します。 MySQL データベースに対して SQL クエリを実行するには、query() 関数を使用します。
const mysql = require('mysql2');
const fs = require('fs');
var config =
{
host: 'mydemoserver.mysql.database.azure.com',
user: 'myadmin@mydemoserver',
password: 'your_password',
database: 'quickstartdb',
port: 3306,
ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};
const conn = new mysql.createConnection(config);
conn.connect(
function (err) {
if (err) {
console.log("!!! Cannot connect !!! Error:");
throw err;
}
else
{
console.log("Connection established.");
queryDatabase();
}
});
function queryDatabase(){
conn.query('DROP TABLE IF EXISTS inventory;', function (err, results, fields) {
if (err) throw err;
console.log('Dropped inventory table if existed.');
})
conn.query('CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);',
function (err, results, fields) {
if (err) throw err;
console.log('Created inventory table.');
})
conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['banana', 150],
function (err, results, fields) {
if (err) throw err;
else console.log('Inserted ' + results.affectedRows + ' row(s).');
})
conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['orange', 154],
function (err, results, fields) {
if (err) throw err;
console.log('Inserted ' + results.affectedRows + ' row(s).');
})
conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['apple', 100],
function (err, results, fields) {
if (err) throw err;
console.log('Inserted ' + results.affectedRows + ' row(s).');
})
conn.end(function (err) {
if (err) throw err;
else console.log('Done.')
});
};
データの読み取り
接続し、SELECT SQL ステートメントを使用してデータを読み取るには、次のコードを使用します。
MySQL サーバーとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーとの接続を確立するには、connect() メソッドを使用します。 MySQL データベースに対して SQL クエリを実行するには、query() メソッドを使用します。 クエリの結果は、results 配列を使って保存します。
const mysql = require('mysql2');
const fs = require('fs');
var config =
{
host: 'mydemoserver.mysql.database.azure.com',
user: 'myadmin@mydemoserver',
password: 'your_password',
database: 'quickstartdb',
port: 3306,
ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};
const conn = new mysql.createConnection(config);
conn.connect(
function (err) {
if (err) {
console.log("!!! Cannot connect !!! Error:");
throw err;
}
else {
console.log("Connection established.");
readData();
}
});
function readData(){
conn.query('SELECT * FROM inventory',
function (err, results, fields) {
if (err) throw err;
else console.log('Selected ' + results.length + ' row(s).');
for (i = 0; i < results.length; i++) {
console.log('Row: ' + JSON.stringify(results[i]));
}
console.log('Done.');
})
conn.end(
function (err) {
if (err) throw err;
else console.log('Closing connection.')
});
};
データの更新
接続して UPDATE SQL ステートメントを使ってデータを更新するには、以下のコードを使います。
MySQL サーバーとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーとの接続を確立するには、connect() メソッドを使用します。 MySQL データベースに対して SQL クエリを実行するには、query() メソッドを使用します。
const mysql = require('mysql2');
const fs = require('fs');
var config =
{
host: 'mydemoserver.mysql.database.azure.com',
user: 'myadmin@mydemoserver',
password: 'your_password',
database: 'quickstartdb',
port: 3306,
ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};
const conn = new mysql.createConnection(config);
conn.connect(
function (err) {
if (err) {
console.log("!!! Cannot connect !!! Error:");
throw err;
}
else {
console.log("Connection established.");
updateData();
}
});
function updateData(){
conn.query('UPDATE inventory SET quantity = ? WHERE name = ?', [200, 'banana'],
function (err, results, fields) {
if (err) throw err;
else console.log('Updated ' + results.affectedRows + ' row(s).');
})
conn.end(
function (err) {
if (err) throw err;
else console.log('Done.')
});
};
データの削除
以下のコードを使って接続し、DELETE SQL ステートメントを使ってデータを削除します。
MySQL サーバーとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーとの接続を確立するには、connect() メソッドを使用します。 MySQL データベースに対して SQL クエリを実行するには、query() メソッドを使用します。
const mysql = require('mysql2');
const fs = require('fs');
var config =
{
host: 'mydemoserver.mysql.database.azure.com',
user: 'myadmin@mydemoserver',
password: 'your_password',
database: 'quickstartdb',
port: 3306,
ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};
const conn = new mysql.createConnection(config);
conn.connect(
function (err) {
if (err) {
console.log("!!! Cannot connect !!! Error:");
throw err;
}
else {
console.log("Connection established.");
deleteData();
}
});
function deleteData(){
conn.query('DELETE FROM inventory WHERE name = ?', ['orange'],
function (err, results, fields) {
if (err) throw err;
else console.log('Deleted ' + results.affectedRows + ' row(s).');
})
conn.end(
function (err) {
if (err) throw err;
else console.log('Done.')
});
};
リソースをクリーンアップする
このクイックスタートで使用したすべてのリソースをクリーンアップするには、次のコマンドを使用してリソース グループを削除します。
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes