0

我有一个 cloudformation 堆栈,在其中创建具有 2 个 EBS 卷、1 个主/根和 1 个具有大量测试数据的实例。附加测试数据的唯一原因是在堆栈创建后开始将数据加载到 hadoop 中。在那之后,我没有必要保持附加 EBS 数量并为此付费。但是如果我手动删除它或使用boto3库,如果我稍后尝试更新或删除它会导致cloudformation堆栈出现问题吗?就像删除失败是因为它找不到资源,或者如果我尝试使用新标签更新堆栈,它会失败,因为它发现资源丢失。任何指导表示赞赏。

更新:似乎 cloudformation 没有在堆栈资源中为我的卷创建资源,因为我在那里看不到它。但是,当我单击实例时,它有 /dev/sda1 用于块设备,当我将鼠标悬停在它上面时,它会显示我在 cloudformation 中创建它的卷的 EBS ID。

我的cloudformation模板:

  ###################
  ### Master node ###
  ###################
  MasterNode:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !FindInMap [RegionMap, !Ref "AWS::Region", ami]
      InstanceType: r3.large
      KeyName: !FindInMap [RegionMap, !Ref "AWS::Region", key]
      SubnetId: !FindInMap [RegionMap, !Ref "AWS::Region", subnet]
      IamInstanceProfile: !Ref MasterNodeProfile
      SecurityGroupIds:
      - !Ref SecurityGroup
      - !Ref InternalSecurityGroup
      Tags:
      -
        Key: Name
        Value: Master for XYZ
      BlockDeviceMappings:
      - DeviceName: /dev/sda1
        Ebs:
          VolumeSize: 20
          DeleteOnTermination: True
          VolumeType: gp2
      UserData:
        Fn::Base64: !Sub |
           #!/bin/bash -xe
           yum install epel-release -y
           yum install python-pip -y
           pip install awscli
4

2 回答 2

2

您可以尝试使用BlockDeviceMappingsEC2 属性来定义卷。首先,你想有两个卷,你可以添加这些代码。

"BlockDeviceMappings": [
                {
                    "DeviceName": "/dev/sd1",
                    "Ebs": {
                        "VolumeSize": "50",
                        "DeleteOnTermination": true
                    }
                }
            ]

您只需再添加一个,因为创建 EC2 实例时会自动创建根。然后,如果要删除它,请删除该部分(上面的代码),然后更新实例。它将删除第二个卷 (/dev/sd1)。

于 2017-10-24T01:47:58.430 回答
1

不要手动删除它,而是更新将删除资源的堆栈。如果您手动删除它而不更新堆栈,您的堆栈更新/删除将失败。

来自:我手动删除了由 CloudFormation 创建的资源。我的堆栈更新现在失败了——我该如何解决这个问题?

如果某个资源因为不再需要而被删除,并且您想将其从堆栈中删除,请从模板中删除该资源以及对它的任何引用,然后执行堆栈更新。

于 2017-10-23T22:23:53.653 回答