利用lambda函数自动创建EBS快照和删除快照
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,利用lambda函数自动创建EBS快照和删除快照此文章参考了AWS中国区关于构建自动化EBS快照周期的官方文档,参考链接"https://amazonaws-china.com/cn/blogs/ch
千家信息网最后更新 2025年12月02日利用lambda函数自动创建EBS快照和删除快照
利用lambda函数自动创建EBS快照和删除快照
此文章参考了AWS中国区关于构建自动化EBS快照周期的官方文档,参考链接"https://amazonaws-china.com/cn/blogs/china/construct-ebs-life-circle-management/" 本文与之不同的是,本文没有使用dynamoDB服务,仅通过lambda完成了EBS的快照备份。当然,自动快照一定要搭配自动删除功能使用,否则快照容量越来越大,无形中增加了企业的IT成本。
使用阿里云和腾讯云的平台的时候,一直觉得自动快照策略是云厂商最基本的功能,所以在接手aws云项目后还保持着这种思维定式。直到我负责的一个aws 云上项目迁移完毕后,真正开始做快照备份时,才发现AWS 中国区平台上并没有创建快照策略的功能,而是要自己写Lambda函数,然后通过Cloudwatch event去触发...此处省略1千字...
- 创建/删除快照的步骤:为需要打快照的EBS磁盘打上tag---->创建策略和运行lamda函数的角色---->创建函数---->添加触发器和日志
快照创建自动化
- 1、对需要做快照的 EBS 卷打上标签,标签至少要有两组;
| Key | Value | 说明 |
|---|---|---|
| Name | 用户自定义 | 不能包含中文字符 |
| Snapshot | Snapshot | 必须项,且Key为Snapshot |
- 2、创建策略和角色
step1:进入IAM控制台,创建策略,选择json格式并输入如下字符串(代表该账号对EC2有查看信息和操作快照的功能){"Version": "2012-10-17","Statement": [ { "Effect": "Allow", "Action": [ "logs:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateSnapshot", "ec2:DeleteSnapshot", "ec2:CreateTags", "ec2:ModifySnapshotAttribute", "ec2:ResetSnapshotAttribute" ], "Resource": [ "*" ] }]}
点击查看策略,可以看到该json文件是指定对EC2和Log服务的部分权限。输入策略名称lambda_ebs_snapshot和描述后点击保存。
step2、创建角色
选择受信任的实体为(lambda)--->设置策略为(lambda_ebs_snapshot)--->创建标签--->输入角色名称和描述后点击保存。注意:此处的信任实体必须选择lambda,否则后续使用该角色调用lambda函数时会发生权限未认证的错误。
- 3、创建函数
step1、进入lambda控制台,点击左侧函数,点击右上角的新建函数。进入到创建函数页面,输入函数名称为my_ebs_snapshots、和运行平台Python3.6、权限这里选择现有角色、点击现有角色,选择刚才创建的角色lambda_ebs_snapshots,点击创建。
step2、函数创建完成后,进入到配置阶段。
前面操作都无误的情况下,此处可以看到我们的lambda函数对Log和EC2都有操作权限。
点击下方在线编辑代码,输入自动备份ebs快照的代码。import boto3import os,timefrom botocore.exceptions import ClientErrorfrom datetime import datetime, timedelta, timezoneclient = boto3.client('ec2')ec2 = boto3.resource('ec2')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 snapshotfor 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'))
- 4、创建触发器
step1、点击左侧CloudWatch Event,开始配置。如下表示每天晚上23:00开始触发执行函数。
完成后,点击添加。
step2、接下来开始配置CloudWatch log,点击添加。
以上步骤均完成后,点击右上角保存。
附:Lambda函数执行日志
快照删除自动化
此处以保留6天快照数据为例,大家可以根据实际情况进行测试和调整。my_ebs_snapshot_delete函数代码如下:
import reimport boto3import os,timefrom botocore.exceptions import ClientErrorfrom datetime import datetime, timedelta, timezoneclient = boto3.client('ec2')ec2 = boto3.resource('ec2')def lambda_handler(event, context): s=0 os.environ['TZ'] = 'Asia/Shanghai' time.tzset() # i=time.strftime('%X %x %Z') i=time.strftime('%x %Z') j=((datetime.now()-timedelta(days=7)).strftime('%x %Z')) print (j) # 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) #print (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 for snapshot in volume.snapshots.all(): match=re.findall(j,snapshot.description) if match: s=s+1 print(snapshot.description) snapshot.delete() print ('符合条件的快照个数为'+str(s))为了便于测试函数执行结果,建议大家在函数页面内配置测试事件,这样就不需要频繁修改触发器来完成触发了。
快照
函数
角色
策略
输入
选择
功能
权限
配置
代码
名称
备份
平台
标签
触发器
测试
自动化
字符
实体
情况
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
魔兽世界服务器副本刷新时间
进入服务器被人打
专科软件开发毕业工资
域控同步数据库故障
苹果手机贷款软件开发
网站服务器怎么改内容
成都软件开发外包
数据库查找耗能最多查询
福州市艾塔网络技术
软件开发赔偿损失
幻璃镜服务器
英雄联盟服务器ping
软件开发相关的书籍
网络安全注意事项图解
网络安全教育班级活动策划
世界上最安全的网站服务器
什么是服务器机箱加工厂家
保险公司两会期间网络安全排查
网络安全专业考二建
h2数据库优势
网址服务器连接失败
专科软件开发毕业工资
msde数据库下载官网
2021CSCI数据库
数据库管理系统分层体系
服务器端口无法连接网络
广州加固服务器
服务器分区时间设置
幻璃镜服务器
昆明软件开发公司招聘待遇
进入到创建函数页面,输入函数名称为my_ebs_snapshots、和运行平台Python3.6、权限这里选择现有角色、点击现有角色,选择刚才创建的角色lambda_ebs_snapshots,点击创建。