Ethereum 用の AWS Blockchain Template の使用 - AWS Blockchain Templates

AWS Blockchain Templates は 2019 年 4 月 30 日に廃止されました。このサービスやサポートドキュメントは今後更新されません。AWS で最適なマネージドブロックチェーンエクスペリエンスを実現するには、Amazon Managed Blockchain (AMB) の使用をお勧めします。Amazon Managed Blockchain の開始方法の詳細については、Hyperledger Fabric に関するワークショップ、またはイーサリアムノードのデプロイに関するブログをご覧ください。AMB について質問がある場合や、さらにサポートが必要な場合は、AWS Support または担当の AWS アカウントチームまでお問い合わせください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Ethereum 用の AWS Blockchain Template の使用

Ethereum は、Ethereum 固有の言語である Solidity を使用してスマートコントラクトを実行するブロックチェーンフレームワークです。Homestead は Ethereum の最新のリリースです。詳細については、Ethereum Homestead のドキュメントSolidity のドキュメントを参照してください。

起動へのリンク

Ethereum のテンプレートを使用して特定のリージョンで AWS CloudFormation を起動するためのリンクについては、AWS Blockchain Templates の開始方法を参照してください。

Ethereum のオプション

テンプレートを使用して Ethereum ネットワークを設定する場合は、後続の要件を決定する選択を行います。

コンテナプラットフォームの選択

AWS Blockchain Templates は、Amazon ECR に保存されている Docker コンテナを使用してブロックチェーンソフトウェアをデプロイします。Ethereum 用の AWS Blockchain Template には、[Container Platform] (コンテナプラットフォーム) について 2 つの選択肢が用意されています。

  • ecs — Ethereum が Amazon EC2 インスタンスの Amazon ECS クラスターで実行されるように指定します。

  • docker-local — Ethereum が単一の EC2 インスタンスで実行されるように指定します。

Amazon ECS コンテナプラットフォームの使用

Amazon ECS で Application Load Balancer および関連リソースを使用し、複数の EC2 インスタンスで構成された ECS クラスターで Ethereum ネットワークを作成します。Amazon ECS 設定の使用の詳細については、AWS Blockchain Templates の開始方法チュートリアルを参照してください。

次の図は、テンプレートで ECS コンテナプラットフォームオプションを使用して作成した Ethereum ネットワークを示しています。

Docker-Local プラットフォームの使用

または、単一の Amazon EC2 インスタンス内で Ethereum コンテナを起動することができます。すべてのコンテナが単一の EC2 インスタンスで実行されます。これは簡略化されたセットアップです。

次の図は、テンプレートで docker-local コンテナプラットフォームオプションを使用して作成した Ethereum ネットワークを示しています。

プライベートまたはパブリック Ethereum ネットワークの選択

1 ~ 4 以外の [Ethereum Network ID (Ethereum ネットワーク ID)] 値を選択すると、指定したプライベートネットワークパラメーターを使用して、定義したネットワーク内で実行されるプライベート Ethereum ノードが作成されます。

[Ethereum Network ID] (Ethereum ネットワーク ID) 1 ~ 4 を選択すると、作成した Ethereum ノードは、公開されている Ethereum ネットワークに結合されます。プライベートネットワーク設定とそのデフォルト値は無視できます。Ethereum ノードをパブリック Ethereum ネットワークに参加させる場合は、ネットワーク内の適切なサービスがインターネットにアクセス可能であることを確認してください。

デフォルトのアカウントおよびニーモニックフレーズの変更

ニーモニックフレーズは、任意のネットワークにおいて、関連付けられたアカウントの Ethereum ウォレット (プライベート/パブリックキーペア) を生成するために使用できる一連のランダムな単語です。ニーモニックフレーズは、関連付けられたアカウントの Ether にアクセスするために使用できます。デフォルトのアカウントに関連付けられたデフォルトのニーモニックが Ethereum テンプレート用に作成済みです。

警告

デフォルトのアカウントおよび関連するニーモニックフレーズは、テスト目的でのみ使用します。ニーモニックフレーズにアクセスできるすべてのユーザーはアカウントから Ether にアクセスしたり、Ether を盗んだりできるため、デフォルトの一連のアカウントを使用して実際の Ether を送信しないでください。代わりに、本稼働用のカスタムアカウントを指定します。デフォルトのアカウントに関連付けられているニーモニックフレーズは outdoor father modify clever trophy abandon vital feel portion grit evolve twist です。

前提条件

Ethereum 用の AWS Blockchain Template を使用して Ethereum ネットワークを設定する場合は、次に示す最小要件を満たす必要があります。テンプレートは、次のカテゴリごとに、リストされている AWS コンポーネントを必要とします。

Ethereum リソースにアクセスするための前提条件

前提条件 ECS プラットフォームの場合 Docker-Local の場合

EC2 インスタンスへのアクセスに使用できる Amazon EC2 キーペア。このキーは、ECS クラスターおよび他のリソースと同じリージョンに存在する必要があります。

