Azure Functions に挑戦!(Node.js から SQL Server に接続する)

開発部の上條です。
みなさんはクラウド開発ってしたことありますか? 実を言うと、私は今までクラウド開発の経験がなかったのですが、先日 Azure に触れる機会がありました。
今回は、その時に調べたりプログラムを組んだりしたことをまとめていきます。

そもそもクラウドとか Azure って何?

さて、冒頭で「今回は Azure についてです!」とは言ったものの、当初の私は Azure 以前にクラウドがどういうものなのかも明確には理解していない状況でした。そこで、まずはクラウド・Azure ってなんなのかというところから学んでいくことに。
クラウドとは、「クラウドコンピューティング」の略称で、ユーザーが自分の端末に持っていないアプリやサービスをインターネット等のネットワークを経由して必要な時に利用できる形態のことを指します。
上記の通り、自分の端末にソフトやアプリをインストールしなくても必要になった時に随時利用できるので、ハードウェアの物理的スペースやシステム構築の時間などの導入コストを削減できるというメリットがあります。また、インターネットに繋がってさえいれば、どの端末からでも同じデータやサービスを利用できるというのも大きな特徴です。
クラウドサービスは、ソフトウェアを提供する SaaS(Software as a Service)、開発環境(プラットフォーム)を提供する PaaS(Platform as a Service)、インフラ機能を提供する HaaS(Hardware as a Service)/IaaS(Infrastructure as a Service)の3種類に分類されます。
クラウドサービスを利用する際には「ポータル」と呼ばれるサイトにブラウザでアクセスし、このポータル上で利用するサービス種別(開発環境含む)や課金情報などを管理します。
そんなクラウドサービスの一つが Azure(アジュール)。正式には Microsoft Azure と言い、その名の通り Microsoft社が提供しています。Azure を利用するにはアカウント登録が必要となります。
では、大まかにクラウドと Azure について理解したところで、本題の Azure 上で実際にプログラムを作っていきます。

作成するアプリの前提

今回は、Azure SQL Database に登録されているデータをログに出力するプログラムを Node.js で実装します。実行した際に、DB から取得したデータがログに出力できれば OK です。
なお、前述の通り Azure で開発を行うにはあらかじめ Azure アカウントが必要です。また、今回実装・構築する SQL Server や関数アプリなどのリソースは新たに作成するリソースグループ内でまとめて管理するようにします。
※この記事は2020年3月時点の情報を基に作成しており、今後のバージョンアップ等により動作しなくなる場合があります。

関数アプリの作成

まずは関数アプリを作成します。今回は Microsoft が提供しているイベントドリブン型のサーバレスコンピューティング プラットフォームである Azure Functions というクラウドサービスの機能を使用して関数アプリを作成します。Azure のポータルにサインイン後、メニューから「関数アプリ」→「追加」の順にクリックします。

アプリ名やリソースグループなどの必要項目を入力して、「確認および作成」をクリックします。そうすると関数アプリが新規追加されるので、アプリのページに移動して関数名の右にある「+」をクリックして関数を追加します。
今回の関数は、実行トリガーを HttpTrigger 、承認レベルを Function で作成しましょう。

上図のように index.js が開かれた状態になっていればOKです。
試しに、自動で作成されたこのコードをここで一度実行してみましょう。「関数の URL の取得」をクリックして表示される URL をコピーし後ろに「&name=testUser」を追加してブラウザで実行すると、以下のような画面になります。

なお URL に注目すると「?code=」で始まる文字列が含まれています。これは先ほどの関数作成時に承認レベルを「function」に設定したことで、関数実行のための認証キーとして生成された文字列です。この文字列が1文字でも異なっていると関数を実行できません。
認証キーなしでの実行可能な関数としたい場合は、承認レベルを anonymous にすることで、認証なしでの実行が可能となります。ただし、URL からも「code=」の文字列が消えているので、URL に追加する文字列を「&name=testUser」から「?name=testUser」に変更する必要があります。

