千家信息网

Lambda,AWS和Python的自动化管理操作 - 自动创建快照,删除快照

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这一节看看如何通过boto3来管理EC2的快照。在实际生产环境中,豆子使用的是AWS提供的解决方案 EBS Snapshot Scheduler, 直接导入Cloudformation的stack,会
千家信息网最后更新 2026年11月03日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安全错误 数据库的锁怎样保障安全 互联网科技图片 互联网科技公司简介 深圳九邦互联网科技有限公司 互联网科技工作委员会毛军 互联网科技有限公司经营范围 河南真二互联网科技有限公司 远信互联网科技 互联网科技美容 农村开互联网科技讲堂 福州新华互联网科技学校 知乎 中化能源互联网科技招聘 互联网科技创新服务 河南猎农互联网科技有限公司 昭通互联网科技选哪家 深圳育鹏互联网科技有限公司招聘 特约风豹互联网科技为什么扣费 无锡工业互联网科技有限公司 中天科技中国工业互联网 上海创道互联网络科技有限公司 易租星互联网科技有限公司 苏州找大状互联网科技有限公司 科技创新与互联网经济 金融科技创新监管互联网金融 长亮科技互联网金融 互联网科技公司做什么 深圳前海聚择互联网科技有限公司 互联网金融科技公司干啥的 互联网科技与管理 互联网与数字科技关系 互联网科技和医药行业
0