

AWS Blockchain Templates は 2019 年 4 月 30 日に廃止されました。このサービスやサポートドキュメントは今後更新されません。で最高の Managed Blockchain エクスペリエンスを得るには AWS、[Amazon Managed Blockchain (AMB)](https://aws.amazon.com/managed-blockchain/) を使用することをお勧めします。Amazon Managed Blockchain の開始方法の詳細については、[Hyperledger Fabric に関するワークショップ](https://catalog.us-east-1.prod.workshops.aws/workshops/008da2cb-8454-42d0-877b-bc290bff7fcf/en-US)、または[イーサリアムノードのデプロイに関するブログ](https://aws.amazon.com/blogs/database/deploy-an-ethereum-node-on-amazon-managed-blockchain/)をご覧ください。AMB に関するご質問やサポートが必要な場合は、 または AWS アカウントチーム[にお問い合わせください サポート](https://console.aws.amazon.com/support/home#/case/create?issueType=technical)。

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

# 前提条件の設定
<a name="blockchain-template-getting-started-prerequisites"></a>

このチュートリアルで指定する Ethereum 用の AWS Blockchain Template 設定では、次のことを行う必要があります。
+ [VPC とサブネットを作成する](#blockchain-templates-create-a-vpc)
+ [セキュリティグループを作成する](#blockchain-templates-create-security-group)
+ [Amazon ECS および EC2 インスタンスプロファイルの IAM ロールを作成する](#blockchain-templates-iam-roles)
+ [要塞ホストの作成](#blockchain-templates-bastion-host)

## VPC とサブネットを作成する
<a name="blockchain-templates-create-a-vpc"></a>

Ethereum 用の AWS Blockchain Template は、Amazon Virtual Private Cloud (Amazon VPC) を使用して、定義した仮想ネットワーク内でリソースを起動します。このチュートリアルで指定する設定では、2 つのパブリックサブネットを必要とする Application Load Balancer を作成します。各サブネットは別個のアベイラビリティーゾーンに配置する必要があります。さらに、コンテナインスタンス用にプライベートサブネットも必要です。このサブネットは Application Load Balancer と同じアベイラビリティーゾーンに配置する必要があります。最初に VPC ウィザードを使用して、1 つのパブリックサブネットとプライベートサブネットを同じアベイラビリティーゾーンに作成します。次に、この VPC の 2 つ目のパブリックサブネットを別のアベイラビリティーゾーンに作成します。

詳細については、「Amazon VPC ユーザーガイド」の「[Amazon VPC とは](https://docs.aws.amazon.com/vpc/latest/userguide/)」を参照してください。

以下で説明するように、Amazon VPC コンソール ([https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)) を使用して、Elastic IP アドレス、VPC、およびサブネットを作成します。

**Elastic IP アドレスを作成するには**

1. Amazon VPC コンソールの [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) を開いてください。

1. [**Elastic IP**]、[**新しいアドレスの割り当て**]、[**割り当て**] の順に選択します。

1. 作成した Elastic IP アドレスを書き留め、[**閉じる**] を選択します。

1. Elastic IP アドレスのリストで、先ほど作成した Elastic IP アドレスの [**割り当て ID**] を見つけます。VPC を作成するときに、これを使用します。

**VPC を作成するには**

1. ナビゲーションバーで、VPC のリージョンを選択します。VPC はリージョンに固有であるため、キーペアを作成し、Ethereum スタックを起動するのと同じリージョンを選択します。詳細については、「[キーペアの作成](blockchain-templates-setting-up.md#blockchain-templates-create-a-key-pair)」を参照してください。

1. VPC ダッシュボードで、**[Start VPC Wizard]** (VPC ウィザードの起動) を選択します。

1. [**ステップ 1: VPC 設定の選択**] ページで [**パブリックとプライベートサブネットを持つ VPC**] を選択し、[**選択**] を選択します。

1. [**ステップ 2: パブリックとプライベートサブネットを持つ VPC**] ページで、[**IPv4 CIDR ブロック**] と [**IPv6 CIDR ブロック**] はデフォルト値のままにします。[**VPC 名**] に、わかりやすい名前を入力します。

1. [**パブリックサブネットの IPv4 CIDR**] は、デフォルト値のままにしておきます。[**アベイラビリティーゾーン**] でゾーンを選択します。[**パブリックサブネット名**] にわかりやすい名前を入力します。

   このサブネットを、テンプレートを使用するときに Application Load Balancer の 2 つのサブネットの最初の 1 つとして指定します。

   プライベートサブネットに同じアベイラビリティーゾーンを選択し、他のパブリックサブネットに別のアベイラビリティーゾーンを選択するため、このサブネットのアベイラビリティーゾーンを書き留めておきます。

1. [**プライベートサブネットの IPv4 CIDR**] は、デフォルト値のままにしておきます。[**アベイラビリティーゾーン**] で、前のステップと同じアベイラビリティーゾーンを選択します。[**プライベートサブネット名**] に、わかりやすい名前を入力します。

1. [**Elastic IP 割り当て ID**] で、前に作成した Elastic IP アドレスを選択します。

1. 他の設定はデフォルト値のままにします。

1. **[Create VPC（VPC の作成）]** を選択します。

   以下の例に示しているのは、パブリックサブネット **EthereumPubSub1** およびプライベートサブネット **EthereumPvtSub1** を持つ VPC **EthereumNetworkVPC** です。パブリックサブネットでは、アベイラビリティーゾーン [**us-west-2a**] を使用します。  
![EthereumVPC のパブリックサブネットとプライベートサブネットの詳細を含む VPC 設定フォーム。](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/images/VPC.png)

**別のアベイラビリティーゾーンに 2 つ目のパブリックサブネットを作成するには**

1. [**サブネット**] を選択し、前に作成したパブリックサブネットをリストから選択します。[**ルートテーブル**] タブを選択し、**ルートテーブル** ID を書き留めます。次の 2 番目のパブリックサブネットに、この同じルートテーブルを指定します。

1. [**Create Subnet**] を選択します。

1. [**名前タグ**] に、サブネットの名前を入力します。この名前は、後でこのネットワークに要塞ホストを作成するときに使用します。

1. [**VPC**] で、前に作成した VPC を選択します。

1. [**アベイラビリティーゾーン**] で、最初のパブリックサブネット用に選択したゾーンとは異なるゾーンを選択します。

1. [**IPv4 CIDR ブロック**] に「**10.0.2.0/24**」と入力します。

1. [**はい、作成する**] を選択します。サブネットがサブネットのリストに追加されます。

1. リストからサブネットを選択した状態で、[**サブネットのアクション**]、[**自動割り当て IP 設定の変更**] の順に選択します。[**自動割り当て IP**]、[**保存**]、[**閉じる**] の順に選択します。これにより、要塞ホストは、このサブネットで作成されたパブリック IP アドレスを取得できます。

1. [**ルートテーブル**] タブで [**編集**] を選択します。[**変更先**] で、前に書き留めたルートテーブル ID を選択し、[**保存**] を選択します。

これにより、先ほど作成した VPC のサブネットが 3 つ表示されます。各サブネットの名前と ID を書き留め、テンプレートの使用時に指定できるようにします。

![IDs、状態、および IPv4 CIDR 範囲を持つ 3 つのサブネットを示す VPC ダッシュボード。](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/images/subnets-listing.png)


## セキュリティグループを作成する
<a name="blockchain-templates-create-security-group"></a>

セキュリティグループはファイアウォールとして機能し、リソースへのインバウンドトラフィックとアウトバウンドトラフィックをコントロールします。テンプレートを使用して Amazon ECS クラスター上に Ethererum ネットワークを作成するときは、2 つのセキュリティグループを指定します。
+ EC2 インスタンスのセキュリティグループは、クラスター内にある EC2 インスタンスに出入りするトラフィックをコントロールします。
+ Application Load Balancer、EC2 インスタンス、および要塞ホスト間のトラフィックを制御する Application Load Balancer 用のセキュリティグループ。このセキュリティグループを要塞ホストにも関連付けます。

各セキュリティグループには、Application Load Balancer と EC2 インスタンス間の通信、およびその他の最小ルールを可能にするルールがあります。これには、セキュリティグループが互いに参照する必要があります。このため、最初にセキュリティグループを作成し、適切なルールを使用して更新します。

**2 つのセキュリティグループを作成するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで **[Security Groups]** (セキュリティグループ) を選択して、**[Create Security Group]** (セキュリティグループの作成) を選択します。

1. [**セキュリティグループ名**] に、わかりやすいセキュリティグループ名を入力します。[*EthereumEC2-SG*] や [*EthereumALB-SG*] など、他のセキュリティグループと区別できる名前にします。これらの名前は後で使用します。[**説明**] に、簡単な概要を入力します。

1. [**VPC**] で、前に作成した VPC を選択します。

1. **[作成]** を選択します。

1. 上記の手順を繰り返して、他のセキュリティグループを作成します。

**EC2 インスタンスのセキュリティグループにインバウンドルールを追加する**

1. 先ほど作成した EC2 インスタンスのセキュリティグループを選択します。

1. [**インバウンド**] タブで、[**編集**] を選択します。

1. [**タイプ**] で、[**すべてのトラフィック**] を選択します。[**ソース**] で [**カスタム**] を選択したままにし、現在編集しているセキュリティグループをリストから選択します (例: *EthereumEC2-SG*)。これにより、セキュリティグループ内の EC2 インスタンスが相互に通信できるようになります。

1. **[ルールの追加]** を選択します。

1. [**タイプ**] で、[**すべてのトラフィック**] を選択します。[**ソース**] で [**カスタム**] を選択したままにし、Application Load Balancer のセキュリティグループをリストから選択します (例: *EthereumALB-SG*)。これにより、セキュリティグループ内の EC2 インスタンスが Application Load Balancer と通信できるようになります。

1. **[保存]** を選択します。

**Application Load Balancer のセキュリティグループのインバウンドルールとアウトバウンドルールを追加する**

1. 先ほど作成した Application Load Balancer インスタンスのセキュリティグループを選択します。

1. [**インバウンド**] タブで [**編集**] を選択し、次のインバウンドのルールを追加します。

   1. [**タイプ**] で、[**すべてのトラフィック**] を選択します。[**ソース**] で [**カスタム**] を選択したままにし、現在編集しているセキュリティグループをリストから選択します (例: *EthereumALB-SG*)。これにより、Application Load Balancer はそれ自体および要塞ホストと通信できるようになります。

   1. **[ルールの追加]** を選択します。

   1. [**タイプ**] で、[**すべてのトラフィック**] を選択します。[**ソース**] で [**カスタム**] を選択したままにし、EC2 インスタンスのセキュリティグループをリストから選択します (例: *EthereumEC2-SG*)。これにより、セキュリティグループ内の EC2 インスタンスは Application Load Balancer および要塞ホストと通信できるようになります。

   1. **[ルールの追加]** を選択します。

   1. **[タイプ]** で **SSH]** を選択してください。[**ソース**] で [**マイ IP**] を選択します。これにより、コンピュータの IP CIDR が検出されて入力されます。
**重要**  
このルールにより、コンピュータからの SSH トラフィックを受け入れることを要塞ホストに許可します。また、要塞ホストを使用してウェブインターフェイスを表示したり、Ethereum ネットワークの EC2 インスタンスに接続したりすることをコンピュータに許可します。Ethereum ネットワークに接続することを他のコンピュータに許可するには、それらのコンピュータをソースとして、このルールに追加します。信頼されたソースへのインバウンドトラフィックのみを許可します。

   1. **[保存]** を選択します。

1. [**アウトバウンド**] タブで、[**編集**] を選択し、すべての IP アドレスへのアウトバウンドトラフィックを許可するように自動的に作成されたルールを削除します。

1. **[ルールの追加]** を選択します。

1. [**タイプ**] で、[**すべてのトラフィック**] を選択します。[**送信先**] で [**カスタム**] を選択したままにし、EC2 インスタンスのセキュリティグループをリストから選択します。これにより、Application Load Balancer および要塞ホストから Ethereum ネットワーク内の EC2 インスタンスへのアウトバウンド接続が可能になります。

1. **[ルールの追加]** を選択します。

1. [**タイプ**] で、[**すべてのトラフィック**] を選択します。[**ソース**] で [**カスタム**] を選択したままにし、現在編集しているセキュリティグループをリストから選択します (例: *EthereumALB-SG*)。これにより、Application Load Balancer はそれ自体および要塞ホストと通信できるようになります。

1. **[保存]** を選択します。

## Amazon ECS および EC2 インスタンスプロファイルの IAM ロールを作成する
<a name="blockchain-templates-iam-roles"></a>

このテンプレートを使用するときは、Amazon ECS および EC2 インスタンスプロファイルの IAM ロールを指定します。これらのロールにアタッチされたアクセス権限ポリシーにより、クラスターの AWS リソースとインスタンスは、他の AWS リソースとやり取りすることができます。詳細については、*IAM ユーザーガイド*の [IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)を参照してください。IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を使用して、Amazon ECS および EC2 インスタンスプロファイルの IAM ロールを設定します。

**Amazon ECS の IAM ロールを作成するには**

1. IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

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

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

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

1. [**ユースケースの選択**] で [**Elastic Container Service**] を選択し、[**Next: Permissions (次の手順: アクセス許可)**] を選択します。  
![AWS Elastic Container Service をユースケースとして選択したロールを作成するためのコンソールインターフェイス。](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/images/ecs-role.png)

1. [**Permissions policy (アクセス許可ポリシー)**] で、デフォルトのアクセス許可ポリシー (**AmazonEC2ContainerServiceRole**) を選択したままにし、[**Next:Review (次の手順: 確認)**] を選択します。

1. [**ロール名**] に、ロールを識別するのに役立つ値を入力します (例: *ECSRoleForEthereum*)。[**ロールの説明**] に、簡単な要約を入力します。後で使用するため、ロール名を書き留めておきます。

1. [**ロールの作成**] を選択してください。

1. リストから、作成したロールを選択します。アカウントに多数のロールがある場合は、ロール名で検索できます。  
![IAM 検索フィルターを使用してロールリストで選択された ECSRoleForEtherium ロールを表示するコンソール。](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/images/ecs-role-list.png)

1. [**ロールの ARN**] の値をコピーし、再度コピーできるように保存します。Ethereum ネットワークを作成するときに、この ARN が必要です。  
![AWS IAM ロール ARN、説明、アタッチされたポリシーを示すロールの概要ページ。](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/images/ecs-role-arn.png)

テンプレートで指定した EC2 インスタンスプロファイルは、他の AWS サービスとやり取りするために Ethereum ネットワークの EC2 インスタンスによって引き受けられます。ロールのアクセス許可ポリシーを作成し、ロールを作成します (同じ名前のインスタンスプロファイルが自動的に作成されます)。次に、これらのアクセス許可ポリシーをロールにアタッチします。

**EC2 インスタンスプロファイルを作成するには**

1. ナビゲーションペインで、[Policies]、[Create policy] の順に選択してください。********

1. [**JSON**] を選択し、デフォルトのポリシーステートメントを次の JSON ポリシーに置き換えます。

   ```
   {
       "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": "*"
           }
       ]
   }
   ```

1. **[ポリシーの確認]** を選択します。

1. [**名前**] に、このアクセス許可ポリシーのわかりやすい名前を入力します (例: *EthereumPolicyForEC2*)。[**説明**] に、簡単な概要を入力します。[**Create policy**] (ポリシーの作成) を選択します。  
![AWS コンソールに名前、説明、サービスアクセス許可を含むポリシーの作成ページが表示されます。](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/images/ec2-perms-policy.png)

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

1. [**EC2**]、[**次の手順: アクセス許可**] の順に選択します。

1. [**検索**] フィールドに、先ほど作成したアクセス許可ポリシーの名前 (例: *EthereumPolicyForEC2*) を入力します。

1. 先ほど作成したポリシーのチェックマークを選択し、[**次の手順: 確認**] を選択します。  
![AWS コンソールに、EthereumPolicyForEC2 ポリシーが選択されたロールの作成ページが表示されます。](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/images/ec2-select-policy.png)

1. [**ロール名**] に、ロールのわかりやすい名前を入力します (例: *EC2RoleForEthereum*)。[**ロールの説明**] に簡単な説明を入力し、[**ロールの作成**] を選択します。

1. リストから、作成したロールを選択します。アカウントに多くのロールがある場合は、[**検索**] フィールドにロール名を入力できます。  
![AWS IAM EC2RoleforEther という名前のロールと、関連する説明と信頼されたエンティティを示す インターフェイス。](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/images/ec2-select-role.png)

1. [**インスタンスプロファイルの ARN**] の値をコピーし、再利用できるように保存しておきます。Ethereum ネットワークを作成するときに、この ARN が必要です。  
![AWS IAM ロール ARN フィールドとインスタンスプロファイル ARNs フィールドを示すロールの概要ページ。](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/images/ec2-role-arn.png)

## 要塞ホストの作成
<a name="blockchain-templates-bastion-host"></a>

このチュートリアルでは、要塞ホストを作成します。これは、Ethereum ネットワークのウェブインターフェイスとインスタンスに接続するために使用する EC2 インスタンスです。その唯一の目的は、VPC 外の信頼されたクライアントからの SSH トラフィックを転送し、これらのクライアントから Ethereum ネットワークのリソースにアクセスできるようにすることです。

テンプレートで作成する Application Load Balancer は内部型である (内部 IP アドレスのみをルーティングする) ため、要塞ホストをセットアップします。要塞ホスト:
+ 前に作成した 2 番目のパブリックサブネットで起動されるため、Application Load Balancer が認識する内部 IP アドレスを持ちます。
+ VPC 外の信頼されたソースからアクセスできるパブリック IP アドレスがサブネットから割り当てられます。
+ 前に作成した Application Load Balancer のセキュリティグループに関連付けられます。このセキュリティグループには、信頼されたクライアントからの SSH トラフィック (ポート 22) を許可するインバウンドルールがあります。

信頼されたクライアントから Ethereum ネットワークにアクセスするには、要塞ホストを介して接続するようにクライアントを設定する必要があります。詳細については、「[要塞ホストを使用して EthStats および EthExplorer に接続する](blockchain-bastion-host-connect.md)」を参照してください。要塞ホストは 1 つの方法です。信頼されたクライアントから VPC 内のプライベートリソースにアクセスできる方法であれば、どれでも使用できます。

**要塞ホストを作成するには**

1. Amazon *Amazon EC2ユーザーガイド*の最初の 5 つのステップに従って[、インスタンスを起動](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-launch-instance)します。

1. [**インスタンスの詳細の編集**] を選択します。[**ネットワーク**] で前に作成した VPC を選択し、[**サブネット**] で前に作成した 2 番目のパブリックサブネットを選択します。その他すべての設定はデフォルトのままにします。

1. 変更を確認するメッセージが表示されたら、[**確認と作成**] を選択します。

1. [**セキュリティグループの編集**] を選択します。[**セキュリティグループの割り当て**] で、[**既存のセキュリティグループを選択する**] を選択します。

1. セキュリティグループのリストから、前に作成した Application Load Balancer のセキュリティグループを選択し、[**確認と作成**] を選択します。

1. **[Launch]** (起動する) を選択します。

1. インスタンス ID を書き留めます。後で「[要塞ホストを使用して EthStats および EthExplorer に接続する](blockchain-bastion-host-connect.md)」際に必要になります。  
![部分的に不明瞭なインスタンス ID でインスタンスが正常に起動されたことを示す緑色のチェックマーク。](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/images/bastion-instance.png)