SQL データベースの作成

続いて、関数のアクセス先となるデータベースを作成・設定します。今回は Azure が提供しているサービスを利用して新たに SQL Server のテーブルを作成しますが、事前に用意したテーブルやあらかじめ構築してある SQL Server のテーブルを利用しても問題ありません。
まずは Azure 上に SQL Server を構築します。
Azure ポータルのメニューから「すべてのサービス」→「SQL Server」→「追加」の順にクリックしていくと作成画面に遷移します。

必要事項を入力し、確認画面で「作成」をクリックで作成されます。
これで SQL Server が作成されましたが、データベースとテーブルの作成も必要です。再びメニューを開き「SQLデータベース」→「追加」の順にクリックしてデータベースの作成を行います。

SQL Serverの新規追加時と同様に、必要事項を入力後「作成」をクリックしてデータベースを作成します。リソースグループとSQL Serverは、どちらも作成したものを設定しましょう。

これで SQL Server 内にデータベースも作成できました。
あとはコマンド、もしくは SQL Server Management System などのツールを利用して、テーブル作成とデータの登録をしましょう。
今回はサンプルとして、ID・名前(name)・年齢(age)・所属(department)・入社日(hire_date)をカラムとして持つ従業員テーブルEmployeesを作成しました。データもいくつか追加しておきます。

DB アクセス処理の実装

Functions が作成できたので、ここから DB アクセスに関わる部分の実装を進めていきます。
Node.js と SQL Server は直接通信を行うことができないため、Node.js と SQL Server との通信を行う tedious というパッケージをインストールする必要があります。

【注釈】
ここから先の作業を行うにあたり、以下のドキュメントと Web ページに記載の内容を基にしています。ただし、本稿の内容に合わせてソースコードは一部変更しています。
Node.js を使用してデータベースを照会する | Microsoft Docs
Azure Functions から SQLServerに接続する(node.js編) – Qiita

まずはコマンドにて、作成した Functions のディレクトリ(index.js が含まれるディレクトリ)に移動した後、以下のコマンドを入力します。


npm init -y
npm install tedious

このコマンドで tedious のインストールが行われ、Node.js のプログラムから SQL Server への接続が可能となります。
では、いよいよ SQLデータベースとの通信を行う部分の処理を実装していきます。関数アプリの index.js を開き、以下のコードを追加しましょう。

上記コードは SQL Server のテーブルから取得したデータをログに出力する scan_table 関数です。query 文や DB 接続情報などは、実際の環境に合わせて適宜修正してください。
最後に、今追加した関数を呼び出す処理を追記すれば、実装完了です。デフォルトで生成されていたコードを以下の内容に変更します。

11行目で、先ほど作成した scan_table() 関数の呼び出し処理を追加しています。これで、SQL Server のデータベースからデータ取得とログ出力が実行されるようになります。

「プラットフォーム機能」から「ログストリーミング」を起動して、「アプリケーションログ」に取得したデータがログ出力されていれば成功です。関数のエディタ下部の「ログ」欄には出力されないので、ご注意ください。

終わりに

今回は Node.js による Azure Functions での DB アクセス処理をしてみました。
Azure では他にも IoT や機械学習を行うためのサービスも提供しているので、ご興味がある方は是非使ってみてはいかがでしょうか。
それでは、今回はこの辺りで失礼します。

関連記事

  1. nRF Sniffer for Bluetooth LE でデータ解析…

  2. 阿波おどりの連の位置がリアルタイムで分かる!

  3. ASP.NET MVC で Wijmo を使う – 5

  4. 知識ゼロで Unity をはじめてみた【その1 -環境作成-】

  5. 基礎から学べる連載記事!「Bluetooth」「WPF Prism」「…

  6. 高精度気圧センサDPS310の実力を試してみた 【後編】