python (boto3) программа для удаления старых снимков в aws по описанию - PullRequest
1 голос
/ 08 марта 2019

Так что я следую этому руководству , которое чрезвычайно полезно для создания и удаления снимков, которые старше 3 дней.проблема в том, что, похоже, скрипт python, который опубликовал автор, удаляет все снимки, которые старше 10 дней.В моей среде есть уровни 1, которые иногда по разным причинам создают ручные снимки, поэтому я не могу, чтобы эта лямбда-функция удаляла их, и я хочу отфильтровать снимки по описаниям, которые

"Created by Lambda backup function ebs-snapshots"

Теперь автор опубликовал способ фильтрации созданного снимка, поэтому я попытался имитировать это, отфильтровывая описания для удаления, но я просто хочу, чтобы кто-то проверил мою работу и / или показал мне лучший способ, потому что у меня естьна данный момент это:

( Filters=[{'Description':['Created by Lambda backup function ebs-snapshots']}])

TLDR : Как добавить фильтр в этот код, предназначенный только для снимков с приведенным выше описанием

Это код авторов дляудаление:

# Delete snapshots older than retention period

import boto3
from botocore.exceptions import ClientError

from datetime import datetime,timedelta

def delete_snapshot(snapshot_id, reg):
    print "Deleting snapshot %s " % (snapshot_id)
    try:  
        ec2resource = boto3.resource('ec2', region_name=reg)
        snapshot = ec2resource.Snapshot(snapshot_id)
        snapshot.delete()
    except ClientError as e:
        print "Caught exception: %s" % e

    return

def lambda_handler(event, context):

    # Get current timestamp in UTC
    now = datetime.now()

    # AWS Account ID    
    account_id = '1234567890'

    # Define retention period in days
    retention_days = 10

    # Create EC2 client
    ec2 = boto3.client('ec2')

    # Get list of regions
    regions = ec2.describe_regions().get('Regions',[] )

    # Iterate over regions
    for region in regions:
        print "Checking region %s " % region['RegionName']
        reg=region['RegionName']

        # Connect to region
        ec2 = boto3.client('ec2', region_name=reg)

        # Filtering by snapshot timestamp comparison is not supported
        # So we grab all snapshot id's
        result = ec2.describe_snapshots( OwnerIds=[account_id] Filters=[{'Description':['Created by Lambda backup function ebs-snapshots']}])

        for snapshot in result['Snapshots']:
            print "Checking snapshot %s which was created on %s" % (snapshot['SnapshotId'],snapshot['StartTime'])

            # Remove timezone info from snapshot in order for comparison to work below
            snapshot_time = snapshot['StartTime'].replace(tzinfo=None)

            # Subtract snapshot time from now returns a timedelta 
            # Check if the timedelta is greater than retention days
            if (now - snapshot_time) > timedelta(retention_days):
                print "Snapshot is older than configured retention of %d days" % (retention_days)
                delete_snapshot(snapshot['SnapshotId'], reg)
            else:
                print "Snapshot is newer than configured retention of %d days so we keep it" % (retention_days)

Часть, которую я обновил, была: result = ec2.describe_snapshots (OwnerIds = [account_id] Filters = [{'Description': ['Создано функцией резервного копирования Lambda ebs-snapshots']}])

это правильно синтаксически?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...