使用Boto来判断文件是否已成功上传到Glacier



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

目前我被难住了,如何采取archive_id,并询问保险库如果tar文件已成功加载。

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

看看这个Boto和Glacier指南,你可以从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)

下面是一个通过设置SNS通知订阅SQS队列服务来等待上传的广泛示例。

相关内容

  • 没有找到相关文章

最新更新