amazon-web-services - 从 Hyperledger 模板创建 CloudFormation 堆栈时 CREATE_FAILED
问题描述
我正在使用这个模板来创建堆栈:
在关注 AWS 的这篇博文时,我遇到了一个错误。
博客 - 帖子链接:
https://aws.amazon.com/blockchain/templates/getting-started/
地区:us-east-1
错误信息 :
未能创建以下资源:[FabricEC2CommonStack]。. 用户请求回滚。CREATE_FAILED AWS::CloudFormation::Stack FabricEC2CommonStack 嵌入式堆栈 arn:aws:cloudformation:us-east-1:>:stack/FabricStack-FabricEC2CommonStack-NNFUD6RJCZB1/<> 未成功创建:以下资源未能创建: [EC2InstanceForDev]。
我已满足所有先决条件。
此错误的原因可能是什么以及如何纠正它?
在此之后,我得到 ROLLBACK_IN_PROGRESS 和 ROLLBACK_COMPLETE。
解决方案
Hyperledger Fabric 的官方 AWS 区块链云形成模板是一个嵌套模板(我们的基本模板调用另一个模板,该模板在自己创建的 EC2 实例上执行所有设置)。
但问题是它在 EC2-Instance 上执行所有操作,除了安装 docker-compose 并且它会抛出一个错误,即最后找不到 docker-compose 命令,这会导致 CloudFormation 模板中断(EC2InstanceForDev)并进行回滚。因此,我们可以在 EC2 实例上手动运行相同的脚本,而不是使用 CloudFormation 模板,只需稍作改动。变化是预先安装 docker-compose。其余设置保持不变,即 -- 1. 创建 VPC,2. 创建公共子网,3. 如果您想稍后附加它,请创建 EIP,4. 为 SSH 创建密钥对,5. 创建 IAM 角色和策略,6 . 使用入站 8080(TCP) 和 22(SSH) 创建安全组, 7. 使用步骤 (1to6) 中创建的资源启动 EC2 实例。
首选的 AMI 是 -
- 用于 us-east-1 的 ami-1853ac65
- us-east-2 的 ami-25615740
- 用于 us-west-2 的 ami-dff017b8
Docker 映像存储库 -
- 354658284331 for us-east-1
- 763976151875 for us-east-2
- 712425161857 for us-west-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 区域的相应 AWS ECR 帐号(example.com org1 org2 org3 mychannel),也请根据需要更改此编号。它与我们在 CF 模板中输入的 RootDomain、Org1SubDomain、Org2SubDomain、Org3SubDomain、ChannelName 相同)。
整个过程在 us-east-1 区域进行了测试。该脚本可以直接部署在 us-east-1 区域。访问 Hyperledger Web 监控界面 ( http://EC2-DNS OR EIP:8080
)
推荐阅读
- laravel - 使用 for loop laravel 在控制器中创建公共函数
- c# - 输入移位次数后显示当前位置的螺旋矩阵
- reactjs - 从 flatlist 获取索引 react native
- python - 打印出现次数最多的项目作为输出。如果没有明确的获胜者,请打印“NOTA”
- excel - 使用一般信息创建数据集
- python - 如何使用其他 pip 包正确扩展基本 odoo docker 映像?
- c# - 在对象列表中分组并修改
- tensorflow - 如何从 Pandas DataFrame 转到用于 NLP 的 Tensorflow BatchDataset?
- flutter - 如何在 Flutter 中使用 restful 调用验证 textformfield 中的值?
- r - 将多个参数传递给应用中的函数