

Amazon Web Services Blockchain Templates 已于 2019 年 4 月 30 日停产。不会对本服务或本支持文档进行进一步更新。为了获得最佳的托管区块链体验 AWS，我们建议您使用[亚马逊托管区块链 (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 的 Amazon Web Services Blockchain Templates
<a name="blockchain-templates-hyperledger"></a>

Hyperledger Fabric 是一个区块链框架，它运行使用 Go 编写的智能合同 (名为chaincode)。您可以利用 Hyperledger Fabric 创建私有网络，限制可以连入并参与该网络的对等方。有关 Hyperledger Fabric 的更多信息，请参阅 [Hyperledger Fabric](https://hyperledger-fabric.readthedocs.io/en/release-1.1/) 文档。有关 chaincode 的更多信息，请参阅 [Hyperledger Fabric](https://hyperledger-fabric.readthedocs.io/en/release-1.1/)中的[开发者 Chaincode](https://hyperledger-fabric.readthedocs.io/en/release-1.1/chaincode4ade.html)主题。

AWS Blockchain Template for Hyperledger Fabric 仅支持一个 *docker-local*容器平台，这意味着 Hyperledger Fabric 容器部署在单个 EC2 实例上。

## 启动链接
<a name="blockchain-hyperledger-launch"></a>

有关[使用 Hyperledger Fabric 模板 CloudFormation 在特定区域启动的链接，请参阅 AWS Blockchain 模板入](https://aws.amazon.com/blockchain/templates/getting-started/)门。

## 适用于 Hyperledger Fabric 组件的 Amazon Web Services Blockchain Templates
<a name="blockchain-hyperledger-architecture"></a>

AWS Blockchain Template for Hyperledger Fabric 使用 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_cn/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 地址的私有子网，这样才能访问 Amazon S3 和 Amazon ECR。 CloudFormation
+ 您必须具有一个包含入站规则的 EC2 安全组，以允许来自需要使用 SSH 连接到实例的 IP 地址的 SSH 流量（端口 22），对需要连接到 Hyperledger Explorer 的客户端（端口 8080）同样适用。

### EC2 实例配置文件的示例 &IAM; 权限
<a name="blockchain-hyperledger-ec2profile"></a>

您在使用 AWS Blockchain Template for Hyperledger Fabric 模板时需指定 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 Resources
<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)。

**注意**  
您可能会注意到，模板为托管 Hyperledger Fabric 服务的 EC2 实例分配了公有 IP 地址；但是，该 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 是容器平台，则分配给应用程序负载均衡器；如果 docker-local 是容器平台，则分配给主机 EC2 实例）允许 VPC 内的所有端口上的入站流量。

设置堡垒主机后，请确保连接的客户端使用堡垒主机作为代理。以下示例演示了如何使用 Mac OS 设置代理连接。*BastionIP*替换为堡垒主机 EC2 实例的 IP 地址和*MySshKey.pem*您复制到堡垒主机的 key pair 文件。

在命令行键入以下内容：

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

这将为本地计算机上的端口 9001 设置至堡垒主机的端口转发。

接下来，将您的浏览器或系统设置为使用适用于`localhost:9001` 的 SOCKS 代理。例如，使用 Mac OS，选择 **System Preferences (系统首选项)**、**Network (网络)**、**Advanced (高级)**，再选择 **SOCKS proxy (SOCKS 代理)**，然后键入 **localhost:9001**。

在 Chrome 中使用 FoxyProxy 标准版，选择 “**更多工具**”、“**扩展程序**”。在 “**FoxyProxy 标准**” 下，选择 “**详细信息**”、“**扩展选项**”、“**添加新代理**”。选择 **Manual Proxy Configuration (手动代理配置)**。对于 **Host or IP Address (主机或 IP 地址)**，键入 **localhost**，对于 **Port (端口)**，键入 **9001**。选择 **SOCKS Proxy? (SOCKS 代理?)**、**Save (保存)**。

您现在应能连接到模板输出中列出的 Hyperledger Fabric 主机地址。