Selaa lähdekoodia

add py/Pro-EBS-Snapshot.py.

xdc 5 vuotta sitten
vanhempi
sitoutus
fd63c735d2
1 muutettua tiedostoa jossa 73 lisäystä ja 0 poistoa
  1. 73 0
      py/Pro-EBS-Snapshot.py

+ 73 - 0
py/Pro-EBS-Snapshot.py

@@ -0,0 +1,73 @@
+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)