【问题标题】:Can we find root volume of an AWS instance in boto3?我们可以在 boto3 中找到 AWS 实例的根卷吗?
【发布时间】:2021-12-16 20:14:56
【问题描述】:

我需要在 boto3 中找到我的 EC2 实例的根卷的卷 ID

我尝试通过describe_volumes 获取卷,但没有根卷的标识符

【问题讨论】:

    标签: amazon-ec2 boto3


    【解决方案1】:

    您可以使用aws ec2 describe-instances 查看附加的磁盘。这些卷将出现在BlockDeviceMappings 部分:

                        "BlockDeviceMappings": [
                            {
                                "DeviceName": "/dev/xvda",
                                "Ebs": {
                                    "AttachTime": "2016-01-24T06:46:06+00:00",
                                    "DeleteOnTermination": true,
                                    "Status": "attached",
                                    "VolumeId": "vol-686feca2"
                                }
                            }
                        ],
    

    【讨论】:

      【解决方案2】:

      如果卷的DeviceName 与实例的root_device_name 匹配,则该卷就是根卷。

      import boto3
      session=boto3.session.Session()
      ec2=session.resource('ec2')
      instance_iterator = ec2.instances.all()
      for instance in instance_iterator:
          print(instance.id)
          for device in instance.block_device_mappings:
              if device['DeviceName']==instance.root_device_name:
                  print("The root volume is ", device['Ebs']['VolumeId'])
              else:
                  print("The additional ebs volume is", device['Ebs']['VolumeId'])
      

      【讨论】:

        【解决方案3】:

        根卷没有标识符

        最可能的原因是该卷未附加到任何实例

        默认调用describe-volumes 会返回所有卷。如果一个卷附加到一个实例,它会反映在它的输出中。如果未附加该卷,则实例上没有关于其 AttachmentsDevice 名称的信息。

        要仅列出附加的卷,您可以使用filter

        aws ec2 describe-volumes \
            --filters Name=attachment.status,Values=attached
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-31
          • 2018-06-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多