
【後編】Blockchain Data Managerを使ってみた~データ送信編~
2021.12.20
目次
後編~Blockchain Data Managerとは~
「Azure Blockchain Service」は、Azure上でブロックチェーン技術を使うためのプラットフォームです。
「Blockchain Data Manager」は、「Azure Blockchain Service」のトランザクションデータについて、「キャプチャ」「変換」「配信」という3つの連続した操作を統合します。
今回は、前回に引き続き、Blockchain Data Managerを使ってみたいと思います!
前編をご覧になってない方は、まずはそちらからお読みください。
Ⅵ.データベースにデータを送るイベントの設定
ロジックアプリとは
「Azure Logic Apps(ロジックアプリ)」 は、Event Grid の機能拡張アプリです。
ロジックアプリを使用すると、システムとサービスを統合する際に、ビジネスプロセスやワークフローをスケジュールして自動化することができます。
本項では、ロジックアプリにより、Event Grid を Azure Cosomos DBに接続する手順を説明します。
Event Gridについて
「Event Grid」は、Azure Blockchain Service にメンバー追加後、管理者設定およびBlockchain Datamanager とデータベースの設定が終了すると、使用可能になります。
「Event Grid」には、データベースへのイベントトリガーを設定できる様々な機能拡張があり、「Azure Logic Apps」 もその一つです。
「Azure Logic Apps」は、Marketplace から導入できます。
データベースのデータの取得方法を選択し、クエリドキュメント、ストアドプロシージャー、全てのドキュメントを取得、作成、更新、削除出来るイベント設定やトリガー設定ができます。
設定が完了すると、Visual Studio Code の機能拡張からも DB に接続することができるようになります。
空のロジックアプリの追加
Azure Cosmos DBへ接続するため、空のロジックアプリを追加します。
- Logic Apps作成1
- Logic Apps作成2
- Logic Apps作成3
ロジックアプリの作成の詳細については、以下のページも参考にしてください。
【Microsoft Docs:Azure Logic Appsを使用して自動化されたワークフローを作成する】
https://docs.microsoft.com/ja-jp/azure/logic-apps/quickstart-create-first-logic-app-workflow
イベントグリッドトリガーを追加する
全てのロジックアプリは、トリガーから起動されます。
トリガーは Logic Apps デザイナーから、Azure Event Gridトリガーで設定します。
- Logic Apps作成4
- Logic Apps作成5
Cosmos DBアクションを追加する
トランザクションごとにドキュメントを作成する Cosmos DB アクションを追加します。
トランザクションメッセージの種類を、パーティションキーとして分類します。
Visual Studio Code の機能拡張「Logic Apps」からも見ることができます。
(1) アクションの追加
- Logic Apps作成6
- Logic Apps作成7
(2) API接続の作成
「Ⅴ.Azure Cosmos DBの作成」で生成した、データベースIDとコレクションIDを使用します。
- CosmosDBデータベースへのAPIを作成する1
- CosmosDBデータベースへのAPIを作成する2
(3) ドキュメント設定
ドキュメント設定を選択し、[動的コンテンツの追加]で式の項目に以下のコードを入力します。
このコードによってメッセージのデータを取得し、IDをタイムスタンプ値に設定できます。
1 | addProperty(triggerBody()?['data'], 'id', utcNow()) |
(4) パラメータの追加
[新しいパラメーターの追加]を選択し、[パーティションキーの値]を選択します。
1 | "@{triggerBody()['data']['MessageType']}" |
Ⅶ.Event Gridトピックの作成
Azure Event Gridトピックとは、イベント操作でデータベースにデータを送信するための、サブスクリプションエンドポイントを設定する機能です。
この機能を設定することで、「トピックエンドポイント」を「Event Grid トピック」のトップページから確認できるようになります。
Event Grid トピックの作成
[すべてのサービス]ー[すべてのリソース]ー[Event Gridトピック]を検索し、作成します。
- Azure Event Gridトピック作成1
- Azure Event Gridトピック作成2
- Azure Event Gridトピック作成3
Event Grid サブスクリプションの作成
Event Grid サブスクリプションは、データベースにデータを送信するためのイベントハンドラーやエンドポイントを設定する機能です。
(1) イベントサブスクリプションの追加
- イベントサブスクリプションの作成1
(2) イベントハンドラーの選択
選択できるイベントハンドラーは、以下の7種類です。
- Azure 関数
- Web hook
- ストレージキュー
- Event Hub
- ハイブリッド接続
- Service Bus キュー
- Service Bus トピック
今回は「Relay」を使用したハイブリッド接続を使用します。
- イベントサブスクリプションの作成2
(3) ハイブリッド接続の設定
ハイブリッド接続は、Node.js 接続と WebSocket 接続の両方をサポートしています。
今回は Visual Studio Code と NPM で接続確認します。
- イベントサブスクリプションの作成3
Ⅷ.データベースへの送信と確認
トランザクションでメッセージを送る
次に、トランザクションをブロックチェーン台帳に送信して、作成した内容をテストします。
手順
設定と確認の流れは、以下のとおりです。
- Visual Studio Code で Contract フォルダー内の HelloBlockchain.sol を右クリックします。
- [Show Smart Contract Interaction Page] を選択します。
- [Contract Action] - [SendRequest] を選択します。
- [RequestMessage] に「Hello! Blockchain!」と入力し、[EXECUTE] ボタンをクリックします。
- [SendRequest] - [RequestMessage] と [ResponseMessage] - [RequestMessage] が同じになったら送信完了です。
- CosmosDB - データエクスプローラーからも確認できます。
- Visual Studio Code と Node を接続した後に Azure Blockchain 機能拡張から確認できます。
画面イメージ
- Visual Studio Codeでスマートコントラクトインタラクションページを使う
- コントラクトにメッセージを送る
Ⅸ.トランザクションデータの確認
イベントが正しく動作しているか、トランザクションデータの確認をします。
今回、以下の3種類の確認方法を試してみます。
- CosmosDB 上のデータエクスプローラーで確認する場合
- Visual Studio Code で確認する場合
- Relay を使用し、Node.js で確認する場合
1.CosmosDB 上のデータエクスプローラーで確認する場合
データエクスプローラー上で確認するには、CosmosDB のデータベースアカウントを開き、左の項目から[データエクスプローラー]を選択します。
- データエクスプローラーの設定4
2.Visual Studio Code で確認する場合
Visual Studio Code で確認するには、Azure Blockchain 機能拡張から[Connect to Network]を選択し、ノードに接続します。
画面イメージ
- Visual Studio Codeで確認する1
- Visual Studio Codeで確認する2
- Visual Studio Codeで確認する3
- Visual Studio Codeで確認する4
- Visual Studio Codeで確認する5
3.Relayを使用し、トランザクションデータをNode.jsで確認する場合
「Relay」からのメッセージを送信するために、Node.js コンソールアプリケーションを作成します。
今回は「Relay」の Hybrid 接続を利用したため、Websocket での接続も可能です。
手順は、以下のとおりです。
(1) NPMパッケージの追加
Node のコマンドプロンプトから、以下のコマンドを入力し NPM をインストールしてください。
1 | npm install hyco-https |
(2) サーバーアプリケーション(リスナー)の作成
listener.js という名前の JavaScript ファイルを作成し、以下のコードを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | const https = require('hyco-https'); const ns = "{RelayNamespace}"; const path = "{HybridConnectionName}"; const keyrule = "{SASKeyName}"; const key = "{SASKeyValue}"; var uri = https.createRelayListenUri(ns, path); var server = https.createRelayedServer( { server : uri, token : () => https.createRelayToken(uri, keyrule, key) }, (req, res) => { console.log('request accepted: ' + req.method + ' on ' + req.url); res.setHeader('Content-Type', 'text/html'); res.end('<html><head><title>Hey!</title></head><body>Relayed Node.js Server!</body></html>'); }); server.listen( (err) => { if (err) { return console.log('something bad happened', err) } console.log(`server is listening on ${port}`) }); server.on('error', (err) => { console.log('error: ' + err); }); |
なお、{} 内の値には「Ⅳ.(4)共有アクセスポリシーの作成」を参照し、以下のように設定します。
定数 | 値 |
---|---|
const ns | Relay 名前空間 (Ex. {namespace).servicebus.windows.net) |
const path | ハイブリッド接続の名前 |
const keyrule | SAS キーの名前 |
const key | SAS キーの値 |
(3) クライアントアプリケーション(センダー)の作成
sender.js という新しい JavaScript ファイルを作成し、以下のコードを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | const https = require('hyco-https'); const ns = "{RelayNamespace}"; const path = "{HybridConnectionName}"; const keyrule = "{SASKeyName}"; const key = "{SASKeyValue}"; https.get({ hostname : ns, path : (!path || path.length == 0 || path[0] !== '/'?'/':'') + path, port : 443, headers : { 'ServiceBusAuthorization' : https.createRelayToken(https.createRelayHttpsUri(ns, path), keyrule, key) } }, (res) => { let error; if (res.statusCode !== 200) { console.error('Request Failed.\n Status Code: ${statusCode}'); res.resume(); } else { res.setEncoding('utf8'); res.on('data', (chunk) => { console.log(`BODY: ${chunk}`); }); res.on('end', () => { console.log('No more data in response.'); }); }; }).on('error', (e) => { console.error(`Got error: ${e.message}`); }); |
(4) サーバアプリケーションの実行
Node.js のコマンドプロンプト上で以下のコマンドを入力し、サーバアプリケーションを実行します。
1 | node listener.js |
(5) クライアントアプリケーションの実行
Node.js のコマンドプロンプト上で、以下のコマンドとメッセージを入力し、クライアントアプリケーションを実行します。
1 2 | node sender.js "メッセージを入力" |
(6) 結果確認
サーバアプリケーションコンソールに、クラアントアプリケーションで入力したテキストが出力されることを確認します。
さいごに
Azure Blockchain Datamanager を使用してみていかがでしたか?
強固なセキュリティー設定と安価なコストで、Amazon Wab Services(AWS)と接続ができることが特徴だと思います。
エンタープライズ版らしい、使い勝手の良さが光りますね!
Marketplace のアプリの豊富さや Visual Studio Code との親和性により、Blockchain Developer からも人気があります。
また、ビッグデータを扱うエンタープライズと小規模グループでのアプリケーション開発、その両方に対応できるようになっているので、汎用性もあります。
1ヶ月にかかるコストも、2万円以内で納まりそうなくらい安価なのも嬉しい点ですね。
意外だったのは、ロジックアプリです。
暗号資産のイーサリアムやインスタグラムなどのソーシャルメディアプリと、接続し易い環境を作ることができるのは、ひとつの発見でした。
Azure Blockchain にはトークンも作れる機能もあるということなので、今後、Blockchain アプリを活用をして、色々作ってみたいと思いました。
皆さんもチャレンジしてみてください!
関連記事はこちら
こちらの記事もオススメ!
書いた人はこんな人

- 「好きなことを仕事にするエンジニア集団」の(株)ライトコードです!
ライトコードは、福岡、東京、大阪の3拠点で事業展開するIT企業です。
現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。
いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。
システム開発依頼・お見積もりは大歓迎!
また、WEBエンジニアとモバイルエンジニアも積極採用中です!
ご応募をお待ちしております!
ITエンタメ2022.07.06高水準言語『FORTRAN』を開発したジョン・バッカス氏
ITエンタメ2022.06.22IntelliJ IDEAとkotlinを送り出したJetBrains創業物語
ITエンタメ2022.06.15【アタリ創業者】スティーブ・ジョブズを雇った男「ノーラン・ブッシュネル」
ITエンタメ2022.06.13プログラミングに飽きてPHPを開発したラスマス・ラードフ