

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)。

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

# Ethereum 用の AWS Blockchain Template の使用
<a name="blockchain-templates-ethereum"></a>

Ethereum は、Ethereum 固有の言語である Solidity を使用してスマートコントラクトを実行するブロックチェーンフレームワークです。Homestead は Ethereum の最新のリリースです。詳細については、[Ethereum Homestead のドキュメント](http://www.ethdocs.org/en/latest/)と [Solidity](https://solidity.readthedocs.io/en/v0.4.21/#) のドキュメントを参照してください。

## 起動へのリンク
<a name="blockchain-ethereum-launch"></a>

Ethereum [テンプレートを使用して特定のリージョンで起動するリンクについては、「AWS ブロックチェーンテンプレートの開始方法](https://aws.amazon.com/blockchain/templates/getting-started/)」を参照してください。 CloudFormation 

## Ethereum のオプション
<a name="blockchain-ethereum-options"></a>

テンプレートを使用して Ethereum ネットワークを設定する場合は、後続の要件を決定する選択を行います。
+ [コンテナプラットフォームの選択](#blockchain-ethereum-platform)
+ [プライベートまたはパブリック Ethereum ネットワークの選択](#blockchain-private-public)
+ [デフォルトのアカウントおよびニーモニックフレーズの変更](#blockchain-ethereum-mnemonic)

### コンテナプラットフォームの選択
<a name="blockchain-ethereum-platform"></a>

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 コンテナプラットフォームの使用
<a name="blockchain-ethereum-ecs"></a>

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

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

![\[AWS diagram showing VPC with public and private subnets, load balancers, and Ethereum nodes in ECS containers.\]](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/images/ethereum-ecs-arch.png)


#### Docker-Local プラットフォームの使用
<a name="blockchain-ethereum-docker-local"></a>

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

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

![\[Diagram of Ethereum network on AWS with VPC, EC2 instance, containers, and ECR registry.\]](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/images/ethereum-docker-local-arch.png)


### プライベートまたはパブリック Ethereum ネットワークの選択
<a name="blockchain-private-public"></a>

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

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

### デフォルトのアカウントおよびニーモニックフレーズの変更
<a name="blockchain-ethereum-mnemonic"></a>

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

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

## 前提条件
<a name="blockchain-ethereum-prereq"></a>

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

**Topics**
+ [Ethereum リソースにアクセスするための前提条件](#blockchain-ethereum-prereq-access)
+ [IAM の前提条件](#blockchain-ethereum-prereq-iam)
+ [セキュリティグループの前提条件](#blockchain-ethereum-prereq-sec)
+ [VPC 前提条件](#blockchain-ethereum-prereq-vpc)
+ [EC2 インスタンスプロファイルと ECS ロールの IAM アクセス許可の例](#blockchain-ethereum-iam-examples)

### Ethereum リソースにアクセスするための前提条件
<a name="blockchain-ethereum-prereq-access"></a>


| 前提条件 | ECS プラットフォームの場合 | Docker-Local の場合 | 
| --- | --- | --- | 
|  EC2 インスタンスへのアクセスに使用できる Amazon EC2 キーペア。このキーは、ECS クラスターおよび他のリソースと同じリージョンに存在する必要があります。  |  ✔  |  ✔  | 
|  要塞ホストやインターネット接続ロードバランサーなど、Application Load Balancer へのトラフィックが許可された内部アドレスを持つインターネット接続コンポーネント。テンプレートはセキュリティ上の理由から内部ロードバランサーを作成するため、これは ECS プラットフォームに必須です。EC2 インスタンスがプライベートサブネットにある場合、これは docker-local プラットフォームに必須です (推奨)。要塞ホストの設定については、「[要塞ホストの作成](blockchain-template-getting-started-prerequisites.md#blockchain-templates-bastion-host)」を参照してください。  |  ✔  |  ✔ (プライベートサブネットを使用)  | 

### IAM の前提条件
<a name="blockchain-ethereum-prereq-iam"></a>


| 前提条件 | ECS プラットフォームの場合 | Docker-Local の場合 | 
| --- | --- | --- | 
|  関連するすべてのサービスを処理するアクセス許可を持つ IAM の原則 (ユーザーまたはグループ)。  |  ✔  |  ✔  | 
|  EC2 インスタンスが他のサービスとやりとりするための適切なアクセス許可を持つ Amazon EC2 インスタンスプロファイル。詳細については、「[To create an EC2 instance profile](blockchain-template-getting-started-prerequisites.md#create-ec2-role)」を参照してください。  |  ✔  |  ✔  | 
|  Amazon ECS が他のサービスとやりとりするアクセス許可を持つ IAM ロール。詳細については、「[ECS ロールとアクセス許可の作成](#blockchain-ethereum-ecs-role)」を参照してください。  |  ✔  |    | 

### セキュリティグループの前提条件
<a name="blockchain-ethereum-prereq-sec"></a>


| 前提条件 | ECS プラットフォームの場合 | Docker-Local の場合 | 
| --- | --- | --- | 
| EC2 インスタンスのセキュリティグループと、次の要件: | ✔ |  ✔  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/blockchain-templates-ethereum.html)  | ✔ |  ✔  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/blockchain-templates-ethereum.html)  | ✔ |  ✔  | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/blockchain-templates-ethereum.html) | ✔ |  | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/blockchain-templates-ethereum.html) |  | ✔ | 
|  Application Load Balancer のセキュリティグループと、以下の要件: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/blockchain-templates-ethereum.html)  |  ✔  |    | 

### VPC 前提条件
<a name="blockchain-ethereum-prereq-vpc"></a>


| 前提条件 | ECS プラットフォームの場合 | Docker-Local の場合 | 
| --- | --- | --- | 
|  Elastic IP アドレス。Ethereum サービスへのアクセスに使用されます。  |  ✔  |  ✔  | 
|  EC2 インスタンスを実行するサブネット。プライベートサブネットを強くお勧めします。  |  ✔  |  ✔  | 
|  パブリックにアクセス可能な 2 つのサブネット。各サブネットは、別個のアベイラビリティーゾーンに配置し、それは EC2 インスタンスのサブネットと同じアベイラビリティーゾーンであることが必要です。  |  ✔  |    | 

### EC2 インスタンスプロファイルと ECS ロールの IAM アクセス許可の例
<a name="blockchain-ethereum-iam-examples"></a>

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

#### EC2 インスタンスプロファイルのアクセス許可ポリシーの例
<a name="blockchain-ethereum-ec2-instance"></a>

次のアクセス許可ポリシーは、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 ロールとアクセス許可の作成
<a name="blockchain-ethereum-ecs-role"></a>

ECS ロールにアタッチするアクセス許可については、[**AmazonEC2ContainerServiceRole**] アクセス許可ポリシーから開始することをお勧めします。ロールを作成し、このアクセス許可ポリシーをアタッチするには、次の手順を実行します。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 console interface for creating a role, with Elastic Container Service selected as the use case.\]](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. リストから、作成したロールを選択します。アカウントに多数のロールがある場合は、ロール名で検索できます。  
![\[AWSIAM console showing a role named "ECSRoleForEtherum" with its description.\]](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/images/ecs-role-list.png)

1. [**ロールの ARN**] の値をコピーし、再度コピーできるように保存します。Ethereum ネットワークを作成するときに、この ARN が必要です。  
![\[AWSIAM role summary page showing role ARN, description, and attached policies.\]](http://docs.aws.amazon.com/ja_jp/blockchain-templates/latest/developerguide/images/ecs-role-arn.png)

## Ethereum リソースへの接続
<a name="blockchain-ethereum-connecting"></a>

テンプレートで作成したルートスタックに **CREATE\$1COMPLETE** が表示されたら、 CloudFormation コンソールを使用して Ethereum リソースに接続できます。接続する方法は、選択した ECS または docker-local のコンテナプラットフォームによって異なります。
+ **ECS** — ルートスタックの **[Output]** (出力) タブは、Application Load Balancer で実行されているサービスへのリンクを提供します。セキュリティ上の理由から、これらの URL に直接アクセスすることはできません。接続するには、*要塞ホスト*を設定し、このホストを使用してプロキシ接続を行います。詳細については、以下の [踏み台ホストを使用したプロキシ接続](#ethereum-create-bastion-host) を参照してください。
+ **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-create-bastion-host) を参照してください。

### 踏み台ホストを使用したプロキシ接続
<a name="ethereum-create-bastion-host"></a>

一部の構成では、Ethereum サービスが一般公開されない場合があります。このような場合は、*踏み台ホスト*を介して Ethereum リソースに接続できます。踏み台ホストの詳細については、*Linux 踏み台ホストクイックスタートガイド*の [Linux 踏み台ホストアーキテクチャ](https://docs.aws.amazon.com/quickstart/latest/linux-bastion/architecture.html)を参照してください。

踏み台ホストは 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 Standard を使用して、[**その他のツール**]、[**拡張機能**] の順に選択します。[**FoxyProxy Standard**] で、[**詳細**]、[**拡張機能のオプション**]、[**プロキシを新規追加**] の順に選択します。[**手動プロキシ設定**] を選択します。[**ホストまたは IP アドレス**] に「**localhost**」と入力し、[**ポート**] に「**9001**」と入力します。[**SOCKS Proxy?**]、[**保存**] を選択します。

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