使用AWS Lambda自动定时快照EBS卷

一、创建IAM策略

IAM->策略->创建策略->JSON

{
    "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": [
                "*"
            ]
        }
    ]
}

二、创建角色

IAM->角色->创建角色->添加刚刚创建好的策略

三、添加标签

给每个正在运行的EC2实例都添加一个标签,值为自定义的实例名,后面python脚本会通过AWS API获取到这个值。

四、编辑Python3脚本,脚本名为“lambda_function.py”

import boto3
import datetime
import os
import pytz

ec2 = boto3.resource('ec2')

def lambda_handler(event, context):
    print("\n\nAWS snapshot backups starting at %s" % datetime.datetime.now())
    instances = ec2.instances.filter(
        Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])
    
    for instance in instances:
        instance_name = instance.tags[0]['Value']

        for volume in ec2.volumes.filter(Filters=[{'Name': 'attachment.instance-id', 'Values': [instance.id]}]):
            description = '%s-%s-%s' % (instance_name, volume.volume_id, 
                datetime.datetime.now().strftime("%Y%m%d"))
                
            # create ebs snaphost
            if volume.create_snapshot(VolumeId=volume.volume_id, Description=description):
                print("Snapshot created with description [%s]" % description)

            # delete expired snapshot
            for snapshot in volume.snapshots.all():
                # expried datetime
                retention_days = 7
                if datetime.datetime.now().replace(tzinfo=None) - snapshot.start_time.replace(tzinfo=None) > datetime.timedelta(days=retention_days):
                    print("\t\tDeleting snapshot [%s - %s]" % ( snapshot.snapshot_id, snapshot.description ))
                    snapshot.delete()

    print("\n\nAWS snapshot backups completed at %s" % datetime.datetime.now())
    return True

五、打包python脚本以及需要的三方库(Python3)

# mkdir /tmp/lambda_tmp
# mv lambda_function.py /tmp/lambda_tmp/
# pip install pytz -t /tmp/lambda_tmp/ 
# pip install boto3 -t /tmp/lambda_tmp/ 
# cd /tmp/lambda_tmp
# zip -r9 ~/lambda_EBS.zip *

六、创建Lambda函数

Service->Lambda->创建函数

下一步,上传刚刚压缩好的zip包

下一步,添加CloudWatch触发器,定时一天运行一次

点击保存并测试,如果测试通过会返回True,点击Service->EC2->快照,你会发现已经在做EBS快照了。

原文地址:http://blog.51cto.com/daibaiyang119/2144485

时间: 2024-10-08 01:23:59

使用AWS Lambda自动定时快照EBS卷的相关文章

Automated EBS Snapshots using AWS Lambda & CloudWatch

Overview In this post, we'll cover how to automate EBS snapshots for your AWS infrastructure using Lambda and CloudWatch.   We'll build a solution that creates nightly snapshots for volumes attached to EC2 instances and deletes any snapshots older th

什么是AWS Lambda?——事件驱动的函数执行环境

AWS CTO Werner Vogels在AWS re:Invent 2014大会的第二场主题演讲上公布了两个新服务和一系列新的实例,两个新服务都相当令人瞩目:第一个宣布的新服务是Amazon EC2 Container Service,跟Docker紧密联合的管理服务,令人兴奋,不过不是本篇报道的重点. 本篇报道主要想向大家介绍一下今天宣布的第二个服务:AWS Lambda. 什么是AWS Lambda? 根据Jeff Barr在博客上的描述,Lambda是一个"可简单创建Lambda函数.

EC2 Instance扩容EBS卷容量

EC2实例运行一段时间后,由于日志和一些应用程序数据的积累,可能出现之前预留的磁盘容量不够需要扩容的情况.AWS EBS目前还不支持在线扩容,不过可以通过结合snapshot来实现. 如,我的EC2 Instance容量默认的8G不够用了,需要扩容. 1. 创建需要扩容磁盘的snapshot: 进入aws ec2控制台的Volume管理项中,选中你要扩容的EBS卷,右键选择"create snapshot" 在弹出的对话框中,输入名称和描述信息,待创建完成后记录下snapshot的ID

访问 AWS Lambda 的 Amazon CloudWatch 日志

AWS Lambda 会自动替您监控 Lambda 函数,并通过 Amazon CloudWatch 报告各项指标.为帮助您诊断函数中的问题,Lambda 会记录您的函数处理的所有请求,并通过 Amazon CloudWatch Logs 自动存储您的代码生成的日志. 您可以在代码中插入日志记录语句来帮助验证代码是否按预期运行.Lambda 自动与 CloudWatch Logs 集成,并将您的代码的所有日志推送到与 Lambda 函数关联的 CloudWatch Logs 组(即名为 /aws

DynamoDB 流 和 AWS Lambda 触发器

Amazon DynamoDB 与 AWS Lambda 集成,使您能够创建触发器 — 自动响应 DynamoDB 流 中的事件的代码片段.利用触发器,您可以创建应对 DynamoDB 表中的数据修改的应用程序. 如果您在表中启用 DynamoDB 流,则可以将流 Amazon 资源名称 (ARN) 与您编写的 AWS Lambda 函数关联起来.在修改表中的项目之后,表的流中都将出现一条新记录.AWS Lambda 将轮询流并在检测到新的流记录时同步调用 Lambda 函数. Lambda 函

AWS Lambda 自动化和 PowerShell

这两天我都在看如何使用Lambda和Python,但是平常更习惯使用PowerShell来管理各种系统.试试看如何在Lambda里面使用PowerShell吧. 首先在本地计算机上需要安装下面三个模块. 安装PowerShell Corehttps://github.com/powershell/powershell 安装 the .NET Core Software Development Kit (SDK)https://www.microsoft.com/net/download 安装 A

图片轮播 -两种自动定时方式

方式一: <script> window.onload=load; function load(){ var arrImgs=['1.jpg','2.jpg','3.jpg','4.jpg']; var img = document.getElementById("img"); var index =0; img.onclick=changeImg;//点击图片实现轮播 setInterval(changeImg,500);//自动轮播图片方式1 //轮播图片 functi

[转]mysql自动定时备份数据库的最佳方法-支持windows系统

网上有很多关于window下Mysql自动备份的方法,可是真的能用的也没有几个,有些说的还非常的复杂,难以操作. 我们都知道mssql本身就自带了计划任务可以用来自动备份,可是mysql咱们要怎么样自动有备份呢? 这个方法是用bat批处理来完成的. 假想环境:MySQL 安装位置:D:\Program Files\MySQL\MySQL Server 5.0\data 如图: 数据库名称为:952game数据库备份目的地:d:\db_bak\ (你想把数据库备份到哪个盘的路径)我想备到D盘的db

[AWS Lambda] Scheduling Events with AWS Lambda (a.k.a. Lambda cron jobs)

Learn how to create AWS Lambda functions that execute on a scheduled interval, much like a cron job would. In this lesson we will create a Lambda function that checks for a string of text on a website to verify the website is up and operational. The