Lambda,AWS和Python的自动化管理操作 - 自动创建快照,删除快照
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这一节看看如何通过boto3来管理EC2的快照。在实际生产环境中,豆子使用的是AWS提供的解决方案 EBS Snapshot Scheduler, 直接导入Cloudformation的stack,会
千家信息网最后更新 2025年12月02日Lambda,AWS和Python的自动化管理操作 - 自动创建快照,删除快照
这一节看看如何通过boto3来管理EC2的快照。在实际生产环境中,豆子使用的是AWS提供的解决方案 EBS Snapshot Scheduler, 直接导入Cloudformation的stack,会自动配置Lambda函数和DynamoDB数据库,然后我们可以通过标签来进行设置。从学习的角度,我们直接来弄一个超简易的版本。我们可以直接写两个Lambda函数,一个进行创建,一个进行删除。
首先,设置一个tag标签

接下来创建Lambda函数
IAM Role的配置如下
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "ec2:CreateSnapshot", "ec2:CreateTags", "ec2:DeleteSnapshot", "ec2:Describe*", "ec2:ModifySnapshotAttribute", "ec2:ResetSnapshotAttribute" ], "Resource": "*" } ]}具体函数如下所示:
from datetime import datetimeimport boto3def lambda_handler(event, context): ec2_client = boto3.client('ec2') #获取所有region的名字 regions = [region['RegionName'] for region in ec2_client.describe_regions()['Regions']] #循环每一个region,找到所有标签了backup的实例 for region in regions: print('Instances in EC2 Region {0}:'.format(region)) ec2 = boto3.resource('ec2', region_name=region) instances = ec2.instances.filter( Filters=[ {'Name': 'tag:backup', 'Values': ['true']} ] ) #获取时间戳 # ISO 8601 timestamp, i.e. 2019-01-31T14:01:58 timestamp = datetime.utcnow().replace(microsecond=0).isoformat() #对每一个实例的每一个volume,都创建一个快照 for i in instances.all(): for v in i.volumes.all(): desc = 'Backup of {0}, volume {1}, created {2}'.format( i.id, v.id, timestamp) print(desc) snapshot = v.create_snapshot(Description=desc) print("Created snapshot:", snapshot.id)然后在Cloudwatch里面设置一个计划任务,定期执行这个函数
这个是绑定了Role和触发器的示意图

执行之后,可以查看快照
在Cloudwatch里面查看print的输出日志,可以看见成功执行了
同样的方式,我们可以创建一个Lambda函数来删除快照
具体的函数如下:
import boto3def lambda_handler(event, context): #sts 返回的是一个字典,通过get获取当前账号的ownerId,如果失败则返回None account_id = boto3.client('sts').get_caller_identity().get('Account') ec2 = boto3.client('ec2') """ :type : pyboto3.ec2 """ regions = [region['RegionName'] for region in ec2.describe_regions()['Regions']] for region in regions: print("Region:", region) ec2 = boto3.client('ec2', region_name=region) """ :type : pyboto3.ec2 """ response = ec2.describe_snapshots(OwnerIds=[account_id]) snapshots = response["Snapshots"] print(snapshots) #Snapshot 是一个很长的列表,每个元素是一个字典结构;sort指定通过时间来排序 #下面等同于 # def sortTime(x): # return x["StartTime"] # snapshots.sort(key=sortTime) # Sort snapshots by date ascending snapshots.sort(key=lambda x: x["StartTime"]) # Remove snapshots we want to keep (i.e. 3 most recent) snapshots = snapshots[:-3] for snapshot in snapshots: id = snapshot['SnapshotId'] try: print("Deleting snapshot:", id) ec2.delete_snapshot(SnapshotId=id) except Exception as e: print("Snapshot {} in use, skipping.".format(id)) continue同样可以创建计划任务执行函数
执行之后CloudWatch里面的print日志
函数
快照
标签
任务
字典
实例
日志
时间
i.e.
配置
管理
成功
接下来
两个
元素
可以通过
名字
实际
数据
数据库
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全与支付系统教学
服务器报错ba
mysql数据库中属性次序
网络安全技术与实训 第四版
网络安全研究框架分析
利用数据库创建学生表视频
网络安全宣传视频制作方法
崇明区参考数据库研发优点
数据库技术手册
我的世界基岩版服务器管理
金手指数据库编辑器
网络安全大赛李现
网络安全法中关键信息运营者
网络安全信息收集的方法
我来做服装定制软件开发
北京软件开发架构设计师工资
镇原租房软件开发
全球的服务器都分布在哪里
菏泽定制软件开发
湖南党委网络安全工作责任制
jsp数据库条件查询
烟厂信息网络安全解决方案
arcmap连接数据库没有权限
打好网络安全风险防控阻击仗
浦东新区二手网络技术施工
服务器开关图示
数据库批量执行
网络安全风险事件预测算法
衡阳正规软件开发哪家便宜
计算机网络技术主要学什么的