EC2インスタンスをデプロイして設定しようとすると、Botoスクリプトがフリーズする

私はPythonで boto を使ってEC2ワークフローの一部を自動化しています。

この問題は非常に奇妙です。単純な変数の代入でスクリプトがフリーズしているように見えますが、バックグラウンドで継続しています。最終的にスクリプトはすべてを出力します。

iPythonでスクリプトを1行ずつ繰り返しても問題はなく、フリーズや待ち時間はありません。スクリプトが完成するまで、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(). .. 

I'm running the script from the command line using 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!

何か案は?

EDIT I've clarified the question.

2

1 答え

おそらくあなたの出力はバッファされているでしょう。

それを排除するためにstderrに直接書いてみてください:

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

または:

import sys
sys.stdout.write("Equivalent message here\n")
sys.stdout.flush()
2
追加された
うん、それは問題だった。 。 。ありがとう!
追加された 著者 Edwardr,