Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python CLI命令的boto解释_Python_Amazon Web Services_Boto - Fatal编程技术网

Python CLI命令的boto解释

Python CLI命令的boto解释,python,amazon-web-services,boto,Python,Amazon Web Services,Boto,下面的Boto代码向我打印不希望看到的输出,我希望看到的是我的EBS卷状态,而不是装载点的状态 EC2保留结构: object {1} Reservations [1] Instances[1] BlockDeviceMappings[2] DiviceName Ebs{4} Status DeleteOnTermination VolumeId AttachT

下面的Boto代码向我打印不希望看到的输出,我希望看到的是我的EBS卷状态,而不是装载点的状态

EC2保留结构:

object {1}
  Reservations [1]
    Instances[1]
      BlockDeviceMappings[2]
        DiviceName
        Ebs{4}
          Status
          DeleteOnTermination
          VolumeId
          AttachTime 

reservations = ec2Conn.get_all_instances(instance_ids=[my_id])
for reservation in reservations:
    for instance in reservation.instances:
        for BlockDeviceMappings in instance.block_device_mapping:
           print(BlockDeviceMappings)
打印我:

/dev/sdf
/dev/sda1
以下AWS CLI命令将向我打印正确的状态:

aws ec2 describe-instances --instance myinstance-id --query Reservations[*].Instances[*].BlockDeviceMappings[*].{Ebs:Ebs.{s:Status}}

如果您查看
raw
响应,则它看起来类似于:

            <blockDeviceMapping>
                <item>
                    <deviceName>/dev/sda1</deviceName>
                    <ebs>
                        <volumeId>vol-xxxxxxxxxx</volumeId>
                        <status>attached</status>
                        <attachTime>2014-04-01T02:23:54.000Z</attachTime>
                        <deleteOnTermination>true</deleteOnTermination>
                    </ebs>
                </item>
                <item>
                    <deviceName>/dev/sdb</deviceName>
                    <ebs>
                        <volumeId>vol-xxxxxxx</volumeId>
                        <status>attached</status>
                        <attachTime>2014-04-01T02:23:54.000Z</attachTime>
                        <deleteOnTermination>false</deleteOnTermination>
                    </ebs>
                </item>
            </blockDeviceMapping>
或者使用Boto3 如果您的目标是使EBS状态“看起来”非常接近aws cli,则可以使用
boto3

>>> import boto3
>>> boto3.client('ec2')
>>> c.describe_instances(InstanceIds=['i-xxxxxx'])['Reservations'][0]['Instances'][0]['BlockDeviceMappings'][0]['Ebs']['Status']
'attached'

此代码段将为您提供实例id、卷id及其当前状态。使用挂载点还可以获得一个boto.ec2.blockdevicemapping对象,使用该对象可以访问其属性,如下例所示。希望能有帮助

from boto.regioninfo import *
from boto.ec2.connection import EC2Connection

# AWS connect info
aws_access_key_id='########## AWS Access Key ############'
aws_secret_access_key='########### AWS Secret Key ############'
region_name='ap-southeast-1'
region_ec2_endpoint='ec2.ap-southeast-1.amazonaws.com'

# Connect EC2
aws_region = RegionInfo(name=region_name, endpoint=region_endpoint)
conn = EC2Connection(aws_access_key_id,aws_secret_access_key,region=aws_region)

reservations = conn.get_all_instances(instance_ids=[my_ids])
for each in reservations:
    for vol in each.instances[0].block_device_mapping.items():
        print str(each.instances[0].id) + " " +  vol[1].volume_id + " "+   vol[1].status
使用CLI的其他一些类似于此的用例

response = json.loads(subprocess.check_output(
     ['aws', 'ec2', 'describe-volumes', '--volume-ids', Volume_ID, '--query',
     'Volumes[*].{AZ:AvailabilityZone, size:Size, Device:Attachments[*].{Device:Device}}']))

Volume_AZ = response[0]['AZ']
Volume_Mount_Point = response[0]['Device'][0]['Device']
Volume_size = response[0]['size']

回溯(最近一次调用):文件“/tmp/snapshotStatus.py”,第22行,打印(ec2Conn.get_all_实例(实例id=[my_id])[0]['Reservations'][0]['instances'][0])类型错误:“Reservation”对象在实例中没有BlockDeviceMappings.items()的属性“getitem”。(u'/dev/sdf',)(u'/dev/sda1',)
response = json.loads(subprocess.check_output(
     ['aws', 'ec2', 'describe-volumes', '--volume-ids', Volume_ID, '--query',
     'Volumes[*].{AZ:AvailabilityZone, size:Size, Device:Attachments[*].{Device:Device}}']))

Volume_AZ = response[0]['AZ']
Volume_Mount_Point = response[0]['Device'][0]['Device']
Volume_size = response[0]['size']