import boto3
import collections
import datetime
ec = boto3.client('ec2')
def lambda_handler(event, context):
reservations = ec.describe_instances(
Filters=[
{'Name': 'tag-key', 'Values': ['backup', 'Backup']},
]
).get(
'Reservations', []
)
instances = sum(
[
[i for i in r['Instances']]
for r in reservations
], [])
print "Found %d instances that need backing up" % len(instances)
to_tag = collections.defaultdict(list)
for instance in instances:
try:
retention_days = [
int(t.get('Value')) for t in instance['Tags']
if t['Key'] == 'Retention'][0]
except IndexError:
retention_days = 7
for dev in instance['BlockDeviceMappings']:
if dev.get('Ebs', None) is None:
continue
vol_id = dev['Ebs']['VolumeId']
print "Found EBS volume %s on instance %s" % (
vol_id, instance['InstanceId'])
snap = ec.create_snapshot(
VolumeId=vol_id,
)
to_tag[retention_days].append(snap['SnapshotId'])
print "Retaining snapshot %s of volume %s from instance %s for %d days" % (
snap['SnapshotId'],
vol_id,
instance['InstanceId'],
retention_days,
)
for retention_days in to_tag.keys():
delete_date = datetime.date.today() + datetime.timedelta(days=retention_days)
delete_fmt = delete_date.strftime('%Y-%m-%d')
print "Will delete %d snapshots on %s" % (len(to_tag[retention_days]), delete_fmt)
ec.create_tags(
Resources=to_tag[retention_days],
Tags=[
{'Key': 'DeleteOn', 'Value': delete_fmt},
]
)
に従ってタグ名[バックアップまたはバックアップ]を有するインスタンスのスナップショットを作成するには、以下のスクリプトを使用してみました
コードは正常に機能しましたが、ヌル応答が返されました。
Found 0 instances that need backing up
コンソールに2つのインスタンスがあり、タグ名バックアップで実行しています。次に、ヌル・レスポンスの背後にある理由は何でしょうか?
これはどうやって伝えられますか? :-)私は同じ問題を抱えています。 – Mathias
すべてのインスタンスにタグがあります。コードによると、バックアップまたはバックアップというタグを持つすべてのインスタンスのスナップショットが作成されます。したがって、タグのセクションに移動し、バックアップが必要なすべてのインスタンスにタグを追加します。これで解決します。 – prudhvi
ありがとう、これは働いた..私は2つの異なる地域で働いていたので、それはなぜ働いていないのですか.. – Mathias