#Azure Blockchain Workbenchとは
AzureにAzure Blockchain Service(以下ABS)とAzure Blockchain Workbench(以下ABW)がある。
ABWはブロックチェーンを展開しやすくしたプラットフォームである。裏でABSを使っている。
ABWの概要について公式のドキュメント:『Azure Blockchain Workbench とは』を参照。
##目標
デジタル改革時代において、あらゆる分野でのブロックチェーンの期待が高まっている。
金融期間だけではなくサプライチェーンやIoTでも活用シーンが増えている。
ABWはブロックチェーン技術の多様化の可能性を広げる。
ABWのREST APIを使用すれば、UIの開発とブロックチェーンの開発を分散できる。
本書でAzure FunctionsからABWのREST APIの使用方法とサンプルを提供し、多様化・活用の拡大を目指す。
##前提条件
対象者:レベル300以上
下記のソフトは事前にインストールしていることを前提とする
1.Postman
2.Visual Studio(VSCode)
3.DOTNET Core SDK and Azure Functions SDK
他にC#とSQLサーバーのスキルが必要。
##事前準備
まず、下記リンクの手順に従ってABWを(Azure AD 構成部分まで)デプロイする。
重要:デプロイするリージョンは手順書通り『米国東部』にしてください。日本リージョンにデプロイすると利用料金が高くなる。
ABWのデプロイ手順書
設定したユーザーIDやパスワードを忘れないように控えておく。
この時点でAzure ADにABWのAPI用のアプリケーションが作成されているはず。
ABWのサンプルをダウンロードして、Asset Transferアプリケーションを追加する。
ローカルフォルダのパスを追って、JSONとSOLを順番にデプロイする。
アプリケーションをクリックして、Ownerロールのユーザーを追加する。
##REST API用のアプリケーションをAzure ADに登録する
1.新規のエンタープライズアプリケーションを作成
Azureポータル→メニュー→Azure Active Directory→エンタープライズアプリケーション→新規アプリケーション
2.APIキーの作成
重要:必ずコピーボタンを押して、作成したキーの値をメモ帳などに保存する。
3.作成したアプリケーションのIDを取得してメモ帳などに保存する。
4.アクセス権限を付与する。
自分のAPIから上記の事前準備で作成されたABWのアプリケーションAPIを選択する。
ABWのアプリケーションAPIが存在しない場合、上記の事前準備からやり直す。
今回はアドミニストレータ権限を付与するので同意が必要。
注意事項:プロダクション(本番)環境は必要最低限の権限を付与する必要がある。
5.ユーザーIDを取得
全て上手くいけば、事前準備で作成されたABWのアプリケーションAPIのユーザーに上記で作成したアプリケーションが追加されているはず。
アプリケーションをクリックしてブラウザのURLからユーザIDを取得してメモ帳などに保存する。
ユーザーIDはこんな感じ:XXf2731e-0ecf-484b-abdf-9151e3212999
##REST API用のユーザーをABWに登録する
このセクションは少しトリッキーであるため、
まず、Microsoft公式ドキュメント:
1.ブロックチェーンアプリを使用する
2.Workbench ユーザを管理する
3.Workbench APIを使用する
を一読する。
さて、APIユーザーを作りましょう。
1.postmanコレクションをダウンロードしてpostmanにインポートする。
2.設定を変更する。
変更必要な箇所は:
・Pre-request Scripts
・Variables
まずはPre-request Scriptsの
①Azure ADのテナント
②上記事前準備で作成されたアプリケーションID
③上記で作成したREST API用アプリケーションID(メモ帳に保存しているはず)
④上記で作成したREST APIキー(メモ帳に保存しているはず)
const echoPostRequest = {
method: 'POST',
url: 'https://login.microsoftonline.com/①.onmicrosoft.com/oauth2/token',
headers:
{
'cache-control': 'no-cache',
'Content-Type': 'application/x-www-form-urlencoded'
},
body:
{
mode: 'urlencoded',
urlencoded:
[
{key: "resource", value: "②", disabled: false},
{key: "client_id", value: "③", disabled: false},
{key: "client_secret", value: "④", disabled :false},
{key: "grant_type", value: "client_credentials", disabled: false}
]
}
};
pm.sendRequest(echoPostRequest, function (err, res) {
console.log(err ? err : res.json());
if (err === null) {
console.log('Saving the token and expiry date')
var responseJson = res.json();
pm.environment.set('currentAccessToken', responseJson.access_token)
}
});
次にゴローバル変数を定義する。
baseURLは基本URLに-apiがついているものとなる。
URLの取得は上記の「3.Workbench APIを使用する」を参照。
Updateしてダイアログを閉じる。
3.ユーザ作成APIを呼び出す。
まず、設定を確認する。
次にパラメータを設定する。
externalIDに上記で取得したユーザIDを設定する。
あとは任意の値を入力する。
Sendボタンを押してユーザを作成する。
上手くいけば結果が200で、作成したユーザーのID(一桁の数値)が返ってくる。
このユーザIDを覚えておく必要がある。
4.ここがトリッキーな部分
ABWのユーザーはAzure ADで管理されているので、上記で作成したユーザはAzure ADに存在しないため、
アプリケーションのメンバーとして追加することができない。
右上のmemberをクリックすれば確認できる。
Azureポータル→ABWのリソースグループ→ABWのデータベース(アイコンい歯車がない方)→サーバファイアウォール設定でクライアントIPを追加して、SSMSからアクセスできるようにする。
SSMSを立ち上げて、下記の通り1レコードを追加する。
RoleAssignmentテーブルを編集モードで開いて、
上記で追加したAPI用ユーザIDとApplicationRoleIdを入力する。
ApplicationRoleIdの値はすでにあるレコードと同じ値を入力する。
最後にアプリケーションのメンバーシップを確認する。
##Azure Functionsを使ってアセットを登録しましょう
ソースコードをgithubからダウンロードして、Visual Studio 2019で開いて、認証情報を設定する。
設定する内容は上記postmanの設定と同様である。
// 上記事前準備で作成されたアプリケーションID
static string APPLICATION_ID = "";
// APIのURL
static string API_URL = "https://xxxxxxx-api.azurewebsites.net";
// Azure ADのテナント
var AUTHORITY = "xxxxxx.onmicrosoft.com";
// 上記で作成したREST API用アプリケーションID(メモ帳に保存しているはず)
var CLIENT_ID = "";
// 上記で作成したREST APIキー(メモ帳に保存しているはず)
var CLIENT_SECRET = "";
1回目実行すると新規のユーザー(現在のユーザー)が作成される
// 96行目の結果は1回目はfalseで、2回目以降はtrueになる
var canUserAccessWorkbench = await GatewayApi.Instance.CanCurrentUserCreateContractsForWorkflow(WORKFLOW_ID);
// 130行目にアセット情報を設定する。
workflowAction.WorkflowActionParameters.Add(new WorkflowActionParameter() { Name = "description", Value = "Computer" });
workflowAction.WorkflowActionParameters.Add(new WorkflowActionParameter() { Name = "price", Value = "999" });
F5を押してプロジェクトを実行する。
アウトプットウインドからURLを取得してブラウザでURLを開く。
すべて上手くいくと下記のようにアセットが登録される。
Happy chaining