如何为从b转过来的ec2实例启用DeleteOnTermination

2024-09-27 00:20:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我想启动一个ec2实例,然后终止它,并确保在实例终止时EBS存储也被删除,所以我需要设置deleteonternation标志。 我用boto试过了:

conn = boto.ec2.connect_to_region('us-east',\
    aws_access_key_id=os.getenv('aws_access_key_id'),\
    aws_secret_access_key=os.getenv('aws_secret_access_key'))

groups = conn.get_all_security_groups(filters={'group-name': ['xxx']})

reservation = conn.run_instances(
    ami,
    key_name=os.getenv('key_name'),
    instance_type=instance_type,
    security_groups=groups)

tag = os.getenv('BUILD_NUMBER', None)
instance = reservation.instances[0]
# Note: setting boto.ec2.blockdevicemapping.BlockDeviceType().delete_on_termination = True
# does not help.
instance.modify_attribute('blockDeviceMapping', ['/dev/sda1=1'])

上面代码的最后一行是我使用的技巧。它适用于某些实例,但对于我要使用的实例,我遇到以下错误:

^{pr2}$

有什么办法实现我所描述的吗。在

更新: 我跑了:

conn.get_instance_attribute(instance_id=instance.id, attribute='blockDeviceMapping')['blockDeviceMapping']
{u'/dev/sda1': <boto.ec2.blockdevicemapping.BlockDeviceType object at 0x2a62190>}

所以这个闭塞装置是正确的。在


Tags: 实例instancekeynameawsidaccessos
1条回答
网友
1楼 · 发布于 2024-09-27 00:20:16

我知道了,想和大家分享一下:

from boto.ec2.blockdevicemapping import BlockDeviceType, BlockDeviceMapping

def set_ebs_termination(conn, instance_id, attempts=15):
    """
    @conn: ec2 connection
    @instance_id: string
    """
    for iter in range(attempts):
        block = conn.get_instance_attribute(instance_id=instance_id,\
            attribute='blockDeviceMapping')['blockDeviceMapping']

        if '/dev/sda1' in block and\
            (block['/dev/sda1']).status == 'attached':
            break
        logging.info('Waiting for the EBS to get attached.')
        time.sleep(30)

    if (block['/dev/sda1']).status != 'attached':
        raise Exception('The EBS was not attached'\
            'after {} iterations.'.format(attempts))
    logging.info('Setting the block device termination.')
    bdm = BlockDeviceMapping()
    bdm['/dev/sda1'] = BlockDeviceType(delete_on_termination=True)
    conn.modify_instance_attribute(instance_id, "BlockDeviceMapping", bdm)

相关问题 更多 >

    热门问题