How to Deploy Hyperledger Fabric on AWS with Blockchain Templates.
我正在从本教程中学习https://medium.com/faun/how-to-deploy-hyperledger-fabric-on-aws-with-blockchain-templates-12ff1b219d98
我尝试遵循每一个步骤,但发现他的步骤中缺少了一些东西,我尝试补充缺少的部分,但在创建时仍然出现错误。
我尝试用 Google 搜索,但似乎没有找到太多信息。
想知道是否有人可以给我建议/意见。
我将尝试写出我所做事情的步骤。
我通过启动 VPC 向导创建了一个新的 VPC,并将
VPC with a single public subnet
其命名为BlockChainVPC
我创建了一个新的 EC2 并选择了第一个 AMI
Amazon Linux 2 AMI (HVM), SSD Volume Type
,我将网络配置为使用我在上一步中创建的 VPC ,然后将其他实例详细信息保留为默认设置。至于安全组,我创建了一个名为的新安全组,Hyperledge
其入站规则为 HTTP + HTTPS,可在任何地方访问。至于出站,它对所有流量开放。至于 PEM,我创建了名为blockchainbook
我创建了一个弹性 IP,并将其设置
us-west-2
为网络边界组。我在俄勒冈州 (us-west-2) 创建了 ec2 + vpc。然后,我将这个弹性 IP 与我之前创建的 ec2 关联起来。我创建了另一个安全组,
blockchainbook
以 SSH + 8080 作为入站规则,所有流量为出站。此安全组与新 VPC(blockchainVPC)一起我在 IAM 下创建了一项新策略,名为,我添加了对和的
EC2BC
完全访问权限Elastic Container Registry
以及资源,如下所示Elastic Container Service
S3
all resources
我创建了一个名为的新角色
EC2Blockchain
,aws service
其常见用例是EC2
我将上面创建的策略(EC2BC)附加到这个角色中。我回到步骤 2 中创建的 EC2,然后将
EC2Blockchain
角色附加到它。我从 aws 进入此页面https://aws.amazon.com/blockchain/templates/getting-started/ 并选择
Launch in US West (Oregon) region (us-west-2)
启动 hyperledger fabric,它将我带到 cloudformation,其中包含 hyperledger fabric 的模板 url。至于堆栈名称,我输入了BlockchainStack
。VPC 连接,我选择了BlockChainVPC
在步骤 1 中创建的。子网,我选择了使用创建的子网BlockchainVPC
。EC2 密钥对,我选择了在步骤 2 中使用 ec2 创建的密钥对。安全组,我选择了在步骤 4 中创建的安全组。blockchainbook
至于 EC2 实例配置文件 ARN,我选择了Role ARN
在步骤 6 中创建的角色。最后,我开始创建堆栈,并看到它由于状态而正在进行中
CREATE_IN_PROGRESS
,几分钟后,我看到一个错误Embedded stack arn:aws:cloudformation:us-west-2:234234234:stack/BlockchainStack-FabricEC2CommonStack-1OF23423423/234234234-234234234-234 was not successfully created: The following resource(s) failed to create: [EC2InstanceForDev].
出现错误后,我尝试再次重新创建堆栈,除 EC2 实例配置文件 ARN 之外,所有设置都相同,这次我Instance Profile ARNs
从步骤 6 中创建的角色中进行选择。但错误仍然相同,没有运气。
我还认为可能是我设置的角色权限或安全组有误,因此我甚至尝试将管理策略附加到角色中并将所有流量附加到安全组的入站 + 出站,但仍然没有运气。
有人对此有建议/忠告吗?
在此先感谢您的帮助。
答案1
Hyperledger Fabric 的官方 AWS 区块链云形成模板是一个嵌套模板(我们的基本模板调用另一个模板,该模板在其自身创建的 EC2 实例上完成所有设置)。
但问题是,除了安装 docker-compose 之外,它在 EC2 实例上执行了所有操作,并且它在最后抛出一个错误,即未找到 docker-compose 命令,这导致 CloudFormation 模板中断(EC2InstanceForDev)并进行回滚。因此,我们可以在 EC2 实例上手动运行相同的脚本,只需进行少量更改,而不是使用 CloudFormation 模板。更改是事先安装 docker-compose。其余设置保持不变,即 --1. 创建 VPC,2. 创建公共子网,3. 如果想要稍后连接,请创建 EIP,4. 为 SSH 创建密钥对,5. 创建 IAM 角色和策略,6. 使用入站 8080(TCP)和 22(SSH)创建安全组,7. 使用步骤(1 到 6)中创建的资源启动 EC2 实例。
首选的 AMI 是 -
- ami-1853ac65 代表 us-east-1
- ami-25615740 代表 us-east-2
- ami-dff017b8 代表 us-west-2
Docker 镜像仓库 -
- 354658284331 代表 us-east-1
- 763976151875 代表 us-east-2
- 712425161857 适用于美国西部-2
在 EC2 上运行的脚本(为脚本提供 chmod 777 和 chmod +x)-
#!/bin/bash -x
sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
res=$?
echo $res
mkdir /tmp/fabric-install/
cd /tmp/fabric-install/
wget https://aws-blockchain-templates-us-east-1.s3.us-east-1.amazonaws.com/hyperledger/fabric/templates/simplenetwork/latest/HyperLedger-BasicNetwork.tgz -O /home/ec2-user/HyperLedger-BasicNetwork.tgz
cd /home/ec2-user
tar xzvf HyperLedger-BasicNetwork.tgz
rm /home/ec2-user/HyperLedger-BasicNetwork.tgz
chown -R ec2-user:ec2-user HyperLedger-BasicNetwork
chmod +x /home/ec2-user/HyperLedger-BasicNetwork/artifacts/first-run-standalone.sh
/home/ec2-user/HyperLedger-BasicNetwork/artifacts/first-run-standalone.sh us-east-1 example.com org1 org2 org3 mychannel 354658284331.dkr.ecr.us-east-1.amazonaws.com/ 354658284331
res=$?
echo $res
我附加到角色的 IAM 策略 -
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:GetRepositoryPolicy",
"ecr:DescribeRepositories",
"ecr:ListImages",
"ecr:DescribeImages",
"ecr:BatchGetImage"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": "*"
}
]
}
笔记- 请将上述脚本中的相应 AWS ECR 帐号和相应 AWS 区域替换为 (example.com org1 org2 org3 mychannel),请根据需要更改此项。它与我们在 CF 模板中输入的 RootDomain、Org1SubDomain、Org2SubDomain、Org3SubDomain、ChannelName 相同。
整个过程在 us-east-1 区域进行了测试。脚本可以直接部署在 us-east-1 区域。要访问 Hyperledger 网页监控界面 ( http://EC2-DNS OR EIP:8080
)