AWSへEthereumノードをデプロイする方法!サーバーレスでEthereumノードを管理して分散型アプリケーション(dapps)を手早く構築しましょう🚀

AWSへEthereumノードをデプロイする方法!サーバーレスでEthereumノードを管理して分散型アプリケーション(dapps)を手早く構築しましょう🚀

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!

今回はAmazon Managed Blockchain を使った Ethereum ノードのデプロイ方法についてまとめました! Ethereum ノードを使ってdappsを構築したいという方は、ぜひ参考にしてみてください。

想定する読者

はじめに

マネージド型の Ethereum ノードを Amazon Managed Blockchain によってサポートすることで、独自の分散型アプリケーション(dapps)の構築が可能になります。この方法なら、ブロックチェーン取引の引き継ぎやブロックチェーンデータの状態確認において、 Ethereum ノードが信頼できる状態で維持されているかといった心配もいりません。

Ethereum ネットワークの分散型アーキテクチャにより、 Ethereum ウォレットを持つすべてのユーザーが許可なしでアクセスできる、外部要因によって止まることのないアプリケーションの作成が可能になります。ゲートキーパーや仲介者のいない、分散型ネットワークで商品やサービスを提供する革新的なdappsは幅広いラインナップになるでしょう。なかでも、分散型金融サービス(DeFi)は急速なイノベーションが起きている分野です。

この記事では、 Managed Blockchain を使用して Ethereum ノードをセットアップし、接続する方法を解説します。

ノードのセットアップ

独自のマネージド型 Ethereum ノードをセットアップするには、以下のステップで進めてください。

  1. Managed Blockchain コンソールで「Join public network」を選択します。
  2. ブロックチェーンネットワークでは、 Ethereum のメインネットのほか、 RopstenRinkeby のテストネットに自身のマネージドノードをデプロイできます。
  3. ブロックチェーンのインスタンスタイプについては、dapps の読み込みリクエストにおいて想定される負荷レベルに応じて、適切なタイプを選択します。書き込み要求については、 Ethereum のトランザクションレートに関する現在の制約を考えれば、ユーザーがネットワークに送信できる修正トランザクションの数に応えるにはシングルノードで十分です。
  4. Ethereum ノードタイプは、フルノードを選択します。
  5. 「Availability Zone」を選択します。

高可用性やロードバランシング、フェイルオーバーを目的として、異なる Availability Zone に複数のノードをデプロイすることが可能です。

Ethereum ノードのデプロイには約 30 ~ 60 分かかります。これは、ブロックチェーンの現在の状態を新しいボリュームにコピーし、台帳にある最新のブロックを統合するのにかかる時間です。

ノードへの接続

Managed Blockchain コンソールでノードが利用可能になると、HTTPS または WebSocket 接続のいずれかによるノードアクセスに必要なエンドポイントが表示されます。

ノードに接続するには、 AWS 署名バージョン4の署名プロセスによる認証が必要です。これは、HTTPS と WebSocketに対応する AWS プロバイダの NPM パッケージとあわせて、 web3.js ライブラリを使うことで実行できます。

まず、新しいディレクトリに NodeJS プロジェクトを生成してください。なお、この記事では Node Version Manager (NVM)がインストールされていることを前提とします。

  1. bash ターミナルに以下のコードを入力し、プロジェクトの初期化および必要な依存関係のインストールを行います。
nvm install 16
nvm use 16
mkdir my-ethereum-dapp && cd my-ethereum-dapp
cat <<EOT > package.json
{
  "name": "my-ethereum-dapp",
  "version": "1.0.0",
  "description": "Simple dapp for testing Amazon Managed Blockchain",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Alice B. Coder",
  "license": "ISC",
  "dependencies": {
    "web3": "^1.3.5",
    "@aws/web3-http-provider": "^1.0.1"
  }
}
EOT
npm install

これにより、ノードへの接続のためにdappsが必要とする依存関係をインストールします。

  1. 続いて、ノードに接続する index.js というファイルを作成します。
const Web3 = require('web3');
const AWSHttpProvider = require('@aws/web3-http-provider');
const endpoint = process.env.AMB_HTTP_ENDPOINT;
const web3 = new Web3(new AWSHttpProvider(endpoint));
web3.eth.getNodeInfo().then(console.log);

Programmatic access と AmazonManagedBlockchainFullAccess のポリシーが付いた AWS Identity and Access Management (IAM) ユーザーの作成が必要です。

  1. IAM コンソール上のナビゲーションペインから「User groups」を選択します。
  2. 「Create group」を選択します。
  3. 「User group name」に、名前を入力します。
  4. 検索フィルターにブロックチェーンを入力し、適切なポリシーを選択して AmazonManagedBlockchainFullAccess ポリシーをグループに付与します。
  5. 「Create group」を選択します。
  6. 「User name」を入力します。
  7. Access typeは「Programmatic access」を選択します。
  8. 「Next」を選択します。
  9. 作成したグループにユーザーを追加します。
  10. Review ページになるまで「Next」を選択し続け、ユーザーを作成します。
  11. AWS のアクセスキー ID とシークレットアクセスキーの認証情報を、あとで使用できるよう保存します。
  12. ユーザーの作成後、そのユーザーの認証情報を環境にエクスポートします。
export AWS_ACCESS_KEY_ID=AFAKEID...
export AWS_SECRET_ACCESS_KEY=AFakeKey...

この操作は、ユーザーがアクセス可能な環境に読み込まれないよう、信頼できるコンテキスト上でのみ行いましょう。

  1. ノードのエンドポイント URL をエクスポートします。
export AMB_HTTP_ENDPOINT=https://nd-<node_id>.ethereum.managedblockchain.us-east-1.amazonaws.com
  1. index.js スクリプトを実行して、ノードに接続します。
node index.js
Geth/v1.9.24-stable-cc05b050/linux-amd64/go1.15.5

スクリプトが正常に実行されると、ノード上で動作している geth ( Ethereum プロトコルの公式な Go言語による実装)のバージョンが出力されるはずです。

まとめ

今回は、Amazon Managed Blockchain を使った Ethereum ノードのデプロイ方法を紹介しました。

 Ethereum ノードを使うことで、ゲートキーパーなどによって管理されない分散型アプリケーションの構築が可能となります。分散型金融サービス(DeFi)を中心として、今後も大きな進展が見込める分野だといえるでしょう。

本記事を参考に、ぜひ Amazon Managed Blockchain を使って Ethereum ノードのデプロイに取り組んでみてください。

Amazon Managed Blockchain 、Web3、AWS サーバーレスに関する開発相談は、お気軽にお問い合わせください。