Lambda,AWS和Python的自动化管理操作 - 自动创建快照,删除快照
admin
2023-03-30 21:21:34
0

这一节看看如何通过boto3来管理EC2的快照。在实际生产环境中,豆子使用的是AWS提供的解决方案 EBS Snapshot Scheduler, 直接导入Cloudformation的stack,会自动配置Lambda函数和DynamoDB数据库,然后我们可以通过标签来进行设置。从学习的角度,我们直接来弄一个超简易的版本。我们可以直接写两个Lambda函数,一个进行创建,一个进行删除。

首先,设置一个tag标签

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

接下来创建Lambda函数

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

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 datetime

import boto3

def 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里面设置一个计划任务,定期执行这个函数

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

这个是绑定了Role和触发器的示意图

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

执行之后,可以查看快照
Lambda,AWS和Python的自动化管理操作 - 自动创建快照,删除快照

在Cloudwatch里面查看print的输出日志,可以看见成功执行了

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

同样的方式,我们可以创建一个Lambda函数来删除快照
Lambda,AWS和Python的自动化管理操作 - 自动创建快照,删除快照

具体的函数如下:


import boto3

def 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

同样可以创建计划任务执行函数

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

执行之后CloudWatch里面的print日志
Lambda,AWS和Python的自动化管理操作 - 自动创建快照,删除快照

相关内容

热门资讯

河南760亿省级财政资金定存招... 【大河财立方消息】5月11日消息,河南省财政厅公布2026年度第1期河南省省级财政专户资金定期存款代...
无忧传媒宣布与“孕妇泰国坠崖案... 据北京商报消息,5月11日,记者从无忧传媒方面获悉,目前公司与签约达人王暖暖经友好协商已确定解约。5...
米哈游:编造“皮套论”谣言构成... 【大河财立方消息】 5月11日,据米哈游法务部,近日米哈游诉网络博主许某鹏(网名“自由人米八”)、罗...
外交部介绍特朗普访华具体安排和... 5月11日,外交部发言人郭嘉昆主持例行记者会。总台央视记者提问:中方已经发布美国总统特朗普来华进行国...
61家!郑州市科技类校外培训机... 根据《河南省科技类校外培训机构设置标准和管理指南(试行)》有关规定,为落实“双减”政策要求,经科技类...
夫妻酒后各自驾车,路上相撞,双... 5月10日晚,四川夹江县公安局发布消息,该局交通管理大队于近日处理一起追尾事故时,查获一对夫妻双双酒...
顾客称用餐时石锅上爬满虫,餐厅... 近日,有网友反映,在福建省晋江市池店镇的“钱头大自然餐厅”用餐时,顾客吃到一半竟发现石锅外壁上爬满了...
公职人员纠集他人私闯民宅殴打重... 5月10日,中共安康高新区空港新城委员会发布情况说明,内容如下:5月10日,网络出现反映“安康高新区...
中美联合侦破跨国走私贩毒案,抓... 4月初,中国公安部禁毒局和美国司法部缉毒署成功联合侦破郭某等人走私贩毒案,同步在中国辽宁、广东,美国...
多名网友收到广东地震局短信,官... 5月11日上午,多名广东网友发帖称,自己收到了广东地震局的短信,短信内容如下:【广东省地震局】温馨提...