

AWS 區塊鏈範本已於 2019 年 4 月 30 日終止。不會進一步更新此服務或此支援文件。為了獲得最佳的受管區塊鏈體驗 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)，或[有關部署 Ethereum 節點的部落格](https://aws.amazon.com/blogs/database/deploy-an-ethereum-node-on-amazon-managed-blockchain/)。如果您對 AMB 有任何疑問或需要進一步支援，[請聯絡 支援](https://console.aws.amazon.com/support/home#/case/create?issueType=technical) 或您的 AWS 客戶團隊。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定先決條件
<a name="blockchain-template-getting-started-prerequisites"></a>

您在本教學課程中指定的 Ethereum 組態 AWS Blockchain 範本需要您執行下列動作：
+ [建立 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 區塊鏈範本會將資源啟動至您使用 Amazon Virtual Private Cloud (Amazon VPC) 定義的虛擬網路。您在本教學中指定的組態會建立 Application Load Balancer，需要兩個在不同可用區域的公有子網路。此外，需要適用於容器執行個體的私有子網路，而且子網路必須與 Application Load Balancer 位於相同的可用區域。首先，使用 VPC 精靈在相同的可用區域中建立一個公有子網路和一個私有子網路。然後在不同的可用區域中，在此 VPC 內建立第二個公有子網路。

如需詳細資訊，請參閱《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/)：//) 來建立彈性 IP 地址、VPC 和子網路，如下所述。

**建立彈性 IP 地址**

1. 在 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 開啟 Amazon VPC 主控台。

1. 選擇 **Elastic IPs (彈性 IP)**、**Allocate new address (配置新地址)**、**Allocate (配置)**。

1. 記下您建立的彈性 IP 地址，並選擇 **Close (關閉)**。

1. 在彈性 IP 地址的清單中，尋找稍早建立之彈性 IP 地址的 **Allocation ID (配置 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. 在 **Step 1: Select a VPC Configuration (步驟 1：選取 VPC 組態)** 頁面，依序選擇 **VPC with Public and Private Subnets (含公有和私有子網路的 VPC)**、**Select (選取)**。

1. 在 **Step 2: VPC with Public and Private Subnets (步驟 2：含公有和私有子網路的 VPC)** 頁面，保留 **IPv4 CIDR block (IPv4 CIDR 區塊)** 和 **IPv6 CIDR block (IPv6 CIDR 區塊)** 的預設值。對於 **VPC name (VPC 名稱)**，輸入易記的名稱。

1. 對於 **Public subnet's IPv4 CIDR (公有子網路的 IPv4 CIDR)**，保留預設值。對於 **Availability Zone (可用區域)**，選擇區域。對於 **Public subnet name (公有子網路名稱)**，輸入易記的名稱。

   當您使用範本時，會將這個子網路指定為 Application Load Balancer 的兩個子網中的第一個。

   請記下此子網路的可用區域，因為您為私有子網路選取相同的可用區域，並為另一個公有子網路選取不同的可用區域。

1. 對於 **Private subnet's IPv4 CIDR (私有子網路的 IPv4 CIDR)**，保留預設值。對於 **Availability Zone (可用區域)**，選取與上一個步驟相同的可用區域。對於 **Private subnet name (私有子網路名稱)**，輸入易記的名稱。

1. 對於 **Elastic IP Allocation ID (彈性 IP 配置 ID)**，選取稍早建立的彈性 IP 地址。

1. 保留其他設定的預設值。

1. 選擇**建立 VPC**。

   以下範例顯示一個 VPC **EthereumNetworkVPC** 搭配公有子網路 **EthereumPubSub1** 和私有子網路 **EthereumPvtSub1**。公有子網路使用可用區域 **us-west-2a**。  
![VPC 組態表單，其中包含 EthereumVPC 的公有和私有子網路詳細資訊。](http://docs.aws.amazon.com/zh_tw/blockchain-templates/latest/developerguide/images/VPC.png)

**若要在不同的可用區域建立第二個公有子網路**

1. 選擇 **Subnets (子網路)**，然後從清單中選取稍早建立的公有子網路。選取 **Route Table (路由表)** 標籤，並記下 **Route table (路由表)** ID。為下列第二個公有子網路指定相同的路由表。

1. 選擇 **Create Subnet (建立子網路)**。

1. 對於 **Name tag (名稱標籤)**，輸入子網路的名稱。您稍後在該網路中建立堡壘主機時，會使用此名稱。

1. 對於 **VPC**，選取稍早建立的 VPC。

1. 對於 **Availability Zone (可用區域)**，選取與第一個公有子網路所選區域不同的區域。

1. 對於 **IPv4 CIDR block (IPv4 CIDR 區塊)**，輸入 **10.0.2.0/24**。

1. 選擇 **Yes, Create** (是，建立)。子網路隨即新增至子網路清單中。

1. 從清單選取子網路，然後選擇 **Subnet Actions (子網路動作)**、**Modify auto-assign IP settings (修改自動指派 IP 設定)**。選取 **Auto-assign IPs (自動指派 IP)**、**Save (儲存)**、**Close (關閉)**。這樣可讓您在子網路中建立堡壘主機時，使其取得公有 IP 地址。

1. 在 **Route Table (路由表)** 標籤中，選擇 **Edit (編輯)**。對於 **Change to (變更為)**，選取您稍早記下的路由表 ID，並選擇 **Save (儲存)**。

您現在應該會看到您先前建立之 VPC 的三個子網路。請記下這些子網路名稱和 ID，以便可以使用範本來指定它們。

![VPC 儀表板顯示三個子網路及其 IDs、狀態和 IPv4 CIDR 範圍。](http://docs.aws.amazon.com/zh_tw/blockchain-templates/latest/developerguide/images/subnets-listing.png)


## 建立安全群組
<a name="blockchain-templates-create-security-group"></a>

安全群組可以做為防火牆，控制對資源的傳入和傳出流量。當您使用 範本在 Amazon ECS 叢集上建立 Ethererum 網路時，您可以指定兩個安全群組：
+ 適用於 EC2 執行個體的安全群組，用以控制叢集中往返 EC2 執行個體的流量
+ Application Load Balancer 的安全群組，可控制 Application Load Balancer、EC2 執行個體和堡壘主機之間的流量。您也可以將此安全群組與堡壘主機建立關聯。

每個安全群組具備允許 Application Load Balancer 和 EC2 執行個體之間通訊的規則，以及其他最低規則。這需要安全群組參考其他安全群組。因此，您需先建立安全群組，然後根據適當的規則更新它們。

**若要建立兩個安全群組**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Security Groups** (安全群組)、**Create Security Group** (建立安全群組)。

1. 在 **Security group name (安全群組名稱)** 中，為安全群組輸入易於識別並可彼此區別的名稱，例如 *EthereumEC2-SG* 或 *EthereumALB-SG*。您稍後會用到這些名稱。對於 **Description (描述)**，輸入簡短摘要。

1. 對於 **VPC**，選取稍早建立的 VPC。

1. 選擇**建立**。

1. 重複上述步驟來建立其他的安全群組。

**為 EC2 執行個體新增安全群組的傳入規則**

1. 選取您稍早為 EC2 執行個體建立的安全群組

1. 在 **Inbound (傳入)** 標籤上，選擇 **Edit (編輯)**。

1. 針對**類型**，選擇**所有流量**。對於 **Source (來源)**，將 **Custom (自訂)** 保持選取狀態，然後從清單中選擇您目前正在編輯的安全群組，例如 *EthereumEC2-SG*。這可讓安全群組中的 EC2 執行個體彼此通訊。

1. 選擇 **Add Rule** (新增規則)。

1. 針對**類型**，選擇**所有流量**。對於 **Source (來源)**，將 **Custom (自訂)** 保持選取狀態，然後從清單中選擇 Application Load Balancer 的安全群組，例如 *EthereumALB-SG*。這可讓安全群組中的 EC2 執行個體與 Application Load Balancer 通訊。

1. 選擇**儲存**。

**為 Application Load Balancer 的安全群組新增傳入規則和編輯傳出規則**

1. 選取您稍早為 Application Load Balancer 建立的安全群組

1. 在 **Inbound (傳入)** 標籤上，選擇 **Edit (編輯)**，然後新增以下傳入規則：

   1. 針對**類型**，選擇**所有流量**。對於 **Source (來源)**，將 **Custom (自訂)** 保持選取狀態，然後從清單中選擇您目前正在編輯的安全群組，例如 *EthereumALB-SG*。這可讓 Application Load Balancer 與本身和堡壘主機通訊。

   1. 選擇 **Add Rule** (新增規則)。

   1. 針對**類型**，選擇**所有流量**。對於 **Source (來源)**，將 **Custom (自訂)** 保持選取狀態，然後從清單中選擇 EC2 執行個體的安全群組，例如 *EthereumEC2-SG*。這可讓安全群組中的 EC2 執行個體與 Application Load Balancer 和堡壘主機通訊。

   1. 選擇 **Add Rule** (新增規則)。

   1. 針對 **Type** (類型)，選擇 **SSH**。對於 **Source (來源)**，選取 **My IP (我的 IP)**，這會偵測到您電腦的 IP CIDR，並進入其中。
**重要**  
此規則允許堡壘主機接受來自您電腦的 SSH 流量，讓您的電腦能夠使用堡壘主機檢視 Web 界面，並連線到 Ethereum 網路上的 EC2 執行個體。若要允許其他人連線到 Ethereum 網路，請將他們新增為此規則的來源。僅允許傳入流量流向受信任的來源。

   1. 選擇**儲存**。

1. 在 **Outbound (傳出)** 標籤上，選擇 **Edit (編輯)**，然後刪除允許傳出流量至所有 IP 地址的自動建立規則。

1. 選擇 **Add Rule** (新增規則)。

1. 針對**類型**，選擇**所有流量**。對於 **Destination (目的地)**，將 **Custom (自訂)** 保持選取狀態，然後從清單中選擇 EC2 執行個體的安全群組。這會允許來自 Application Load Balancer 和堡壘主機前往 Ethereum 網路中 EC2 執行個體的傳出連線。

1. 選擇 **Add Rule** (新增規則)。

1. 針對**類型**，選擇**所有流量**。對於 **Destination (目的地)**，將 **Custom (自訂)** 保持選取狀態，然後從清單中選擇您目前正在編輯的安全群組，例如 *EthereumALB-SG*。這可讓 Application Load Balancer 與本身和堡壘主機通訊。

1. 選擇**儲存**。

## 為 Amazon ECS 和 EC2 執行個體設定檔建立 IAM 角色
<a name="blockchain-templates-iam-roles"></a>

使用此範本時，您可以指定 Amazon ECS 的 IAM 角色和 EC2 執行個體描述檔。連接到這些角色的許可政策，能讓叢集中的 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. 前往網址 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**角色** 、**建立角色**。

1. 在 **Select type of trusted entity (選擇信任的實體類型)** 下，選擇 **AWS service (AWS 服務)**。

1. 針對 **Choose the service that will use this role (選擇將使用此角色的服務)**，請選擇 **Elastic Container Service**。

1. 在 **Select your use case (選擇您的使用案例)** 下方選擇 **Elastic Container Service**、**Next:Permissions (下一步：許可)**。  
![AWS 主控台界面，用於建立角色，並將 Elastic Container Service 選取為使用案例。](http://docs.aws.amazon.com/zh_tw/blockchain-templates/latest/developerguide/images/ecs-role.png)

1. 維持選取 **Permissions policy (許可政策)** 中的預設政策 (**AmazonEC2ContainerServiceRole**)，然後選擇 **Next:Review (下一步：檢閱)**。

1. 在 **Role name (角色名稱)** 中輸入可協助您識別此角色的值，例如 *ECSRoleForEthereum*。在 **Role Description (角色描述)** 中輸入簡短摘要。請記下稍後的角色名稱。

1. 選擇建**立角色**。

1. 從清單中選擇您剛剛建立的角色。如果您的帳戶有許多角色，您可以搜尋角色名稱。  
![IAM 主控台顯示使用搜尋篩選條件在角色清單中選取的 ECSRoleForEtherium 角色。](http://docs.aws.amazon.com/zh_tw/blockchain-templates/latest/developerguide/images/ecs-role-list.png)

1. 複製 **Role ARN (角色 ARN)** 值並加以儲存，讓您稍後可以再次複製。建立 Ethereum 網路時會需要此 ARN。  
![AWS IAM 角色摘要頁面顯示角色 ARN、描述和附加政策。](http://docs.aws.amazon.com/zh_tw/blockchain-templates/latest/developerguide/images/ecs-role-arn.png)

您在範本中指定的 EC2 執行個體描述檔由 Ethereum 網路中的 EC2 執行個體擔任，以與其他 AWS 服務互動。您為角色建立許可政策、建立該角色 (這會自動建立相同名稱的執行個體描述檔)，然後將許可政策連接至角色。

**若要建立 EC2 執行個體描述檔**

1. 在導覽窗格中，選擇**政策**、**建立政策**。

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. 對於 **Name (名稱)**，輸入可協助您識別此許可政策的值，例如 *EthereumPolicyForEC2*。對於 **Description (描述)**，輸入簡短摘要。選擇**建立政策**。  
![AWS 主控台顯示建立具有名稱、描述和服務許可的政策頁面。](http://docs.aws.amazon.com/zh_tw/blockchain-templates/latest/developerguide/images/ec2-perms-policy.png)

1. 選擇 **Roles (角色)**、**Create role (建立角色)**。

1. 選擇 **EC2**、**Next: Permissions (下一步：許可)**。

1. 在 **Search (搜尋)** 欄位中，輸入您稍早建立的許可政策名稱，例如 *EthereumPolicyForEC2*。

1. 選取您稍早建立之政策的核取記號，然後選擇 **Next: Review (下一步：檢閱)**。  
![AWS 主控台顯示已選取 EthereumPolicyForEC2 政策的建立角色頁面。](http://docs.aws.amazon.com/zh_tw/blockchain-templates/latest/developerguide/images/ec2-select-policy.png)

1. 對於 **Role name (角色名稱)**，輸入可協助您識別此角色的值，例如 *EC2RoleForEthereum*。對於 **Role description (角色描述)**，輸入簡短摘要。選擇 **Create role (建立角色)**。

1. 從清單中選擇您剛剛建立的角色。如果您的帳戶有很多角色，則可在 **Search (搜尋)** 欄位中輸入角色名稱。  
![AWS IAM 界面顯示名為 EC2RoleforEther 的角色，其中包含相關聯的描述和信任的實體。](http://docs.aws.amazon.com/zh_tw/blockchain-templates/latest/developerguide/images/ec2-select-role.png)

1. 複製 **Instance Profile ARN (執行個體描述檔 ARN)** 值並加以儲存，讓您稍後可以再次複製。建立 Ethereum 網路時會需要此 ARN。  
![AWS IAM 角色摘要頁面顯示角色 ARN 和執行個體描述檔 ARNs 欄位。](http://docs.aws.amazon.com/zh_tw/blockchain-templates/latest/developerguide/images/ec2-role-arn.png)

## 建立堡壘主機
<a name="blockchain-templates-bastion-host"></a>

在此教學中，您會建立堡壘主機。這是 EC2 執行個體，您可用來連線至 Ethereum 網路中的 Web 介面和執行個體。其唯一目的是轉送來自 VPC 外部之受信任用戶端的 SSH 流量，以便其可以存取 Ethereum 網路資源。

您設定堡壘主機是因為範本建立的 Application Load Balancer 是內部的，表示它僅路由內部 IP 地址。堡壘主機：
+ 具有 Application Load Balancer 可辨識的內部 IP 地址，因為您在稍早建立的第二個公有子網路中啟動該地址。
+ 具有子網路指派的公有 IP 地址，VPC 外部受信任的來源可存取該位址。
+ 與您先前建立之 Application Load Balancer 的安全群組相關聯，該群組具有允許來自受信任用戶端之 SSH 流量 (連接埠 22) 的傳入規則。

為了能夠存取 Ethereum 網路，必須設定受信任的用戶端，才能透過堡壘主機進行連線。如需詳細資訊，請參閱[使用堡壘主機連線到 EthStats 和 EthExplorer](blockchain-bastion-host-connect.md)。堡壘主機是一種方法。您可以使用任何方法，從受信任的用戶端存取 VPC 內的私有資源。

**建立堡壘主機**

1. 遵循《*Amazon EC2 使用者指南*》中的前五個步驟來[啟動執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-launch-instance)。

1. 選擇**邊值執行個體詳細資訊**。對於 **Network (網路)**，選擇您稍早建立的 VPC，對於 **Subnet (子網路)**，選取您稍早建立的第二個公有子網路。將所有其他設定保持為預設值。

1. 出現提示時確認變更，然後選擇 **Review and Launch (檢閱和啟動)**。

1. 選擇 **Edit Security Groups (編輯安全群組)**。在 **Assign a security group (指派安全群組)** 中，選擇 **Select an existing security group (選取現有的安全群組)**。

1. 從安全群組的清單中，選取您稍早建立之 Application Load Balancer 的安全群組，然後選擇 **Review and Launch (檢閱和啟動)**。

1. 選擇**啟動**。

1. 請記下執行個體 ID。您稍後會在[使用堡壘主機連線到 EthStats 和 EthExplorer](blockchain-bastion-host-connect.md)時，需要該 ID。  
![綠色核取記號，指出已成功啟動具有部分遮蔽執行個體 ID 的執行個體。](http://docs.aws.amazon.com/zh_tw/blockchain-templates/latest/developerguide/images/bastion-instance.png)