2013-06-10 17 views
7

現在、私はAmazon Web Services(AWS)を使用しています.S3バケットを開き、その内容をEC2のディレクトリに保存してからtarファイルを作成しますそのディレクトリにあるすべてのものをタールファイルをAWS Glacierにプッシュします。私が達成しようとしていた最後のステップは、tarファイルがAWS Glacier(3〜5時間かかる)に正常にアップロードされたときにスクリプトを終了させることでした。ファイルが正常に氷河にアップロードされたことをBotoで確認する

現在、私はarchive_idを取得し、tarファイルが正常に読み込まれた場合にボールトに尋ねる方法について困惑しています。

AWS Glacierと対話するために、私はpython botoツールを使用しています。私はファイルを氷河にアップロードするpython \ botoコードと、コードが正常にアップロードされたかどうかを判断するために実行しようとしていたクイックテストを含めました。これまでのところ、すべてのテストはfalseを返します。

私はstatus_codeに関するいくつかのテストを除外しました。すべての場合でもfalseを返していました。これらのうちのどれかを印刷しようとすると、完了していない状態と進行中(期待どおり)は何も印刷しません。 archive_idまたはretrieve_jobとジョブのリストで返されるものを一致させるために、一致するものは見つかりません。追加の注記は、これらが印刷されたときに保存されるリストです(ジョブ(arn:aws:氷河:us-east-1:232412618534:vaults/glacier-poc)

戻す方法仕事が完了したら本当ですか?

import boto 
    import sys 

    ACCESS_KEY_ID = "..." 
    SECRET_ACCESS_KEY = "..." 
    FILENAME = sys.argv[1] 
    GLACIER_VAULT_NAME = sys.argv[2] 

    connection = boto.connect_glacier(aws_access_key_id=ACCESS_KEY_ID, aws_secret_access_key=SECRET_ACCESS_KEY) 

    vault = connection.get_vault(GLACIER_VAULT_NAME) 

    archive_id = vault.upload_archive(FILENAME) 

    open("glacier.txt", "a").write(FILENAME + " " + archive_id + "\n") 

    retrieve_job = vault.retrieve_archive(archive_id) 

    a = vault.list_jobs(completed=True) 
    b = vault.list_jobs(completed=False) 

    print "Is In Completed List" 
    print archive_id in a 
    print "Is In NOT Completed List" 
    print archive_id in b 

    print "Is In Completed List" 
    print retrieve_job in a 
    print "Is In NOT Completed List" 
    print retrieve_job in b 

答えて

4

このBoto and Glacier guideを見てみましょう、あなたはのbotoから手動でポーリングするか、またはあなたは、ジョブが実行されたときに通知するようにアマゾンシンプルな通知サービスを設定することができます。

archive_id = vault.upload_archive("mybackup.tgz") 
retrieve_job = vault.retrieve_archive(archive_id) 

# if the job is in progress 
job_id = retrieve_job.id 
retrieve_job = vault.get_job(job_id) 

if retrieve_job.completed: 
    job.download_to_file("mybackup.tgz") 

あなたはのbotoのset_vault_notifications機能は、SNSの通知を設定することができます。

notification_config = {'SNSTopic': 'my_notification_topic', 
         'Events': ['ArchiveRetrievalCompleted', 
            'InventoryRetrievalCompleted']} 
vault.set_vault_notifications(vault, notification_config) 

Here SQSキューサービスにSNS通知サブスクリプションを設定することで、アップロードを待っているの豊富な例です。

+0

私はなぜこれが問題になっているのか分かりません。 retrieve_job.completedがtrueを返すまで、チェックを継続するためにwhileループに入れたかどうかをチェックしようとしていました。これまで私は3つまたは4つの方法を試してきましたが、成功していませんでした。役に立つヒント?私はそれをダウンロードしようとしていない、ただそれがまだそこにあるかどうかを確認する –

関連する問題