使用Boto告诉文件何时成功上传到Glacier
目前,我正在使用Amazon Web Services(AWS)并打开S3存储桶,将其内容保存到EC2中的目录中,然后从该目录中的所有内容创建一个tar文件,并将该tar文件推送到AWS Glacier。 我尝试完成的最后一步是在tar文件成功上传到AWS Glacier(需要3-5小时)时终止脚本。
目前我难以理解如何获取archive_id并询问文件库是否已成功加载tar文件。
与AWS Glacier交互我一直在使用python boto工具。 我包含了将文件上传到冰川的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
看看这个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)
以下是通过设置SQS队列服务的SNS通知订阅等待上传的广泛示例。
链接地址: http://www.djcxy.com/p/71875.html上一篇: Using Boto to tell when a file has successfully been uploaded to Glacier