2017-01-24 8 views
3

私は毎日データを氷河に移動させるライフサイクルルールを使って、S3バケットに格納された日付を回復するスクリプトをテストしています。したがって、理論上、S3バケットにファイルをアップロードすると、1日後にAmazonインフラストラクチャがそれを氷河に移動させる必要があります。オンデマンドで氷河へのS3バケットboto3 APIから可能ですか?

しかし私は 復元プロセスをテストするためにPythonで開発しているスクリプトをテストしたいと思います。したがって、私がboto3 APIを理解していれば、S3バケットに格納されたファイルを強制的に移動させて、氷河のストレージに直接移動する方法はありませんでした。 それが可能か、Amazonインフラストラクチャがライフサイクルルールを起動するまで待つことが必要です( )。

bucket = s3.Bucket(TARGET_BUCKET) 
for obj in bucket.objects.filter(Bucket=TARGET_BUCKET, Prefix=TARGET_KEYS + KEY_SEPARATOR): 
    obj.move_to_glacier() 

をしかし、私はオンデマンドで氷河にこの動きを作る任意のAPIを見つけることができません。

私はこのようないくつかのコードを使用したいと思います。私はバケツのライフサイクルルール

答えて

3

これはできません。 S3オブジェクトをGLACIERストレージクラスに移行する唯一の方法は、ライフサイクルポリシーです。

x-amz-storage-class

制約:あなたは、ストレージクラスとしてGLACIERを指定することはできません。オブジェクトをGLACIERストレージクラスに移行するには、ライフサイクル設定を使用できます。

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html

REST APIは、SDKのすべてによって使用されるインタフェース、コンソール、及びAWS-CLIです。


注...小さなオブジェクトでテストしますが、小さなオブジェクトをプロダクションで氷河にアーカイブしないでください。 S3は90日前にオブジェクトを削除しても90日間の氷河の保管のためにあなたに請求します。 (この請求書は文書化されています)

0

を使用してオンデマンドでこれを強制することができた場合にも、私は はGlacierupload_archive()方法を使用して、氷河するS3からファイルをアップロードすることが可能であるかわかりません。

更新:これはS3オブジェクトライフサイクル管理と同じではなく、氷河に直接アップロードします。

glacier_client = boto3.client('glacier') 

bucket = s3.Bucket(TARGET_BUCKET) 

for obj in bucket.objects.filter(Prefix=TARGET_KEYS + KEY_SEPARATOR): 
    archive_id = glacier_client.upload_archive(vaultName='TARGET_VAULT',body=obj.get()['Body'].read()) 
    print obj.key, archive_id 

.filter()Bucketキーワード引数を受け付けません。

+1

これは、OPが望んでいることをするつもりはありません。 'GLACIER'ストレージクラスのS3オブジェクトは、基本的に氷河のボールト内のアーカイブとは異なります。私は最近、無関係な質問との違いについて説明しました(http://stackoverflow.com/a/41828828/1695906)。 –

+0

合意しました。これは、AWSがS3のobjライフサイクルを通して行うことと同じではありません。この方法は、必要に応じて氷河のボールトにアーカイブをアップロードする(氷河に直接アップロードするなど)だけを行います。 – franklinsijo

関連する問題