python - 使用 Boto 判断文件何时已成功上传到 Glacier

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

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

目前,我对如何获取 archive_id 并询问 vault 是否已成功加载 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

最佳答案

看看这个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/

相关文章:

typescript - 如何在现有堆栈 AWS Cloudformation 中创建新实例

python - 博托 SQS : delete RawMessage

python - 当尝试从另一个 python 脚本中运行 python 脚本时,我得到 'permission denied' !

python - blender 2.8 python,使用 bisect 将对象分成两半会产生错误的结果

node.js - 应用程序端加入 Node 的 ORM?

python - Boto 在 ssl.c 中不断崩溃

python - 是否可以在不使用预签名 URL 的情况下访问私有(private) s3 存储桶对象? (boto3, python )

python - 从 hmni 包 python 创建匹配概率列

javascript - 喀拉斯-JS "Error: [Model] Model configuration does not contain any layers."

node.js - serverless.yml 中的运行时变量未设置 Node 版本