| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import boto3
- import os,time
- from botocore.exceptions import ClientError
- from datetime import datetime, timedelta, timezone
- client = boto3.client('ec2')
- ec2 = boto3.resource('ec2')
- ddb = boto3.resource('dynamodb')
- # 'EBS-Snapshot-Lifecycle' is the table you store snapshot metadata, modify it to your own table name
- table = ddb.Table('EBS-Snapshot-Lifecycle')
- # set days to keep 快照保留周期
- DAYS_TO_RETAIN = 7
- def lambda_handler(event, context):
- os.environ['TZ'] = 'Asia/Shanghai'
- time.tzset()
- i=time.strftime('%X %x %Z')
-
- # set volume id, get volume who has a tag-key is 'Snapshot'
- describe_volumes=client.describe_volumes(
- Filters=[
- {
- 'Name': 'tag-key',
- 'Values': ['Snapshot',
- ]
-
- }
- ]
- )
- volume_id_list = []
- for vol in describe_volumes['Volumes']:
- volume_id_list.append(vol.get('VolumeId'))
-
- # set snapshot
- for volume_id in volume_id_list:
- volume = ec2.Volume(volume_id)
-
- for tags in volume.tags:
- if(tags.get('Key') == 'Name'):
- volume_name = tags.get('Value')
- description = volume_name + ' volume snapshot is created at ' + i
-
- try:
- response = client.create_snapshot(
- Description=description,
- VolumeId=volume_id)
- except:
- print('Create Snapshot occured error, Volume id is ' + volume_id)
- else:
- print('Snapshot is created succeed, Snapshot id is ' + response.get('SnapshotId'))
-
- # write into DynanoDB table
- snapshot_id = response.get('SnapshotId')
- start_time = response.get('StartTime')
- ttl_time = int(start_time.timestamp()) + 86400 * DAYS_TO_RETAIN
-
- try:
- table.put_item(
- Item={
- 'snapshot_id': snapshot_id,
- 'create_time': start_time.astimezone(timezone(timedelta(hours=8))).strftime('%X %x %Z'),
- 'description': description,
- 'timestamp': int(start_time.timestamp()),
- 'ttl': ttl_time,
- }
- )
- except:
- print('Write to DynanoDB Table occured error, snapshot id is ' + snapshot_id)
- else:
- print('Write to DynanoDB Table succeed, snapshot id is ' + snapshot_id)
|