クイック スタート: Node.js を使って 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 portal または Azure CLI を使用して、接続元の IP アドレスにサーバーのファイアウォール規則が追加されていることを確認します。

Node.js と MySQL コネクタのインストール

プラットフォームに応じて、該当するセクションの手順に従って Node.js をインストールしてください。 npm を使用して mysql2 パッケージとその依存関係をプロジェクト フォルダーにインストールしてください。

  1. Node.js ダウンロード ページにアクセスし、必要な Windows インストーラー オプションを選択します。

  2. ローカル プロジェクト フォルダーを作成します (例: nodejsmysql)。

  3. コマンド プロンプトを開き、ディレクトリをプロジェクト フォルダーに変更します (例: cd c:\nodejsmysql\)。

  4. NPM ツールを実行して、mysql2 ライブラリをプロジェクト フォルダーにインストールします。

    cd c:\nodejsmysql\
    "C:\Program Files\nodejs\npm" install mysql2
    "C:\Program Files\nodejs\npm" list
    
  5. npm list の出力テキストを確認してインストール結果を検証します。 バージョン番号は、新しいパッチのリリースに伴って変わる場合があります。

接続情報の取得

Azure Database for MySQL フレキシブル サーバー インスタンスに接続するために必要な接続情報を取得します。 完全修飾サーバー名とサインイン資格情報が必要です。

  1. Azure portal にサインインします。
  2. Azure portal の左側のメニューにある [すべてのリソース] を選択し、作成したサーバー (例: mydemoserver) を検索します。
  3. サーバー名を選択します。
  4. サーバーの [概要] パネルから、 [サーバー名][サーバー管理者ログイン名] を書き留めます。 パスワードを忘れた場合も、このパネルからパスワードをリセットすることができます。

コード サンプルを実行する

  1. JavaScript コードを新しいテキスト ファイルに貼り付け、そのファイルを .js というファイル拡張子でプロジェクト フォルダーに保存します (例: C:\nodejsmysql\createtable.js や/home/username/nodejsmysql/createtable.js)。
  2. コードの hostuserpassword および database 構成オプションを、MySQL フレキシブル サーバーとデータベースを作成した時に指定した値に置き換えます。
  3. パブリック SSL 証明書を取得する: クライアント アプリケーションで暗号化された接続を使うには、パブリック SSL 証明書をダウンロードする必要があります。以下のスクリーンショットに示されているように、その証明書は Azure portal の ネットワーク ブレードでも入手できます。 Azure portal からパブリック SSL 証明書をダウンロードする方法を示すスクリーンショット。

証明書ファイルをダウンロードし、希望の場所に保存します。

  1. ssl config オプションで、 ca-cert ファイル名をこのローカル ファイルのパスに置き換えます。 これにより、アプリケーションが安全に SSL 経由でデータベースに接続できるようになります。
  2. コマンド プロンプトまたは Bash シェルを開き、ディレクトリをプロジェクト フォルダーに変更します (cd nodejsmysql)。
  3. アプリケーションを実行するには、node コマンドに続けてファイル名を入力します (例: node createtable.js)。
  4. Windows で環境変数 PATH に node アプリケーションが追加されていない場合、node アプリケーションを起動するには完全パスを使用する必要があります (例: "C:\Program Files\nodejs\node.exe" createtable.js)

接続、テーブルの作成、データの挿入

接続し、SQL ステートメント CREATE TABLE および INSERT INTO を使用してデータを読み込むには、次のコードを使用します。

Azure Database for MySQL フレキシブル サーバー インスタンスとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーへの接続を確立するには、connect() 関数を使用します。 MySQL データベースに対して SQL クエリを実行するには、query() 関数を使用します。

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'your_server_name.mysql.database.azure.com',
    user: 'your_admin_name',
    password: 'your_admin_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', 250],
        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 ステートメントを使用してデータを読み取るには、次のコードを使用します。

Azure Database for MySQL フレキシブル サーバー インスタンスとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーとの接続を確立するには、connect() メソッドを使用します。 MySQL データベースに対して SQL クエリを実行するには、query() メソッドを使用します。 クエリの結果は、results 配列を使って保存します。

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'your_server_name.mysql.database.azure.com',
    user: 'your_admin_name',
    password: 'your_admin_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 ステートメントを使用してデータを更新するには、次のコードを使用します。

Azure Database for MySQL フレキシブル サーバー インスタンスとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーとの接続を確立するには、connect() メソッドを使用します。 MySQL データベースに対して SQL クエリを実行するには、query() メソッドを使用します。

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'your_server_name.mysql.database.azure.com',
    user: 'your_admin_name',
    password: 'your_admin_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 = ?', [75, '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 ステートメントを使ってデータを削除します。

Azure Database for MySQL フレキシブル サーバー インスタンスとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーとの接続を確立するには、connect() メソッドを使用します。 MySQL データベースに対して SQL クエリを実行するには、query() メソッドを使用します。

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'your_server_name.mysql.database.azure.com',
    user: 'your_admin_name',
    password: 'your_admin_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

次のステップ