利用lambda函数自动创建EBS快照和删除快照
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,利用lambda函数自动创建EBS快照和删除快照此文章参考了AWS中国区关于构建自动化EBS快照周期的官方文档,参考链接"https://amazonaws-china.com/cn/blogs/ch
千家信息网最后更新 2025年01月23日利用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安全错误
数据库的锁怎样保障安全
北京第六网络技术公司
什么是服务器的公共服务
安卓软件开发平台教程
计算机网络技术考html的例题
我的世界服务器mod下载
2021软件开发行情
简单游下载软件开发
软件开发难度测量
服务器反透视怎么破
实现网络安全管理高标准
安防监控需要连接服务器吗
数据库空间满了怎么办
学校可开展网络安全活动方案
数据库中的oledb是什么
服务数据库已锁定磁盘
h3c服务器虚拟化
数据库技术在电气专业的应用
黄浦区智能化软件开发厂家价格
北京市软件开发经营范围办理
杨浦区数据软件开发报价表
全国三级网络技术 pdf
数据库3d模型技术实现
数据库关系的作用
软件开发环境与工具大作业
校验服务器配置文件失败
数据库运行安全的内容是
网络安全等级保护价格
锐捷无法连接认证服务器
怎么上架服务器视频
安徽手机游戏软件开发