首页 > 解决方案 > 从 Hyperledger 模板创建 CloudFormation 堆栈时 CREATE_FAILED

问题描述

我正在使用这个模板来创建堆栈:

https://aws-blockchain-templates-us-east-1.s3.us-east-1.amazonaws.com/hyperledger/fabric/templates/simplenetwork/latest/hyperledger.template.yaml

在关注 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。

标签: amazon-web-servicesamazon-cloudformationhyperledger-fabric

解决方案


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 是 -

  1. 用于 us-east-1 的 ami-1853ac65
  2. us-east-2 的 ami-25615740
  3. 用于 us-west-2 的 ami-dff017b8

Docker 映像存储库 -

  1. 354658284331 for us-east-1
  2. 763976151875 for us-east-2
  3. 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)


推荐阅读