Lambda,AWS和Python的自动化管理操作 - 自动创建快照,删除快照
发表于:2025-02-13 作者:千家信息网编辑
千家信息网最后更新 2025年02月13日,这一节看看如何通过boto3来管理EC2的快照。在实际生产环境中,豆子使用的是AWS提供的解决方案 EBS Snapshot Scheduler, 直接导入Cloudformation的stack,会
千家信息网最后更新 2025年02月13日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安全错误
数据库的锁怎样保障安全
贵州智能养老软件开发专业制作
学 数据库
mysql 服务器选型
国家信息网络安全大赛直播
exp导出指定数据库中数据
mssql数据库加密
2021年服务器电脑的配置
湖北云温商互联网科技
网络安全方针政策知识问题答案
工程类软件开发前景
网络技术企业行业调研报告
数据库中设置sql
银行软件开发模式
我的世界手游怎么搜索服务器号
服务器定期更改密码
研发软件开发课英语
江阴惠普服务器维修价格
网络安全状态机模型
都市驿站互联网科技
中国电子商务数据库
数据库全时连接是什么意思
乌班图下数据库登录命令
中国网络安全总监
达梦云数据库技术
麦金塔软件开发
设计数据库的表结构数学建模
新乡软件开发简介
oa管理软件开发外包公司
我的世界多人地图服务器导入存档
数据库表存储