Бото-скрипт зависает при попытке развернуть и настроить экземпляры EC2 - PullRequest
2 голосов
/ 24 ноября 2011

Я использую 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!

Есть идеи?

РЕДАКТИРОВАТЬ Я прояснил вопрос.

1 Ответ

2 голосов
/ 29 ноября 2011

Возможно, ваш вывод буферизируется.

Попробуйте написать напрямую в stderr, чтобы исключить это:

import sys
sys.stderr.write("Equivalent message here\n")

Или:

import sys
sys.stdout.write("Equivalent message here\n")
sys.stdout.flush()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...