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

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

执行之后,可以查看快照

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

同样的方式,我们可以创建一个Lambda函数来删除快照

具体的函数如下:


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

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

执行之后CloudWatch里面的print日志

原文地址:https://blog.51cto.com/beanxyz/2440894

时间: 2024-08-29 06:47:33

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

Lambda,AWS和Python的自动化管理操作 - 自动开机和关机

上一篇豆子已经配置在PyCharm里面添加了boto3和pyboto3,因此写脚本的时候可以直接在自己的PyCharm里面编写. 下面是一个例子遍历所有的region查找EC2,如果状态是开机,那就关掉:或者倒过来也可以写成 如果是关机状态,就开机. import boto3 def lambda_handler(event, context): # Get list of regions ec2_client = boto3.client('ec2') regions = [region['R

Lambda,AWS和Python的自动化管理操作(1)

最近开始从头学习Lambda 在AWS里面的自动化运用.我的操作主要是基于Python 3.7的版本,AWS的Python模块叫做Boto.具体的语法和概念都不赘述了,直接来看具体的例子. 首先来看看第一个简单的操作,如何创建一个新的EC2实例. 第一步,创建一个新的lambda函数,选择 author from scratch,这里他默认会自动创建一个IAM的role,并赋予访问cloudwatch log的权限 默认的权限显示如下 这里我们需要授予创建EC2的权限 ,因此需要修改对应的JSO

iOS——文件操作NSFileManager (创建、删除,复制,粘贴)

iOS——文件操作NSFileManager (创建.删除,复制,粘贴) iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像android,没有SD卡概念,不能直接访问图像.视频等内容.iOS应用产生的内容,如图像.文件.缓存内容等都必须存储在自己的沙盒内.默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp.Library包含Caches.Preferences目录.               上面的完整路径为:用户->资源库->Applicat

Javascript如何操作(创建/读取/删除)cookie

曲奇(小甜点),来源于英语COOKIE. cookie这个词想必很多做前段的朋友都接触过,但是没有详细的了解以及操作过.如何的确如此,那么就停下来了解一下如何通过JS来操作cookie值吧! 通过本文你将粗略的明白cookie是什么,如何通过js创建/存储以及获取cookie,如何让cookie过期来删除cookie... 什么是cookie? cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie.你可以使用 JavaScript 来

【python】jiraAPI使用教程 自动创建jira问题单并置状态为OPEN

环境依赖 : python库 redis jira  安装命令:pip install redis pip install jira redis服务安装命令: $sudo apt-get update $sudo apt-get install redis-server 启动 Redis $ redis-server 查看 redis 是否启动?                   $ redis-cli 以上命令将打开以下终端:                   redis 127.0.0.

[ActionScript 3.0] AS3 对XML的操作,创建、删除、增加节点方法

package { import flash.display.Sprite; /** * @author:Frost.Yen * @E-mail:[email protected] * @create: 2016-3-11 上午11:31:11 * */ public class OperateXML extends Sprite { private var _xml:XML = <data> <item>item1</item> <item>item2&l

php文件及文件夹操作(创建、删除、移动、复制)

创建FileUtil.php文件,内容及调用方式如下: <?php /** * 操纵文件类 * * 例子: * FileUtil::createDir('a/1/2/3'); 测试建立文件夹 建一个a/1/2/3文件夹 * FileUtil::createFile('b/1/2/3'); 测试建立文件 在b/1/2/文件夹下面建一个3文件 * FileUtil::createFile('b/1/2/3.exe'); 测试建立文件 在b/1/2/文件夹下面建一个3.exe文件 * FileUtil

10月16日上午数据库基础操作(创建、删除)

创建数据库 Create  database  text2  创建数据库text2 2. 删除数据库 Drop  database   text2  删除数据库text2 创建表 Create  table class   创建一个表叫class                  这是个主表 ( Code  varchar(20)  primary key,                                     创建序号 Name  varchar(20)   not  nul

java file 操作之创建、删除文件及文件夹

本文章向大家讲解java文件的基本操作,包括java创建文件和文件夹.java删除文件.java获取指定目录的全部文件.java判断指定路径是否为目录以及java搜索指定目录的全部内容等.请看下面实例. 创建文件File 的两个常量(File.separator.File.pathSeparator). 直接在windows下使用\进行分割是可以的.但是在linux下就不是\了.所以,要想使得我们的代码跨平台,更加健壮,所以,大家都采用这两个常量吧. public static void cre