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

目前,我对如何获取archive_id感到困惑,并询问Vault是否已成功加载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 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是通过设置SQS队列服务的SNS通知订阅来等待上传的广泛示例。

关于python - 使用Boto判断何时文件已成功上传到Glacier,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17032807/

10-10 19:11