【问题标题】:Using Boto to tell when a file has successfully been uploaded to Glacier使用 Boto 判断文件何时成功上传到 Glacier
【发布时间】:2013-06-10 21:02:35
【问题描述】:

目前我正在使用 Amazon Web Services(AWS) 并打开 S3 存储桶,将其内容保存到 EC2 中的目录中,然后从该目录中的所有内容创建一个 tar 文件并将该 tar 文件推送到 AWS冰川。我尝试完成的最后一步是在 tar 文件成功上传到 AWS Glacier 时终止脚本(这需要 3-5 小时)。

目前我对如何获取archive_id 并询问保险库是否已成功加载tar 文件感到困惑。

为了与 AWS Glacier 交互,我一直在使用 python boto 工具。我包含了将文件上传到 glacier 的 python\boto 代码以及我尝试运行的一些快速测试,以确定代码是否已成功上传。到目前为止,所有测试都返回 false。

我排除了一些关于 status_code 的测试,这些测试也对所有内容都返回 false,当我尝试打印其中任何一个时,只有未完成和正在进行(如预期)打印出任何内容,但是当我尝试将archive_id 或retrieve_job 与我没有匹配到的作业列表中返回的内容相匹配。另一个注意事项是这些在打印时保存的列表它们都是相同的( Job(arn:aws:glacier:us-east-1:232412618534:vaults/glacier-poc) )

作业完成后如何返回true?

    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

【问题讨论】:

    标签: python amazon-web-services boto amazon-glacier


    【解决方案1】:

    看看这个Boto and Glacier guide,您可以从 boto 手动轮询它,也可以设置 Amazon Simple Notification Service 以在工作完成时通知您。

    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 是一个通过设置 SNS 通知订阅到 SQS 队列服务来等待上传的广泛示例。

    【讨论】:

    • 所以我不知道为什么,但我遇到了这个问题。当我试图检查它是否完成时,我将它放入一个while循环中以继续检查,直到它得到retrieve_job.completed返回true。到目前为止,我已经尝试了 3 或 4 种不同的方法,但都没有成功。有什么有用的提示吗?我不是要下载它,只是检查它是否仍然存在
    猜你喜欢
    • 1970-01-01
    • 2016-08-23
    • 2012-12-17
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 2023-04-07
    • 2012-04-20
    • 2017-08-18
    相关资源
    最近更新 更多