AWS Managed Blockchain のハンズオンを解説(補足)する

こんにちは。 SCSKの樋口です。

2022年に入ってから、「Web3」という言葉をよく聞くようになりました。
「Web3」とは、ブロックチェーン技術を活用した分散側インターネットの概念であり、Google トレンドを見ても、2021年末頃から急速に検索されています。

流行りがあると乗りたくなるのが人の性ということで、ブロックチェーンの環境構築や運用を AWSに任せることができるサービス「Amazon Managed Blockchain」を触ってみましたので記事にまとめます。

本記事の内容

この記事は、AWSが公開している以下のハンズオン資料を補足(解説)したものとなります。

英語版しかないこともあり、「やってみた」系の日本語記事は、インターネットでは見つかりませんでした。
ハンズオンの資料自体は、すごく丁寧に記載されているのですが、

  • 最終的に何ができあがるのか分かりにくい
  • 作業指示が分かりにくい箇所がある
  • ソースコードやコマンドの修正が必要なところがある
  • ハンズオン後のお片付けについて言及されていない

等の問題を感じたため、このあたりの補足や解説をしながら、記事にまとめていきたいと思います。

このハンズオンの実施には、AWSアカウントが2つ必要となります。
また無料枠の範囲ではないため、リソースを削除しない場合、2週間で1万円程度のAWS利用料が発生します。

ハンズオンを通してできあがるアプリについて

利用者視点でのアプリ解説

最初にハンズオンのゴールを理解しておくと、これから行う各作業の目的が分かりやすくなります。
まずは、どのようなアプリができあがるのか、利用者視点で解説をします。

ハンズオンでは、Amazon Managed Blockchain を用いて、物流のサプライチェーンを管理する分散型アプリケーション(Dapp)を開発します。

Dapp(Decentralized Application : 分散型アプリケーション)
Dapp とは、ブロックチェーン技術を用いて、複数のノードに取引データが保存されるアプリであり、以下の特徴があります。

  • 大手企業が提供する従来型のアプリのように、データが中央に保存されない。
  • ブロックチェーン技術を用いており、データの改ざんに強い。

ハンズオンでは、2つの会社に、計4つの役割をもつ従業員がいる設定です。

この2社4名が、役割分担をしながら製品の製造から販売までを行います。
製品(商品)は、製造 → 検査 → 発送 → 受取 → ラベル貼り → 販売 のフローをたどっていきます。

この商品の流れを、SCM(Supply Chain Management : サプライチェーンを管理するアプリ)で管理していくのですが、権限が適切に分かれた設定になっています。

例えば「検査」の工程は、supplier の inspector にしかできない権限設定になっているため、inspector 以外の人(supplier の worker や、 retailer の worker, seller)の権限では、このアプリで「検査完了」の内容を登録することはできません。

なお、Dapp であるため、ブロックチェーン台帳は、供給業者と小売業者の2か所(2組織)にあります。
中央のサーバーで保存しているわけではないことがポイントです。

できあがったSCMアプリの動作を解説したスライドショーを作成しましたので、こちらもぜひご覧ください。
(テンポよく「Next Page」ボタンを押していくことで、パラパラ漫画のように動きを理解できると思います。)

AWS_Blockchain_動作説明

構成の観点からのアプリ解説

利用者視点で、どのようなアプリができあがるのかは、1つ前のセクションで説明をしました。
ここからは、アプリがどのような構造になっているのかを説明していきます。

Hyperledger Fabric について

今回のハンズオンでは、Hyperledger Fabric というブロックチェーン・フレームワークを用いてブロックチェーン環境を作っていきます。

Hyperledger Fabric は、参加者を認証することができる許可制ネットワーク(=プライベートチェーン)であることが特徴で、機密性の高い取引を行う企業ユースに適しています。
また、契約を自動で実行する「スマートコントラクト」にも対応しています。(Hyperledger Fabric では、chaincode と言います。)

詳細な仕様や仕組みは、Hyperledger Fabric を解説している各種ブログや公式ドキュメントを参照ください。

今回はプライベートチェーンを用いるため、トランザクションデータが全世界に公開されることはありません。
安心してハンズオンを実行することができます。

作るアプリの構造について

ハンズオンでは、段階を踏んでSCMアプリを作っていきます。
章立てが分かれているものの、「この章は何をしているのか」というのが分かりにくい点もありましたので、簡単に解説をします。

▼ ハンズオンの章立てをキャプチャしたもの

4章:Write and deploy chaincode の章が終わる段階で…

まず、4章:Write and deploy chaincode の章が終わる段階で、以下のような構成ができあがります。

ここまでの段階で、最低限のブロックチェーン環境はできあがります。
実際、コマンドライン上で、製品のステータス情報をブロックチェーンに書き込むことができる状態になっています。

5章:Invoking chaincode via API の章が終わる段階で…

5章:Invoking chaincode via API の章を終える時点で、スマートコントラクト(chaincode)を実行できる API のエンドポイントが作られます。
これは、SCMアプリのWEB画面から、スマートコントラクトを実行できるようにするための API エンドポイント として使われます。

