Я использую boto
в Python для автоматизации некоторых моих рабочих процессов EC2.
Проблема очень странная - кажется, что скрипт останавливается при назначении простой переменной, но он продолжается вфон.В конце концов сценарий выводит все на печать.
Когда я повторяю сценарий построчно в iPython, нет проблем, нет зависания или ожидания (кроме того, что вы ожидаете при разговоре с AWS).Кажется, что вывод просто зависает, когда я запускаю его как скрипт Python, пока скрипт не будет завершен.
Сценарий:
def deploy_web_db_ami(a_key, a_pri, db_vol_id, db_vol_zone, db_vol_mnt):
'''deploys a fresh instance for using as the web / db server.
'''
#Connect to the EC2
print "Connecting to AWS"
conn = EC2Connection(a_key, a_pri)
# get a ref to the image we want to install
print "Searching for desired AMI image"
image = conn.get_all_images(image_ids='ami-fd589594')
print "Spinning up instance. . ."
# Launch the image using our desired settings.
reservation = image[0].run(key_name='my_kp',
security_groups=['ssh'],
instance_type='t1.micro)
print("we get this far before output freezes")
ins = reservation.instances[0]
print "Waiting for instance to move from pending to running. ",
while (ins.state.lower() == u'pending'):
print ". ",
ins.update()
time.sleep(5)
time.sleep(5) # in case ssh is not up yet
print "Instance %s's state changed to: %s" (ins.id, ins.state)
if ins.state.lower() == u'running':
# instance is up and running
# Attach the db EBS volume
print "Attaching DB EBS volume."
conn.attach_volume(db_vol_id, ins.id, db_vol_mnt)
p_dns = ins.dns_name
else:
print "ERROR - INSTANCE NOT RUNNING.:: %s" % ins.state
print "All done!"
return (ins.id, p_dns)
def total_web_deploy():
deploy_web_db_ami('xxx', 'xxx', 'the id', 'the zone', '/mnt/sdf')
some_other_functions(). ..
Я запускаю скрипт из командной строки, используяfab total_web_deploy
Вывод будет выглядеть следующим образом:
Connecting to AWS
Search for desired AMI image
Spinning up instance. . .
we get this far before output freezes
Затем нам придется дождаться завершения экземпляра и всего, прежде чем распечатать остальную часть сценария.Это явно работает в фоновом режиме, хотя.
Waiting for instance to move from pending to running. . . . . . . . . . . Instance i-95c389f6's state changed to: running
Attaching DB EBS volume.
All done!
Есть идеи?
РЕДАКТИРОВАТЬ Я прояснил вопрос.