利用lambda函数自动创建EBS快照和删除快照

发布时间:2020-08-01 11:51:49 作者:baby麦子
来源:网络 阅读:454

利用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千字...

快照创建自动化


Key Value 说明
Name 用户自定义 不能包含中文字符
Snapshot Snapshot 必须项,且Key为Snapshot

点击查看策略,可以看到该json文件是指定对EC2和Log服务的部分权限。输入策略名称lambda_ebs_snapshot和描述后点击保存。
利用lambda函数自动创建EBS快照和删除快照
step2、创建角色
选择受信任的实体为(lambda)--->设置策略为(lambda_ebs_snapshot)--->创建标签--->输入角色名称和描述后点击保存。

注意:此处的信任实体必须选择lambda,否则后续使用该角色调用lambda函数时会发生权限未认证的错误。

完成后,点击添加。
step2、接下来开始配置CloudWatch log,点击添加。
利用lambda函数自动创建EBS快照和删除快照

以上步骤均完成后,点击右上角保存。

附:Lambda函数执行日志
利用lambda函数自动创建EBS快照和删除快照

快照删除自动化


此处以保留6天快照数据为例,大家可以根据实际情况进行测试和调整。my_ebs_snapshot_delete函数代码如下:

import re
import boto3
import os,time
from botocore.exceptions import ClientError
from datetime import datetime, timedelta, timezone

client = 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))

为了便于测试函数执行结果,建议大家在函数页面内配置测试事件,这样就不需要频繁修改触发器来完成触发了。

推荐阅读:
  1. Lambda,AWS和Python的自动化管理操作 - 自动创建快照,删除快照
  2. lvm创建快照卷

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

aws ebs 自动

上一篇:python中面向对象指的是什么意思

下一篇:oracle linux 5.8安装oracle 10g数据库

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》