こんにちは。 SCSKの樋口です。
2022年に入ってから、「Web3」という言葉をよく聞くようになりました。
「Web3」とは、ブロックチェーン技術を活用した分散型インターネットの概念であり、Google トレンドを見ても、2021年末頃から急速に検索されています。
流行りがあると乗りたくなるのが人の性ということで、ブロックチェーンの環境構築や運用を AWSに任せることができるサービス「Amazon Managed Blockchain」を触ってみましたので記事にまとめます。
本記事の内容
この記事は、AWSが公開している以下のハンズオン資料を補足(解説)したものとなります。
英語版しかないこともあり、「やってみた」系の日本語記事は、インターネットでは見つかりませんでした。
ハンズオンの資料自体は、すごく丁寧に記載されているのですが、
- 最終的に何ができあがるのか分かりにくい
- 作業指示が分かりにくい箇所がある
- ソースコードやコマンドの修正が必要なところがある
- ハンズオン後のお片付けについて言及されていない
等の問題を感じたため、このあたりの補足や解説をしながら、記事にまとめていきたいと思います。
ハンズオンを通してできあがるアプリについて
利用者視点でのアプリ解説
最初にハンズオンのゴールを理解しておくと、これから行う各作業の目的が分かりやすくなります。
まずは、どのようなアプリができあがるのか、利用者視点で解説をします。
ハンズオンでは、Amazon Managed Blockchain を用いて、物流のサプライチェーンを管理する分散型アプリケーション(Dapp)を開発します。
ハンズオンでは、2つの会社に、計4つの役割をもつ従業員がいる設定です。
この2社4名が、役割分担をしながら製品の製造から販売までを行います。
製品(商品)は、製造 → 検査 → 発送 → 受取 → ラベル貼り → 販売 のフローをたどっていきます。
この商品の流れを、SCM(Supply Chain Management : サプライチェーンを管理するアプリ)で管理していくのですが、権限が適切に分かれた設定になっています。
例えば「検査」の工程は、supplier の inspector にしかできない権限設定になっているため、inspector 以外の人(supplier の worker や、 retailer の worker, seller)の権限では、このアプリで「検査完了」の内容を登録することはできません。
なお、Dapp であるため、ブロックチェーン台帳は、供給業者と小売業者の2か所(2組織)にあります。
中央のサーバーで保存しているわけではないことがポイントです。
できあがったSCMアプリの動作を解説したスライドショーを作成しましたので、こちらもぜひご覧ください。
(テンポよく「Next Page」ボタンを押していくことで、パラパラ漫画のように動きを理解できると思います。)
構成の観点からのアプリ解説
利用者視点で、どのようなアプリができあがるのかは、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サービスの設定であるため、理解せずに進めても問題ないかと思います。
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. のコマンド 修正前:aws s3api create-bucket –bucket $BUCKET_NAME –region $AWS_DEFAULT_REGION もし、修正してもエラーが出る場合は、以下でもOK |
第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エンドポイントを削除
※ 以下のようなサービス名である |
6 | ○ | ○ | Cloud9 のターミナルを開き、以下のコマンドを実行し、作成したSecretManagerのリソース6つを削除
|
7 | ○ (実施する) |
× (実施しない) |
<Retailer 側のアカウントでのみ実施> Cloud9 のターミナルから、以下のコマンドを実行し、S3バケットを空にしてから削除
|
8 | ○ | ○ | セキュリティグループ「HFClientAndEndpoint」を削除 ※ 具体的には以下の手順で削除する
|
9 | × (実施しない) |
○ (実施する) |
<Supplier 側のアカウントでのみ実施> Supplier 側のAmazon Managed Blockchain のリソースを削除 具体的には、CloudFormation の画面に行き、「amb-supplier」のスタックを削除 |
10 | ○ (実施する) |
× (実施しない) |
<Retailer 側のアカウントでのみ実施> Retailer 側のAmazon Managed Blockchain のリソースを削除 具体的には、Amazon Managed Blockchain の画面に行き、ネットワーク「SupplyChain」を選択。 |
11 | ○ | ○ | IAMの画面から、ロール「ServiceLinkedRoleForAmazonManagedBlockchain」を削除 |
12 | ○ | ○ | 同じく IAMの画面から、ポリシー「AmazonManagedBlockchainControl」を削除 |
はい、お片付けは以上です。
ハンズオン、お疲れ様でした!