Amazon web services 从Hyperledger模板创建CloudFormation堆栈时,创建\u失败
我正在使用此模板创建堆栈: 在关注AWS的这篇博文时,我发现了一个错误 博客-帖子链接: 地区:美国东部1 错误消息: 无法创建以下资源:[FabricEC2CommonStack]。用户请求的回滚。 创建失败AWS::CloudFormation::Stack FabricEC2CommonStack嵌入堆栈arn:AWS:CloudFormation:us-east-1:>:Stack/FabricStack-FabricEC2CommonStack-NNFUD6RJCZB1/未成功创建:以下资源创建失败:[EC2InstanceForDev] 我满足了所有的先决条件 这一错误的原因是什么?如何纠正Amazon web services 从Hyperledger模板创建CloudFormation堆栈时,创建\u失败,amazon-web-services,amazon-cloudformation,hyperledger-fabric,Amazon Web Services,Amazon Cloudformation,Hyperledger Fabric,我正在使用此模板创建堆栈: 在关注AWS的这篇博文时,我发现了一个错误 博客-帖子链接: 地区:美国东部1 错误消息: 无法创建以下资源:[FabricEC2CommonStack]。用户请求的回滚。 创建失败AWS::CloudFormation::Stack FabricEC2CommonStack嵌入堆栈arn:AWS:CloudFormation:us-east-1:>:Stack/FabricStack-FabricEC2CommonStack-NNFUD6RJCZB1/未成功创建:以
在此之后,我将进行回滚并完成回滚。您应该检查您的IAM角色,它解决了我的问题。Hyperledger Fabric的官方AWS区块链云形成模板是一个嵌套模板,我们的基础模板调用另一个模板,该模板在自己创建的EC2实例上执行所有设置 但问题是,除了安装docker compose之外,它在EC2实例上执行所有操作&它抛出一个错误,即docker compose命令在末尾未找到,这导致CloudFormation模板中断EC2INSTANCEFORDEV并执行回滚。因此,我们可以在EC2实例上手动运行相同的脚本,而不必使用CloudFormation模板,只需稍作更改。改变是预先安装docker compose。Rest设置保持不变,即-1。创建一个VPC,2。创建公共子网,3。如果以后要附加EIP,请创建EIP,4。创建SSH的密钥对,5。创建IAM角色和策略,6。使用入站8080TCP和22SSH创建安全组,7。使用步骤1到6中创建的资源启动EC2实例 优先选择的AMI是- ami-1853ac65适用于美国东部-1 美国东部2号ami-25615740 美国西部2号ami-dff017b8 Docker映像存储库- 354658284331适用于us-east-1 763976151875用于美国东部-2 712425161857适用于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模板中输入的根域、Org1SubDomain、Org2SubDomain、Org3SubDomain和ChannelName相同
整个过程在美国东部地区进行了测试。该脚本可以直接部署在us-east-1地区。访问Hyperledger web监视器界面的步骤http://EC2-DNS 或者EIP:8080您应该能够在CloudFormation控制台中查看事件部分中的错误输出。我检查了事件…只有在那里我发布了错误消息。谢谢Vallu。我的用户拥有管理员访问策略,允许一切。还有我正在使用的角色是否EC2ToECRandS3具有以下JSON:Effect:Allow,Action:[ecr:GetAuthorizationToken,ecr:BatchCheckLayerAvailability,ecr:GetDownloadUrlForLayer,ecr:GetRepositoryPolicy,ecr:DescribePositories,ecr:ListImages,ecr:DescribeImages,ecr:BatchGetImage,s3:Get*,s3:List*],参考资料:*这个问题得到深入解决了吗?我得到了相同的错误-不确定为什么?