

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 客戶團隊。

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

# 使用適用於 Hyperledger Fabric 的 AWS 區塊鏈範本
<a name="blockchain-templates-hyperledger"></a>

Hyperledger Fabric 是一種區塊鏈架構，可執行名為 chaincode 的智慧合約，以 Go 撰寫。您可以使用 Hyperledger Fabric 建立私有網路，限制可連線至網路並參與網路的對等。如需 Hyperledger Fabric 的詳細資訊，請參閱 [Hyperledger Fabric](https://hyperledger-fabric.readthedocs.io/en/release-1.1/) 文件。如需鏈結碼的詳細資訊，請參閱 [Hyperledger Fabric](https://hyperledger-fabric.readthedocs.io/en/release-1.1/) 文件中的[開發人員的鏈結碼](https://hyperledger-fabric.readthedocs.io/en/release-1.1/chaincode4ade.html)主題。

適用於 Hyperledger Fabric 的 AWS Blockchain 範本僅支援 *docker-local* 容器平台，這表示 Hyperledger Fabric 容器部署在單一 EC2 執行個體上。

## 啟動連結
<a name="blockchain-hyperledger-launch"></a>

如需使用 Hyperledger Fabric [範本在特定區域中啟動的連結，請參閱 AWS 區塊鏈範本入門](https://aws.amazon.com/blockchain/templates/getting-started/)。 CloudFormation 

## Hyperledger Fabric 元件的 AWS 區塊鏈範本
<a name="blockchain-hyperledger-architecture"></a>

適用於 Hyperledger Fabric 的 AWS Blockchain 範本會使用 Docker 建立 EC2 執行個體，並使用該執行個體上的容器啟動 Hyperledger Fabric 網路。網路包含一個訂單服務和三個組織，每個都有一個對等服務。範本還會啟動 Hyperledger Explorer 容器，可讓您以瀏覽區塊鏈資料。並啟動 PostgreSQL 伺服器容器來支援 Hyperledger Explorer。

下圖說明使用 範本建立的 Hyperledger Fabric 網路：

![\[AWS architecture diagram showing EC2 instance with containers in a VPC, connected to ECR and S3.\]](http://docs.aws.amazon.com/zh_tw/blockchain-templates/latest/developerguide/images/hyperledger-docker-local-arch.png)


## 先決條件
<a name="blockchain-hyperledger-prerequisites"></a>

使用範本啟動 Hyperledger Fabric 網路之前，請確定滿足下列要求：
+ 您使用的 IAM 原則 （使用者或群組） 必須具有使用所有相關服務的許可。
+ 您必須能夠存取金鑰對，以便用於存取 EC2 執行個體 (例如，使用 SSH)。金鑰必須與執行個體位於相同的區域。
+ 您必須連接具有許可政策的 EC2 執行個體描述檔，以允許存取 Amazon S3 和 Amazon Elastic Container Registry (Amazon ECR) 以提取容器。如需許可政策範例，請參閱 [EC2 執行個體描述檔的範例 IAM 許可](#blockchain-hyperledger-ec2profile)。
+ 您必須擁有具有公有子網路的 Amazon VPC 網路，或是具有 NAT 閘道和彈性 IP 地址的私有子網路 CloudFormation，才能存取 Amazon S3 和 Amazon ECR。
+ 您的 EC2 安全群組規則必須擁有傳入規則，以允許來自需使用 SSH 連接到執行個體之 IP 地址的 SSH 流量 (連接埠 22)，以及需要連接到 Hyperledger Explorer (連接埠 8080) 的用戶端。

### EC2 執行個體描述檔的範例 IAM 許可
<a name="blockchain-hyperledger-ec2profile"></a>

當您使用適用於 Hyperledger Fabric 的 AWS Blockchain 範本時，您可以將 EC2 執行個體描述檔 ARN 指定為其中一個參數。使用以下政策陳述式做為起點，來建立連接到 EC2 角色和執行個體描述檔的許可政策。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetRepositoryPolicy",
                "ecr:DescribeRepositories",
                "ecr:ListImages",
                "ecr:DescribeImages",
                "ecr:BatchGetImage",
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 連線至 Hyperledger Fabric 資源
<a name="blockchain-hyperledger-connecting"></a>

在您使用範本建立的根堆疊顯示 **CREATE\$1COMPLETE** 之後，您就可以連線到 EC2 執行個體上的 Hyperledger Fabric 資源。如果指定了公有子網路，則可以像連接到任何其他 EC2 執行個體一樣地連接到 EC2 執行個體。如需詳細資訊，請參閱《*Amazon EC2 使用者指南》中的*[使用 SSH 連線至 Linux 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html)。

如果您指定了私有子網路，則可以設定並使用*堡壘主機*來代理與 Hyperledger Fabric 資源的連線。如需詳細資訊，請參閱下面的[使用堡壘主機的代理連線](blockchain-templates-ethereum.md#ethereum-create-bastion-host)。

**注意**  
您可能會注意到範本會將公有 IP 地址配置給託管 Hyperledger Fabric 服務的 EC2 執行個體；不過，此 IP 地址無法公開存取，因為您指定的私有子網路中的路由政策不允許此 IP 地址與公有來源之間的流量。

### 使用堡壘主機的代理連線
<a name="hyperledger-create-bastion-host"></a>

在某些組態中，Hyperledger Fabric 服務可能無法公開使用。在這些情況下，您可以透過*堡壘主機*連線到 Hyperledger Fabric 資源。如需堡壘主機的詳細資訊，請參閱《[Linux 堡壘主機快速入門指南》中的 Linux 堡壘主機架構](https://docs.aws.amazon.com/quickstart/latest/linux-bastion/architecture.html)。 **

堡壘主機是 EC2 執行個體。請確定符合下列要求：
+ 堡壘主機的 EC2 執行個體位於已啟用自動指派公有 IP 且具有網際網路閘道的公有子網路內。
+ 堡壘主機具有允許 SSH 連線的金鑰對。
+ 堡壘主機與安全群組相關聯，該安全群組允許來自連線用戶端的傳入 SSH 流量。
+ 指派給 Hyperledger Fabric 主機的安全群組 （例如，如果 ECS 是容器平台，則為 Application Load Balancer，如果 docker-local 是容器平台，則為主機 EC2 執行個體） 允許來自 VPC 內來源的所有連接埠上的傳入流量。

設定堡壘主機後，請確定連線的用戶端使用堡壘主機做為代理。下列範例示範使用 Mac OS 設定代理連線。以堡壘主機 EC2 執行個體的 IP 地址取代 *BastionIP*，並以您複製至堡壘主機的金鑰對檔案取代 *MySshKey.pem*。

在命令列上，輸入下列內容：

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

這會為本機電腦上的連接埠 9001 設定連接埠轉送至堡壘主機。

接著，將您的瀏覽器或系統設定為使用 的 SOCKS 代理`localhost:9001`。例如，使用 Mac OS，選取 **System Preferences (系統偏好設定)**、**Network (網路)**、**Advanced (進階)**，選取 **SOCKS proxy (SOCKS 代理)**，然後輸入 **localhost:9001**。

在 Chrome 上使用 FoxyProxy Standard，請選取 **More Tools (更多工具)**、**Extensions (擴充功能)**。在 **FoxyProxy Standard** 下方選取 **Details (詳細資訊)**、**Extension options (擴充功能選項)**、**Add New Proxy (新增代理)**。選取 **Manual Proxy Configuration (手動代理組態)**。在 **Host or IP Address (主機或 IP 地址)** 中輸入 **localhost**，在 **Port (連接埠)** 中輸入 **9001**。選取 **SOCKS Proxy? (SOCKS 代理？)**、**Save (儲存)**。

您現在應該能夠連線到範本輸出中列出的 Hyperledger Fabric 主機地址。