要塞ホストやインターネット接続ロードバランサーなど、Application Load Balancer へのトラフィックが許可された内部アドレスを持つインターネット接続コンポーネント。テンプレートはセキュリティ上の理由から内部ロードバランサーを作成するため、これは ECS プラットフォームに必須です。EC2 インスタンスがプライベートサブネットにある場合、これは docker-local プラットフォームに必須です (推奨)。要塞ホストの設定については、「要塞ホストの作成」を参照してください。

✔ (プライベートサブネットを使用)

IAM の前提条件

前提条件 ECS プラットフォームの場合 Docker-Local の場合

関連するすべてのサービスを処理するアクセス許可を持つ IAM の原則 (ユーザーまたはグループ)。

EC2 インスタンスが他のサービスとやりとりするための適切なアクセス許可を持つ Amazon EC2 インスタンスプロファイル。詳細については、「To create an EC2 instance profile」を参照してください。

Amazon ECS が他のサービスとやりとりするアクセス許可を持つ IAM ロール。詳細については、「ECS ロールとアクセス許可の作成」を参照してください。

セキュリティグループの前提条件

前提条件 ECS プラットフォームの場合 Docker-Local の場合

EC2 インスタンスのセキュリティグループと、次の要件:

  • 0.0.0.0/0 (デフォルト) へのトラフィックを許可するアウトバウンドルール。

  • インバウンドルール自体からのすべてのトラフィックを許可するインバウンドルール (同じセキュリティグループ)。

  • Application Load Balancer のセキュリティグループからのすべてのトラフィックを許可するインバウンドルール。

  • クライアントコンピュータの IP CIDR などの信頼できる外部ソースからの HTTP (ポート 80) EthStats 、 (ポート 8080)、HTTP 経由 JSON RPC (ポート 8545)、および SSH (ポート 22) を許可するインバウンドルール。

Application Load Balancer のセキュリティグループと、以下の要件:

  • インバウンドルール自体からのすべてのトラフィックを許可するインバウンドルール (同じセキュリティグループ)。

  • EC2 インスタンスの同じセキュリティグループからのすべてのトラフィックを許可するインバウンドルール。

  • EC2 インスタンスのセキュリティグループへのすべてのトラフィックを許可するアウトバウンドルール。詳細については、「セキュリティグループを作成する」を参照してください。

  • この同じセキュリティグループを要塞ホストに関連付ける場合は、信頼されたソースからの SSH (ポート 22) トラフィックを許可するインバウンドルール。

  • 要塞ホストや他のインターネット接続コンポーネントが別のセキュリティグループにある場合は、そのコンポーネントからのトラフィックを許可するインバウンドルール。

VPC 前提条件

前提条件 ECS プラットフォームの場合 Docker-Local の場合

Elastic IP アドレス。Ethereum サービスへのアクセスに使用されます。

EC2 インスタンスを実行するサブネット。プライベートサブネットを強くお勧めします。

パブリックにアクセス可能な 2 つのサブネット。各サブネットは、別個のアベイラビリティーゾーンに配置し、それは EC2 インスタンスのサブネットと同じアベイラビリティーゾーンであることが必要です。

EC2 インスタンスプロファイルと ECS ロールの IAM アクセス許可の例

テンプレートを使用するときは、EC2 インスタンスプロファイル ARN をパラメータの 1 つとして指定します。ECS コンテナプラットフォームを使用する場合は、ECS ロールの ARN も指定します。これらのロールにアタッチされたアクセス権限ポリシーにより、クラスターの AWS リソースとインスタンスは、他の AWS リソースとやり取りすることができます。詳細については、IAM ユーザーガイドIAM ロールを参照してください。アクセス許可を作成するための出発点として、以下のポリシーステートメントと手順を使用してください。

EC2 インスタンスプロファイルのアクセス許可ポリシーの例

次のアクセス許可ポリシーは、ECS コンテナプラットフォームを選択したときに、EC2 インスタンスプロファイルに対して許可されるアクションを示しています。同じポリシーステートメントは、ドッカーローカルコンテナプラットフォームで使用可能で、アクセスを制限するために ecs コンテキストキーが削除されています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:CreateCluster", "ecs:DeregisterContainerInstance", "ecs:DiscoverPollEndpoint", "ecs:Poll", "ecs:RegisterContainerInstance", "ecs:StartTelemetrySession", "ecs:Submit*", "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "logs:CreateLogStream", "logs:PutLogEvents", "dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:PutItem", "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:UpdateItem" ], "Resource": "*" } ] }

ECS ロールとアクセス許可の作成

ECS ロールにアタッチされたアクセス許可については、AmazonEC2ContainerServiceRole アクセス許可ポリシーから始めることをお勧めします。ロールを作成し、このアクセス許可ポリシーをアタッチするには、次の手順を実行します。IAM コンソールを使用して、このポリシーのほとんどの up-to-date アクセス許可を表示します。

