• トップ
  • ブログ一覧
  • 【後編】Blockchain Data Managerを使ってみた~データ送信編~
  • 【後編】Blockchain Data Managerを使ってみた~データ送信編~

    広告メディア事業部広告メディア事業部
    2020.09.03

    IT技術

    後編~Blockchain Data Managerとは~

    「Azure Blockchain Service」は、Azure上でブロックチェーン技術を使うためのプラットフォームです。

    「Blockchain Data Manager」は、「Azure Blockchain Service」のトランザクションデータについて、キャプチャ」「変換」「配信」という3つの連続した操作を統合します。

    今回は、前回に引き続き、Blockchain Data Managerを使ってみたいと思います!

    前編をご覧になってない方は、まずはそちらからお読みください。

    featureImg2020.08.28【前編】Blockchain Data Managerを使ってみた~知識編~前編~Blockchain Data Managerとは~Azure Blockchain Serviceとは「Azu...

    Ⅵ.データベースにデータを送るイベントの設定

    ロジックアプリとは

    「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へ接続するため、空のロジックアプリを追加します。

    ロジックアプリの作成の詳細については、以下のページも参考にしてください。

    【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トリガーで設定します。

    Cosmos DBアクションを追加する

    トランザクションごとにドキュメントを作成する Cosmos DB アクションを追加します。

    トランザクションメッセージの種類を、パーティションキーとして分類します。

    Visual Studio Code の機能拡張「Logic Apps」からも見ることができます。

    (1) アクションの追加

    (2) API接続の作成

    「Ⅴ.Azure Cosmos DBの作成」で生成した、データベースIDとコレクションIDを使用します。

    (3) ドキュメント設定

    ドキュメント設定を選択し、[動的コンテンツの追加]で式の項目に以下のコードを入力します。

    このコードによってメッセージのデータを取得し、IDをタイムスタンプ値に設定できます。

    1addProperty(triggerBody()?['data'], 'id', utcNow())

    (4) パラメータの追加

    [新しいパラメーターの追加]を選択し、[パーティションキーの値]を選択します。

    1 "@{triggerBody()['data']['MessageType']}"

    Ⅶ.Event Gridトピックの作成

    Azure Event Gridトピックとは、イベント操作でデータベースにデータを送信するための、サブスクリプションエンドポイントを設定する機能です。

    この機能を設定することで、「トピックエンドポイント」を「Event Grid トピック」のトップページから確認できるようになります。

    Event Grid トピックの作成

    [すべてのサービス]ー[すべてのリソース]ー[Event Gridトピック]を検索し、作成します。

    Event Grid サブスクリプションの作成

    Event Grid サブスクリプションは、データベースにデータを送信するためのイベントハンドラーやエンドポイントを設定する機能です。

    (1) イベントサブスクリプションの追加

    (2) イベントハンドラーの選択

    選択できるイベントハンドラーは、以下の7種類です。

    1. Azure 関数
    2. Web hook
    3. ストレージキュー
    4. Event Hub
    5. ハイブリッド接続
    6. Service Bus キュー
    7. Service Bus トピック

    今回は「Relay」を使用したハイブリッド接続を使用します。

    (3) ハイブリッド接続の設定

    ハイブリッド接続は、Node.js 接続と WebSocket 接続の両方をサポートしています。

    今回は Visual Studio Code と NPM で接続確認します。

    Ⅷ.データベースへの送信と確認

    トランザクションでメッセージを送る

    次に、トランザクションをブロックチェーン台帳に送信して、作成した内容をテストします。

    手順

    設定と確認の流れは、以下のとおりです。

    1. Visual Studio Code で Contract フォルダー内の HelloBlockchain.sol を右クリックします。
    2. [Show Smart Contract Interaction Page] を選択します。
    3. [Contract Action] - [SendRequest] を選択します。
    4. [RequestMessage] に「Hello! Blockchain!」と入力し、[EXECUTE] ボタンをクリックします。
    5. [SendRequest] - [RequestMessage] と [ResponseMessage] - [RequestMessage] が同じになったら送信完了です。
    6. CosmosDB - データエクスプローラーからも確認できます。
    7. Visual Studio Code と Node を接続した後に Azure Blockchain 機能拡張から確認できます。

    画面イメージ

    Ⅸ.トランザクションデータの確認

    イベントが正しく動作しているか、トランザクションデータの確認をします。

    今回、以下の3種類の確認方法を試してみます。

    1. CosmosDB 上のデータエクスプローラーで確認する場合
    2. Visual Studio Code で確認する場合
    3. Relay を使用し、Node.js で確認する場合

    1.CosmosDB 上のデータエクスプローラーで確認する場合

    データエクスプローラー上で確認するには、CosmosDB のデータベースアカウントを開き、左の項目から[データエクスプローラー]を選択します。

    2.Visual Studio Code で確認する場合

    Visual Studio Code で確認するには、Azure Blockchain 機能拡張から[Connect to Network]を選択し、ノードに接続します。

    画面イメージ

    3.Relayを使用し、トランザクションデータをNode.jsで確認する場合

    「Relay」からのメッセージを送信するために、Node.js コンソールアプリケーションを作成します。

    今回は「Relay」の Hybrid 接続を利用したため、Websocket での接続も可能です。

    手順は、以下のとおりです。

    (1) NPMパッケージの追加

    Node のコマンドプロンプトから、以下のコマンドを入力し NPM をインストールしてください。

    1npm install hyco-https

    (2) サーバーアプリケーション(リスナー)の作成

    listener.js という名前の JavaScript ファイルを作成し、以下のコードを記述します。

    1const https = require('hyco-https');
    2
    3const ns = "{RelayNamespace}";
    4const path = "{HybridConnectionName}";
    5const keyrule = "{SASKeyName}";
    6const key = "{SASKeyValue}";
    7
    8var uri = https.createRelayListenUri(ns, path);
    9var server = https.createRelayedServer(
    10    {
    11        server : uri,
    12        token : () => https.createRelayToken(uri, keyrule, key)
    13    },
    14    (req, res) => {
    15        console.log('request accepted: ' + req.method + ' on ' + req.url);
    16        res.setHeader('Content-Type', 'text/html');
    17        res.end('<html><head><title>Hey!</title></head><body>Relayed Node.js Server!</body></html>');
    18    });
    19
    20server.listen( (err) => {
    21        if (err) {
    22          return console.log('something bad happened', err)
    23        }
    24        console.log(`server is listening on ${port}`)
    25      });
    26
    27server.on('error', (err) => {
    28    console.log('error: ' + err);
    29});

    なお、{} 内の値には「Ⅳ.(4)共有アクセスポリシーの作成」を参照し、以下のように設定します。

    定数
    const nsRelay 名前空間
    (Ex. {namespace).servicebus.windows.net)
    const pathハイブリッド接続の名前
    const keyruleSAS キーの名前
    const keySAS キーの値

    (3) クライアントアプリケーション(センダー)の作成

    sender.js という新しい JavaScript ファイルを作成し、以下のコードを記述します。

    1const https = require('hyco-https');
    2
    3const ns = "{RelayNamespace}";
    4const path = "{HybridConnectionName}";
    5const keyrule = "{SASKeyName}";
    6const key = "{SASKeyValue}";
    7
    8https.get({
    9    hostname : ns,
    10    path : (!path || path.length == 0 || path[0] !== '/'?'/':'') + path,
    11    port : 443,
    12    headers : {
    13        'ServiceBusAuthorization' : 
    14            https.createRelayToken(https.createRelayHttpsUri(ns, path), keyrule, key)
    15    }
    16}, (res) => {
    17    let error;
    18    if (res.statusCode !== 200) {
    19        console.error('Request Failed.\n Status Code: ${statusCode}');
    20        res.resume();
    21    } 
    22    else {
    23        res.setEncoding('utf8');
    24        res.on('data', (chunk) => {
    25            console.log(`BODY: ${chunk}`);
    26        });
    27        res.on('end', () => {
    28            console.log('No more data in response.');
    29        });
    30    };
    31}).on('error', (e) => {
    32    console.error(`Got error: ${e.message}`);
    33});

    (4) サーバアプリケーションの実行

    Node.js のコマンドプロンプト上で以下のコマンドを入力し、サーバアプリケーションを実行します。

    1node listener.js

    (5) クライアントアプリケーションの実行

    Node.js のコマンドプロンプト上で、以下のコマンドとメッセージを入力し、クライアントアプリケーションを実行します。

    1node sender.js
    2"メッセージを入力"

    (6) 結果確認

    サーバアプリケーションコンソールに、クラアントアプリケーションで入力したテキストが出力されることを確認します。

    さいごに

    Azure Blockchain Datamanager を使用してみていかがでしたか?

    強固なセキュリティー設定と安価なコストで、Amazon Wab Services(AWS)と接続ができることが特徴だと思います。

    エンタープライズ版らしい、使い勝手の良さが光りますね!

    Marketplace のアプリの豊富さや Visual Studio Code との親和性により、Blockchain Developer からも人気があります。

    また、ビッグデータを扱うエンタープライズと小規模グループでのアプリケーション開発、その両方に対応できるようになっているので、汎用性もあります。

    1ヶ月にかかるコストも、2万円以内で納まりそうなくらい安価なのも嬉しい点ですね。

    意外だったのは、ロジックアプリです。

    暗号資産のイーサリアムやインスタグラムなどのソーシャルメディアプリと、接続し易い環境を作ることができるのは、ひとつの発見でした。

    Azure Blockchain にはトークンも作れる機能もあるということなので、今後、Blockchain アプリを活用をして、色々作ってみたいと思いました。

    皆さんもチャレンジしてみてください!

    関連記事はこちら

    featureImg2020.08.28【前編】Blockchain Data Managerを使ってみた~知識編~前編~Blockchain Data Managerとは~Azure Blockchain Serviceとは「Azu...

    featureImg2020.09.01【中編】Blockchain Data Managerを使ってみた~準備編~中編~Blockchain Data Managerとは~「Azure Blockchain Service」は、Az...

    こちらの記事もオススメ!

    featureImg2020.08.14ブロックチェーン特集知識編ブロックチェーンとコンセンサスアルゴリズム実装編【Blockchain Data Managerを使ってみたEt...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    広告メディア事業部

    広告メディア事業部

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background