Amazon Web Services Blockchain Templates 已于 2019 年 4 月 30 日停产。不会对本服务或本支持文档进行进一步更新。为了获得最佳的托管区块链体验 AWS,我们建议您使用亚马逊托管区块链 (AMB)
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用适用于 Ethereum 的 Amazon Web Services Blockchain Templates
Ethereum 是一个区块链框架,它使用Ethereum 特定的语言 Solidity 来运行智能合同。Homestead 是 Ethereum 的最新版本。有关更多信息,请参阅 Ethereum Homestead 文档
启动链接
请参阅 AWS Blockchain Templates 入门
Ethereum 选项
如果您使用模板配置 Ethereum 网络,您做出的选择将决定后续要求:
选择容器平台
AWS Blockchain Templates 使用 Amazon ECR 中存储的 Docker 容器部署区块链软件。AWS Blockchain Templates 提供两种备选容器平台:
ecs —指定 Ethereum 在 Amazon EC2 实例的 Amazon ECS 集群上运行。
docker-local—指定 Ethereum 在单个 EC2 实例上运行。
使用 Amazon ECS 容器平台
通过使用 Amazon ECS,您可以在包含多个 EC2 实例的 ECS 集群上创建 Ethereum 网络,并具有应用程序负载均衡器和相关的资源。有关使用 Amazon ECS 配置的更多信息,请参阅 Amazon Web Services Blockchain Templates 入门 教程。
下图描述了使用 ECS 容器平台选项通过模板创建的 Ethereum 网络:
![AWS diagram showing VPC with public and private subnets, load balancers, and Ethereum nodes in ECS containers.](images/ethereum-ecs-arch.png)
使用 Docker-Local 平台
您也可以在单独的 Amazon EC2 实例中启动 Ethereum 容器。所有容器都在单个 EC2 实例上运行。这是简化的设置。
下图描述了使用 docker-local 容器平台选项通过模板创建的 Ethereum 网络:
![Diagram of Ethereum network on AWS with VPC, EC2 instance, containers, and ECR registry.](images/ethereum-docker-local-arch.png)
选择私有或公有 Ethereum 网络
选择 1–4 以外的 Ethereum Network ID (Ethereum 网络 ID) 值,可在您定义的网络中,使用您指定的私有网络参数创建私有 Ethereum 节点。
如果您选择 1-4 之间的值作为 Ethereum Network ID (Ethereum 网络 ID),您创建的 Ethereum 节点会加入公有 Ethereum 网络。您可以忽略私有网络设置及其默认值。如果您选择将 Ethereum 节点加入公有 Ethereum 网络,请确保您的网络中的相应服务可通过 Internet 访问。
更改默认账户和助记词
助记词是一组随机单词,可用于为任何网络上的关联账户生成 Ethereum 包(即,私有密钥/公有密钥对)。助记词可用于访问关联账户的 Ether。我们创建了一个默认助记符,它与 Ethereum 模板使用的默认账户相关联。
警告
仅出于测试目的使用默认账户和关联的助记词。请勿使用默认账户集发送真实的 Ether,因为任何有权访问助记词的人都可以从账户中访问或窃取 Ether。相反,应出于生产目的指定自定义账户。与默认账户关联的助记词为 outdoor father modify clever trophy abandon vital feel portion grit evolve twist
。
先决条件
在使用 AWS Blockchain Template 设置 Ethereum 网络时,必须满足下面列出的最低要求。该模板需要使用为每个以下类别列出的 AWS 组件:
访问 Ethereum 资源的先决条件
先决条件 | 对于 ECS 平台 | 对于 Docker-Local |
---|---|---|
用于访问 EC2 实例的 Amazon EC2 密钥对。该密钥必须与 ECS 集群和其他资源同在一个区域中。 |
✔ |
✔ |
具有内部地址的面向 Internet 的组件(例如堡垒主机或面向 Internet 的负载均衡器),允许流量从该地址进入应用程序负载均衡器。ECS 平台需要使用该组件,因为模板创建内部负载均衡器以保护安全。在 EC2 实例位于私有子网时(建议的配置),docker-local 平台需要使用该组件。有关配置堡垒主机的信息,请参阅创建堡垒主机。 |
✔ |
✔ (具有私有子网) |
IAM 的先决条件
先决条件 | 对于 ECS 平台 | 对于 Docker-Local |
---|---|---|
有权使用所有相关服务的 IAM 主体(用户或组)。 |
✔ |
✔ |
Amazon EC2 实例配置文件,其中的权限允许 EC2 实例与其他服务进行交互。有关更多信息,请参阅 To create an EC2 instance profile。 |
✔ |
✔ |
IAM 角色,其权限允许 Amazon ECS 与其他服务进行交互。有关更多信息,请参阅 创建 ECS 角色和权限。 |
✔ |
安全组先决条件
先决条件 | 对于 ECS 平台 | 对于 Docker-Local |
---|---|---|
EC2 实例的安全组需满足以下要求: |
✔ |
✔ |
|
✔ |
✔ |
|
✔ |
✔ |
|
✔ |
|
|
✔ |
|
应用程序负载均衡器的安全组需满足以下要求:
|
✔ |
VPC 先决条件
先决条件 | 对于 ECS 平台 | 对于 Docker-Local |
---|---|---|
弹性 IP 地址,用于访问 Ethereum 服务。 |
✔ |
✔ |
运行 EC2 实例的子网。我们强烈建议使用私有子网。 |
✔ |
✔ |
两个可公开访问的子网。每个子网必须位于彼此不同的可用区中,并且一个子网位于与 EC2 实例的子网相同的可用区中。 |
✔ |
EC2 实例配置文件和 ECS 角色的示例 IAM 权限
您在使用模板时需指定 EC2 实例配置文件 ARN,作为参数之一。如果您使用 ECS 容器平台,还需指定 ECS 角色 ARN。附加到这些角色的权限策略允许集群中的 AWS 资源和实例与其他 AWS 资源进行交互。有关更多信息,请参阅《IAM 用户指南》中的 IAM 角色。使用以下策略语句和过程作为创建权限的起点。
EC2 实例配置文件的示例权限策略
以下权限策略说明了选择 ECS 容器平台的情况下 EC2 实例配置文件允许的操作。Docker-Local 容器平台中也可以使用相同的策略语句,只需移除 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 角色和权限
对于附加到 ECS 角色的权限,我们建议您从 AmazonEC2 ContainerServiceRole 权限策略开始。使用以下过程创建角色并附加此权限策略。使用 IAM 控制台查看此策略中最多的 up-to-date 权限。
创建适用于 Amazon ECS 的 IAM 角色。
-
通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
在导航窗格中,选择 角色 和 创建角色。
-
在 Select type of trusted entity(选择受信任实体的类型)下,选择 Amazon Web Services service(亚马逊云科技服务)。
-
对于 Choose the service that will use this role (选择将使用此角色的服务),选择 Elastic Container Service。
-
在 Select your use case (选择您的使用案例) 下,选择 Elastic Container Service (弹性容器服务) 和 Next:Permissions (下一步: 权限)。
-
对于权限策略,保留默认策略 (AmazonEC2 ContainerServiceRole) 处于选中状态,然后选择 “下一步:查看”。
-
在角色名称中,输入一个可以帮助您识别角色的值,例如 ECS RoleForEthereum。对于 Role Description (角色描述),输入简短摘要。请记下角色名称,以备后用。
-
选择创建角色。
-
从列表中选择您刚刚创建的角色。如果您的账户中包含许多角色,则可搜索角色名称。
-
复制 Role ARN (角色 ARN) 值并保存,以便再次复制。创建 Ethereum 网络时需要此 ARN。
连接到 Ethereum 资源
在使用模板创建的根堆栈显示 CREATE_COMPLETE 后,您可以使用 AWS CloudFormation 控制台连接到 Ethereum 资源。连接方式依赖于您所选的容器平台,即 ECS 或 Docker-Local:
ECS — 根堆栈的 输出 选项卡为应用程序负载均衡器上运行的服务提供链接。出于安全考虑,这些 URL 无法直接访问。要进行连接,您可以设置并使用堡垒主机以作为它们的连接代理。有关更多信息,请参阅下面的 使用堡垒主机的代理连接。
docker-local — 您使用托管 Ethereum 服务的 EC2 实例的 IP 地址进行连接,如下所示。请使用 EC2 控制台查找模板创建的实例的
ec2-IP-address
。EthStats
—使用 http://ec2-IP 地址
EthExplorer
—使用 http://ec2-IP-地址:8080
EthJsonRpc
—使用 http://ec2-IP-地址:8545
如果您为 Ethereum Network Subnet ID (Ethereum 网络子网 ID) 指定了公有子网(模板中的 List of VPC Subnets to use (要使用的 VPC 子网列表)),您可以直接进行连接。您的客户端必须是 SSH 的入站流量 (端口 22) 以及所列端口的可信来源。这是由您使用 Ethereum 的 AWS Blockchain Template 指定的 EC2 安全组决定的。
如果您指定了私有子网,您可以设置并使用堡垒主机以作为到这些地址的连接代理。有关更多信息,请参阅下面的 使用堡垒主机的代理连接。
使用堡垒主机的代理连接
包含某些配置的 Ethereum 服务可能不会公开。在这种情况下,您可以通过堡垒主机连接到 Ethereum 资源。有关堡垒主机的更多信息,请参阅 Linux 堡垒主机快速入门指南中的 Linux 堡垒主机架构。
堡垒主机是 EC2 实例。确保满足以下要求:
堡垒主机的 EC2 实例位于启用了自动分配公有 IP 且具有互联网网关的公有子网内。
堡垒主机拥有允许 ssh 连接的密钥对。
堡垒主机与允许来自连接的客户端的入站 SSH 流量的安全组关联。
分配给 Ethereum 主机的安全组(例如,如果 ECS 是容器平台,则分配给应用程序负载均衡器;如果 docker-local 是容器平台,则分配给主机 EC2 实例)允许 VPC 内的所有端口上的入站流量。
设置堡垒主机后,请确保连接的客户端使用堡垒主机作为代理。以下示例演示了如何使用 Mac OS 设置代理连接。将
B
astionIP 替换为堡垒主机 EC2 实例MySshKey的 IP 地址,将.pem 替换为您复制到堡垒主机的密钥对文件。
在命令行键入以下内容:
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 (保存)。
您现在应能连接到模板输出中列出的 Ethereum 主机地址。