Amazon ECS の IAM ロールを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [Roles (ロール)]、[Create Role (ロールの作成)] の順に選択します。

  3. [信頼されたエンティティの種類を選択] で、[AWS のサービス] を選択します。

  4. [Choose the service that will use this role] (このロールを使用するサービスを選択) で、[Elastic Container Service] (伸縮自在コンテナサービス) を選択します。

  5. [ユースケースの選択] で [Elastic Container Service] を選択し、[Next: Permissions (次の手順: アクセス許可)] を選択します。

  6. アクセス許可ポリシー では、デフォルトポリシー (AmazonEC2ContainerServiceRole) を選択したまま、次へ: レビュー を選択します。

  7. ロール名 には、ECS RoleForEthereumなどのロールを識別するのに役立つ値を入力します。[ロールの説明] に、簡単な要約を入力します。後で使用するため、ロール名を書き留めておきます。

  8. [ロールの作成] を選択します。

  9. リストから、作成したロールを選択します。アカウントに多数のロールがある場合は、ロール名で検索できます。

  10. [ロールの ARN] の値をコピーし、再度コピーできるように保存します。Ethereum ネットワークを作成するときに、この ARN が必要です。

Ethereum リソースへの接続

テンプレートで作成したルートスタックのステータスが [CREATE_COMPLETE] になったら、AWS CloudFormation コンソールを使用して Ethereum リソースに接続できます。接続する方法は、選択した ECS または docker-local のコンテナプラットフォームによって異なります。

  • ECS — ルートスタックの [Output] (出力) タブは、Application Load Balancer で実行されているサービスへのリンクを提供します。セキュリティ上の理由から、これらの URL に直接アクセスすることはできません。接続するには、要塞ホストを設定し、このホストを使用してプロキシ接続を行います。詳細については、以下の 踏み台ホストを使用したプロキシ接続 を参照してください。

  • docker-local — 以下に示す Ethereum サービスをホストする EC2 インスタンスの IP アドレスを使用して接続します。テンプレートで作成したインスタンスの ec2-IP-address を見つけるには、EC2 コンソールを使用します。

    • EthStats— http://ec2-IP-address を使用する

    • EthExplorer— http://ec2-IP-address :8080 を使用します。

    • EthJsonRpc— http://ec2-IP-address :8545 を使用します。

    [Ethereum Network Subnet ID] (テンプレート内で使用する VPC サブネットのリスト) でパブリックサブネットを指定した場合は、直接接続できます。クライアントは、SSH (ポート 22) のインバウンドトラフィックの信頼できる送信元である必要があります。これは Ethereum 用の AWS Blockchain Template で指定した [EC2 Security Group] (EC2 セキュリティグループ) によって決まります。

    プライベートサブネットを指定した場合は、要塞ホストを設定し、このホストを通じてこれらのアドレスへのプロキシ接続を行うことができます。詳細については、以下の 踏み台ホストを使用したプロキシ接続 を参照してください。

踏み台ホストを使用したプロキシ接続

一部の構成では、Ethereum サービスが一般公開されない場合があります。このような場合は、踏み台ホストを介して Ethereum リソースに接続できます。踏み台ホストの詳細については、Linux 踏み台ホストクイックスタートガイドLinux 踏み台ホストアーキテクチャを参照してください。

踏み台ホストは EC2 インスタンスです。以下の要件が満たされていることを確認してください。

  • 踏み台ホストの EC2 インスタンスが、[Auto-assign Public IP] (自動割り当てパブリック IP) が有効な状態でインターネットゲートウェイを持つパブリックサブネット内にある。

  • 踏み台ホストに、ssh 接続を許可するキーペアがある。

  • 接続するクライアントからのインバウンド SSH トラフィックを許可するセキュリティグループに踏み台ホストが関連付けられている。

  • Ethereum ホストに割り当てられたセキュリティグループ (例えば、ECS がコンテナプラットフォームの場合は Application Load Balancer、docker-local がコンテナプラットフォームの場合はホスト EC2 インスタンス) は、VPC 内のソースからのすべてのポートでのインバウンドトラフィックを許可します。

踏み台ホストを設定したら、接続するクライアントが踏み台ホストをプロキシとして使用していることを確認します。次の例では、Mac OS を使用してプロキシ接続を設定しています。BastionIP を踏み台ホスト EC2 インスタンスの IP アドレスに置き換え、MySshKey.pem を踏み台ホストにコピーしたキーペアファイルに置き換えます。

コマンドラインで、以下のように入力します。

ssh -i mySshKey.pem ec2-user@BastionIP -D 9001

これにより、ローカルマシン上のポート 9001 の踏み台ホストへのポート転送が設定されます。

次に、localhost:9001 の SOCKS プロキシを使用するようにブラウザまたはシステムを設定します。たとえば、Mac OS を使用して、[システム環境設定]、[ネットワーク]、[詳細]、[SOCKS プロキシ] の順に選択し、「localhost:9001」と入力します。

Chrome で FoxyProxy 標準 を使用する場合は、その他のツール、拡張機能 を選択します。FoxyProxy 標準 で、詳細 拡張オプション 新しいプロキシの追加 を選択します。[手動プロキシ設定] を選択します。[ホストまたは IP アドレス] に「localhost」と入力し、[ポート] に「9001」と入力します。[SOCKS Proxy?]、[保存] を選択します。

これで、テンプレート出力で示した Ethereum ホストアドレスに接続できるようになります。