2013-06-10 34 views
7

Hiện tại tôi đang sử dụng Amazon Web Services (AWS) và để mở thùng S3, lưu nội dung của nó vào thư mục trong EC2, sau đó tôi tạo tệp tar từ mọi thứ nằm trong thư mục đó và đẩy tập tin tar đó vào AWS Glacier. Bước cuối cùng mà tôi đã cố gắng thực hiện là có kịch bản chấm dứt khi tệp tar đã được tải lên thành công tới AWS Glacier (mất 3-5 giờ).Sử dụng Boto để biết khi nào một tệp đã được tải lên Glacier

Hiện tại tôi đang bối rối về cách lấy archive_id và hỏi vault nếu tệp tar đã được tải thành công.

Để tương tác với AWS Glacier Tôi đã sử dụng công cụ boto python. Tôi bao gồm mã python \ boto tải tệp lên sông băng và một số thử nghiệm nhanh mà tôi đã cố gắng chạy để chỉ tìm ra liệu mã đã được tải lên thành công hay chưa. Cho đến nay tất cả các thử nghiệm đều trả về false.

Tôi đã loại trừ một vài kiểm tra về mã status_code cũng trả về false cho mọi thứ và khi tôi cố gắng in ra bất kỳ cái nào trong số này chỉ chưa hoàn thành và đang tiến hành (Như mong đợi) in ra bất cứ thứ gì, nhưng khi tôi thử để khớp với archive_id hoặc retrieve_job với những gì được trả về trong danh sách công việc tôi không nhận được kết quả phù hợp. Một lưu ý bổ sung là danh sách mà chúng được lưu trong khi nó được in tất cả như nhau (Công việc (arn: aws: sông băng: us-east-1: 232412618534: hầm/sông băng-poc))

Cách trả lại đúng khi công việc được hoàn thành?

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 

Trả lời

4

Hãy xem Boto and Glacier guide này, bạn có thể thăm dò ý kiến ​​nó bằng tay từ boto hoặc bạn có thể thiết lập Amazon dịch vụ đơn giản thông báo để thông báo cho bạn khi công việc được thực hiện.

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") 

Bạn có thể sử dụng boto là set_vault_notifications chức năng thiết lập các thông báo SNS.

notification_config = {'SNSTopic': 'my_notification_topic', 
         'Events': ['ArchiveRetrievalCompleted', 
            'InventoryRetrievalCompleted']} 
vault.set_vault_notifications(vault, notification_config) 

Here là một ví dụ mở rộng chờ đợi tải lên bằng cách thiết lập đăng ký thông báo SNS để phục vụ hàng đợi SQS.

+0

Vì vậy, tôi không chắc chắn lý do tại sao nhưng tôi gặp sự cố với vấn đề này. Khi tôi đã cố gắng kiểm tra xem nếu nó hoàn thành tôi đặt nó vào một vòng lặp while để tiếp tục kiểm tra cho đến khi nó nhận được rằng retrieve_job.completed trả về true. Cho đến nay tôi đã thử 3 hoặc 4 cách khác nhau và chưa thành công. Bất kỳ mẹo hữu ích nào? Tôi không cố gắng tải xuống, chỉ cần kiểm tra xem liệu nó có còn ở đó không –

Các vấn đề liên quan