Amazon Web Services ブログ

Amazon Managed BlockchainでEthereumノードをデプロイしてみよう

このブログは、Carl Youngblood によって書かれたDeploy an Ethereum node on Amazon Managed Blockchainを翻訳したものです。

Amazon Managed Blockchain のEthereumノードのサポートにより、ブロックチェーン取引の中継やブロックチェーンデータの状態問い合わせのための独自の分散型アプリケーション(dapps)をEthereumノードのメンテナンスを気にすることなく構築可能になります。

Ethereumネットワークの分散型アーキテクチャは、Ethereumウォレットを持つすべてのユーザーがパーミッションなしでアクセスできる、止められないアプリケーションを作成することを可能にします。ゲートキーパーや仲介者を介さずに分散型で商品やサービスを提供する革新的なDappsが増え続けています。なかでも分散型金融サービス(DeFi)は急速なイノベーションが起きている分野です。
この記事ではManaged Blockchainを使用してEthereumノードをセットアップし、接続する方法を説明します。

Ethereumノードのセットアップ

独自のマネージドEthereumノードをセットアップするには、以下の手順を実行します。

  1. Managed Blockchainのコンソールで、Join public networkを選択します。

2. Blockchain networkはEthereumメインネット、RopstenおよびRinkebyテストネットにEthereumノードを展開することができます。(訳注: 2022年時点でGoerliも追加されています)

3. Blockchain instance typeについては、dappが読み取り要求で経験すると予想される負荷のレベルに応じて、適切なインスタンスタイプを選択します。書き込み要求に関しては、Ethereumのトランザクションレートに関する現在のグローバルな制約を考えると、ユーザーがネットワークに送信できる修正トランザクションの数を維持するには、通常、1つのノードで十分です。

4. Ethereum node typeは、Full nodeを選択します。

5. Availability Zone(AZ)を選択します。

高可用性、ロードバランシング、フェイルオーバーのために、異なるAvailability Zoneに複数のEthereumノードをデプロイすることができます。

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

Ethereumノードの接続

Managed BlockchainコンソールでEthereumノードが利用可能になると、HTTPSおよびWebSocket接続のエンドポイントが表示されます。

Ethereumノードに接続するにはAWS Signature Version 4 signing processを使ってノードと認証する必要があります(訳注: 2022年時点ではToken Based AccessのリリースによりSigV4以外の方法も追加されています)。これは HTTPSWebSockets のための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

これはdappがノードに接続できるようにするために必要ないくつかの依存関係をインストールします。

2. 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);

プログラムアクセス権を持つAWS Identity and Access Management (IAM) ユーザーを作成し、 AmazonManagedBlockchainFullAccess ポリシーをアタッチする必要があります。

3. IAMコンソールで、ナビゲーションペインから「User groups」を選択します。

4. 「Create group」を選択します。

5. グループ名に名前を入力します(この記事の場合はAMBUsers)。

6. 検索フィルターにblockchainと入力し、フィルタされたリストから AmazonManagedBlockchainFullAccess ポリシーをグループにアタッチします。

7. 「Create group」を選択します。

8. amb-userというユーザーを追加します。

9. Access typeProgrammatic accessを選択

10.「Next」を選択します。

11. 先ほど作成したグループにユーザーを追加します。

12. レビューのページが表示されるまで「Next」を選択し、ユーザーを作成します。

13. AWSアクセスキーIDとシークレットアクセスキーの認証情報は、後で使用するために保存してください。

14. ユーザーを作成したら、そのユーザーの認証情報を環境にエクスポートします。

export AWS_ACCESS_KEY_ID=AFAKEID...
export AWS_SECRET_ACCESS_KEY=AFakeKey...

これはユーザーがアクセスできる環境では読み込まれない、信頼できるコンテキストでのみ行う必要があります。

15. EthereumノードのエンドポイントURLをエクスポートします。

export AMB_HTTP_ENDPOINT=https://nd-<node_id>.ethereum.managedblockchain.us-east-1.amazonaws.com

index.jsスクリプトを実行して、Ethereumノードに接続します。

node index.js
Geth/v1.9.24-stable-cc05b050/linux-amd64/go1.15.5

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

まとめ

おめでとうございます。マネージドEthereumノードへの接続に成功しました。後続のブログ記事では、複数のマネージドEthereumノードにまたがるdappリクエストのバランスをとり、Metamask のような人気のあるブラウザウォレット拡張機能を通じてEthereum APIをユーザーに提供する、より高度なアーキテクチャパターンを紹介します。

このブログは、パートナーソリューションアーキテクトの毛利元三が翻訳しました。原文はこちらです。