Я хочу развернуть экземпляр ec2, а затем завершить его и убедиться, что хранилище EBS также удалено после завершения экземпляра, поэтому мне нужно установить флаг DeleteOnTermination , Я попытался это с помощью Boto:Как включить DeleteOnTermination для экземпляра ec2, спрятанного от 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'])
Последняя строка кода выше является трюк, который я использовал. Он работал в некоторых случаях, но для экземпляра, который я хочу использовать, я получаю эту ошибку:
Traceback (most recent call last):
File "ec2_api.py", line 173, in <module>
instance_id, ip_address = spinup_instance(params.ami, params.type)
File "ec2_api.py", line 83, in spinup_instance
instance.modify_attribute('blockDeviceMapping', ['/dev/sda1=1'])
File "/home/x/python2.7/site-packages/boto/ec2/instance.py", line 557, in modify_attribute
dry_run=dry_run
File "/home/x/python2.7/site-packages/boto/ec2/connection.py", line 1274, in modify_instance_attribute
return self.get_status('ModifyInstanceAttribute', params, verb='POST')
File "/home/x/python2.7/site-packages/boto/connection.py", line 1227, in get_status
raise self.ResponseError(response.status, response.reason, body)
boto.exception.EC2ResponseError: EC2ResponseError: 400 Bad Request
<?xml version="1.0" encoding="UTF-8"?>
<Response><Errors><Error><Code>InvalidInstanceAttributeValue</Code><Message>No device is currently mapped at /dev/sda1</Message></Error></Errors><RequestID>xxx</RequestID></Response>
Любые идеи, как добиться того, что я описал.
Update: Я побежал:
conn.get_instance_attribute(instance_id=instance.id, attribute='blockDeviceMapping')['blockDeviceMapping']
{u'/dev/sda1': <boto.ec2.blockdevicemapping.BlockDeviceType object at 0x2a62190>}
так блочное устройство правильно.
Похоже блочное устройство не на/DEV/sda1, что это показывает, когда список из сопоставления блоков устройств? – AChampion
@AChampion Я проверил как обновлено выше. Блочное устройство является правильным. – max