具体的には以下のAWSリソースを第5章で実装します。

  • chaincode を実行する Lambda
  • GraphQL API のエンドポイントである AppSync
  • ユーザー認証用の Cognito userpool

第5章の内容は、ブロックチェーン技術というよりも各種AWSサービスの設定であるため、理解せずに進めても問題ないかと思います。

KeyWord : GraphQL API

API の規格の一つです。
本ハンズオンを実施する上では、広く普及している REST API の仲間だという認識で問題ありません。
(※ REST API との互換性はありません)

6章:Building a frontend の章が終わる段階で…

6章:Building a frontend の章を終えることで、SCM アプリの完成です。
この章では、WEB アプリのフレームワーク React を用いて SCMアプリを構築・実行します。(アプリは Cloud9上でローカルアプリとして実行)

正直なところ、6章はブロックチェーンというよりも React についての話ですので、理解せずに進めても問題ないかと思います。

 

作業指示の補足情報

ハンズオンを始めるにあたって

再掲になりますが、実施するハンズオンはこちらの内容です。
Hyperledger Fabric 1.4: Track-and-Trace Blockchain Workshop

このハンズオンの実施には、AWS アカウントを2つ利用しますのでご注意ください。
(Retailer 側のアカウントと、Supplier 側のアカウント)

AWS無料枠の範囲ではないため、2週間運用した場合、1万円程度の費用がかかることもご承知おきください。

また、ハンズオンは全編英語で記載されています。
難しい部分は翻訳ツールを併用するなどして進めていきましょう。

とてもボリューミーなハンズオンなので、初めて実施する際は1日程度かかると思ってください。

作業指示が分かりにくいところ

ハンズオン実施にあたって、記載されている作業をどちらの AWS アカウントで実施すればよいかわかりにくい部分がありますので、以下に記載します。

ほとんどのページには、どちらのアカウントで実施する作業なのか注釈があります。

▼ 例:これは両方のアカウントで実施せよと書いてある

▼ 例:これは Retailer 側だけで実施せよと書いてある

しかし、前半部分(特に「Create a network」の章)について、どちらのアカウントで実施する作業か不明瞭でしたので、以下を参照してください。

  AWSアカウントA
(Retailer 側)
AWSアカウントB
(Supplier 側)
1章:Prerequisites    
    Create a Cloud9 environment ○(実施) ○(実施)
    IAM Configuration ○(実施) ○(実施)
    Modify Cloud9 IAM role ○(実施) ○(実施)
2章:Create a network    
    Using the AWS Management Console ○(実施) ×(実施せず)
    Using the AWS Command Line Interface (CLI) ○(実施) ×(実施せず)
    Using AWS CloudFormation ×(実施せず) ○(実施)
3章:Set up a Fabric client
以降は、指示が明確なため割愛
   

リージョンの修正が必要なところ

このハンズオンは、us-east-1(バージニア北部リージョン) で実施する前提で作られています。

他のリージョンで実施する際は、以下の箇所のコード / コマンドを、適切な値に書き換える必要がありますのでご注意ください。
(例えば、東京リージョンで実施の場合は、 ap-northeast-1 に書き換えてください)

セクション 修正箇所(太字の部分)
第5章:Invoking chaincode via API
Create VPC Endpoint
コマンド7行目
aws ec2 create-vpc-endpoint –vpc-endpoint-type Interface –vpc-id $VPCID –service-name com.amazonaws.us-east-1.secretsmanager –subnet-id $SUBNETID –security-group-ids “$GROUPID” “$DEFAULT_GROUP_ID”
第5章:Invoking chaincode via API
Create Lambda Function
Write lambda function
index.js の 14行目
const client = new AWS.SecretsManager({region: ‘us-east-1‘});

コマンド / ソースコード等の修正が必要なところ

ハンズオン制作時のミスかと思われますが、以下の箇所も修正が必要です。

セクション 修正箇所(太字の部分)
第4章:Write and deploy chaincode
Create sharing policy

