2017-11-15 3 views
1

このプログラムの目的は、60日以上経過したスナップショットを削除することです。これは私のコードあなたの誤差がラインa=snapshot[s].start_timeである私のawsアカウントにすべてのスナップショットを表示する方法python boto3

#!/usr/bin/env python 
    import boto3 
    import datetime 
    client = boto3.client('ec2') 
    snapshot= client.describe_snapshots() 
    for s in snapshot: 
    a=snapshot[s].start_time 
    b=a.date() 
    c=datetime.datetime.now().date() 
    d=c-b 
     if d.days>60 : 
      snapshot[s].delete(dry_run=True) 

答えて

1

、使用:「『辞書』オブジェクトが属性 『のstart_time』を持っていない=スナップショット[S] .start_time はAttributeErrorが」実行したときには、次のエラーが表示されますa=s.start_time

注「スナップショット」を「スナップショット」に変更します。あなたのforループの中で:

for snapshot in snapshots: 

これにより、変数が表すものを読みやすく、クリアすることができます。

もう1つの項目は、start_timeが文字列であることです。あなたは数字を得るためにこれを解析する必要があります。ここにあなたを助ける例があります:

delete_time = datetime.utcnow() - timedelta(days=days) 
for snapshot in snapshots: 
    start_time = datetime.strptime(
     snapshot.start_time, 
     '%Y-%m-%dT%H:%M:%S.000Z' 
    ) 

    if start_time < delete_time: 
     ***delete your snapshot here*** 
+0

は完全に間違っています(構文を無視してください)私は概念を賢明と頼んでいます。 –

+0

forループはOKです。 "s"をもう一度参照するときは、スナップショット[snapshot]のように "snashot"に対して使用していますが、これは正しくありません。あなたのforループで "s"を参照するだけです。このため、「スナップショット」を「スナップショット」に、「スナップショット」を「スナップショット」にそれぞれ変更することをお勧めします。より明確な意味。 –

関連する問題