一番最初の、Then let’s create the bucket. のコマンド
(us-east-1 で実施の場合は修正不要。他のリージョンで実施の場合は以下のように修正 参考サイト

修正前:aws s3api create-bucket –bucket $BUCKET_NAME –region $AWS_DEFAULT_REGION
修正後:aws s3api create-bucket –bucket $BUCKET_NAME –create-bucket-configuration LocationConstraint=$AWS_DEFAULT_REGION

もし、修正してもエラーが出る場合は、以下でもOK
代替コマンド:aws s3 mb s3://$BUCKET_NAME –region $AWS_DEFAULT_REGION

第6章:Building a frontend
Write React components
App.js の 53, 54行目(2箇所)
修正前:worker[‘worker1Password’]
修正後:workerNames[‘worker1Password’]

 

ハンズオンを実施しての感想・所感

はい、非常にボリュームのあるハンズオンでした。。。
(私は調べながら進めたので2日近くの時間がかかりました)

ブロックチェーン(及び Hyperledger fabric)について、技術的な部分についても理解をしていないと、単なる作業になってしまう内容だったと思います。(私も、難しいなと思いながら進めていました。。)

とは言え、そんな複雑なブロックチェーン環境を、これだけの操作で環境構築 & 運用できるようにしているサービスというのは、やはり便利なものだと言えます。
引き続き学習をして、必要な時に適切に活用できるよう、理解を深めていきたいです。

弊社において、ブロックチェーン関連の案件は、まだ多いとは言えません。
しかし海外にも目を向けると、産業界での事例は着実に増えつつあります。
仮想通貨での利用はもちろん、今回のようなサプライチェーンの可視化や文章の管理、証明書発行などの事例は多く耳にするところです。
また、NFT の革新性には目を見張るものもあります。

こういった案件に対応できるよう、これからも事例の調査やサービスの理解に努めて参ります。

 

ハンズオンの後片付け

こちらのハンズオン、なんとリソースの片付け方法が記載されておりません!

基本的には、構築時の逆順に削除をして行けばいいのですが、資料もボリュームが多いため、以下に消すべきリソースとその順序をまとめておきました。参考にしてください。
(CLIで作成したリソースも、一部はマネジメントコンソールで削除しています。)

順番 AWSアカウントA
(Retailer 側)
AWSアカウントB
(Supplier 側)
削除対象リソースとその手順
1
(実施)

(実施)
マネジメントコンソールを開き、
AppSync の画面から、「SupplyChain API」を削除
2 Cognito の画面から、ユーザープール「ambSupplyChainUsers」を削除
3 Lambda の画面から、関数「ambSupplyChainConnector」を削除
4 同じく Lambda の画面から、レイヤー「fabric-client-layer」を削除
5 VPC の画面に行き、左ペインの「エンドポイント」から、今回作成された2つのVPCエンドポイントを削除

※ 以下のようなサービス名である
com.amazonaws.ap-northeast-2.managedblockchain.x-xxxxxxxxxxxxxxxxxxxxxxxxxx
com.amazonaws.ap-northeast-2.secretsmanager

6 Cloud9 のターミナルを開き、以下のコマンドを実行し、作成したSecretManagerのリソース6つを削除

aws secretsmanager delete-secret –secret-id “amb/supplychain/$WORKER1_NAME/pk”

aws secretsmanager delete-secret –secret-id “amb/supplychain/$WORKER1_NAME/signcert”

aws secretsmanager delete-secret –secret-id “amb/supplychain/$WORKER2_NAME/pk”

aws secretsmanager delete-secret –secret-id “amb/supplychain/$WORKER2_NAME/signcert”

aws secretsmanager delete-secret –secret-id “HLF-MEMBER-PW-NETWORK-${NETWORKID}-ACCOUNT-${WORKER2_NAME}”

aws secretsmanager delete-secret –secret-id “HLF-MEMBER-PW-NETWORK-${NETWORKID}-ACCOUNT-${WORKER1_NAME}”

7
(実施する)
×
(実施しない)
<Retailer 側のアカウントでのみ実施>
Cloud9 のターミナルから、以下のコマンドを実行し、S3バケットを空にしてから削除          

aws s3 rm s3://$BUCKET_NAME/ –recursive
aws s3api delete-bucket –bucket $BUCKET_NAME

8 セキュリティグループ「HFClientAndEndpoint」を削除
※ 具体的には以下の手順で削除する          

  1. EC2の画面に行き、左ペインの「ネットワークインターフェース」から、
    セキュリティグループ「HFClientAndEndpoint」が関連付けられているインターフェースを選択し、
    [アクション] → [セキュリティグループを変更] を選択
  2. 画面切り替え後「関連付けられたセキュリティグループ」から、「HFClientAndEndpoint」の行の [削除]を選択し、
    [保存]を押下
  3. VPCの画面に行き、左ペインの「セキュリティグループ」から、
    セキュリティグループ名「HFClientAndEndpoint」のものを選択し、
    [アクション] → [セキュリティグループを削除] を選択
9 ×
(実施しない)

(実施する)
<Supplier 側のアカウントでのみ実施>
Supplier 側のAmazon Managed Blockchain のリソースを削除           具体的には、CloudFormation の画面に行き、「amb-supplier」のスタックを削除
10
(実施する)
×
(実施しない)
<Retailer 側のアカウントでのみ実施>
Retailer 側のAmazon Managed Blockchain のリソースを削除          

具体的には、Amazon Managed Blockchain の画面に行き、ネットワーク「SupplyChain」を選択。
「メンバー」タブの「Retailer」を選択。2つあるピアノードをそれぞれ削除。(数分待つ)
その後、メンバー「Retailer」自体も削除(削除に10分程度かかる)

11 IAMの画面から、ロール「ServiceLinkedRoleForAmazonManagedBlockchain」を削除
12 同じく IAMの画面から、ポリシー「AmazonManagedBlockchainControl」を削除

はい、お片付けは以上です。

ハンズオン、お疲れ様でした!

タイトルとURLをコピーしました