给aws ec2 所有ebs做自动快照

使用awscli来进行对ec2实例轮询,查询到每个ec2的ebs卷,并获取到每个ec2的tag,将标签的tag打给做的快照。

awscli如何配置这里就不再说明。直接上干货

代码如下:

#!/bin/bash
#create ec2 ebs snapshot per week.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
#init awscli
#yum install -y python-pip
#pip install awscli
#aws configure
log_dir=/tmp/ec2-snapshot/
[ -d ${log_dir} ] || mkdir -p ${log_dir}
aws_user=$(aws iam get-user | awk -F\" ‘/UserName/{print $4}‘)
#获取实例id
for instance_id in $(aws ec2 describe-instances | awk -F\" ‘/InstanceId/{print $4}‘) ; do
    #获取实例标签名
    tag=$(aws ec2 describe-instances --instance-ids ${instance_id} | grep -C1 "\"Key\": \"Name\"" | awk -F\" ‘/Value/{print $4}‘)
    #通过实例id获取该实例挂载的卷id
    volumes=$(aws ec2 describe-instances --instance-ids  ${instance_id} | awk -F\" ‘/VolumeId/{print $4}‘)
    #通过卷id创建快照
    for volume in $volumes ; do 
        aws ec2 create-snapshot         --volume-id $volume         --description "$(date +%F\ %T) UTC create snapshot for $tag $volume by $aws_user on host: $(whoami)@$(hostname)"         &>> ${log_dir}create-snapshot-history.log
        #获取快照id
        snap_shotId=$(tail -11 ${log_dir}create-snapshot-history.log | awk -F\" ‘/SnapshotId/{print $4}‘)
        sleep 10
        #创建快照标签名字,实例标签_时期
        aws ec2 create-tags --resources ${snap_shotId} --tags Key=Name,Value=${tag}_${volume}_$(date +%Y%m%d)
        echo ${snap_shotId} >> ${log_dir}$volume.log
        #判断每个卷的快照数,大于3个,删除超过3个的最久的快照
        num_snap=$(wc -l ${log_dir}$volume.log | awk ‘{print $1}‘)
        if [ ${num_snap} -gt 3 ] ;then
            old_snapshotid=$(head -$[${num_snap}-3] ${log_dir}$volume.log)
            for delid in ${old_snapshotid} ;do
                aws ec2 delete-snapshot --snapshot-id ${delid} 2>> ${log_dir}del-snapshot-error.log
                sed -i ‘/‘"$delid"‘/d‘ ${log_dir}$volume.log
            done
        fi
    done
done

在系统中设定定时即可,每天每周都可以。

需注意的是aws 快照是增量备份的,即使删掉之前备份的快照也不会节约出多的空间,这方面详细可以参考aws官方文档。所以不太建议删除快照,如果你嫌快照列表过大的话则可删除。

时间: 2024-10-09 11:10:55

给aws ec2 所有ebs做自动快照的相关文章

利用AWS boto实现EC2 存储卷的自动快照

boto是AWS的Python SDK,可以利用boto自动生成ec2的存储卷快照,实现ec2数据的备份 1.安装boot pip install boto ,如果没有安装pip,需要提前安装 2.配置boto配置文件 ~/.aws/credentials  #设置aws认证凭据   [default]  aws_access_key_id = AAAAAAAAAAAAAAA  aws_secret_access_key = TNAAAAXXXXXXXXXXXXXXXXXXXXXX ~/.aws

AWS EC2挂载EBS磁盘只有2TB的问题

生成了一个3TB的EBS卷挂载到EC2上,可是格式化的时候却只能用到2TB,那另外的1TB可以在磁盘管理下看到,可以却无法格式化使用. 查询后发现是初始化分区的时候没有选对,我一直习惯用MBR,不知道GPThttps://docs.aws.amazon.com/AWSEC2/latest/UserGuide/volume_constraints.html MBR最多只支持2TB容量,超过2TB就要选用GPT所有的空间才能被识别. 原文地址:https://blog.51cto.com/helpd

使用awscli创建ec2自动快照(全量备份)

awscli介绍 官方说明:The AWS Command Line Interface is a unified tool to manage your AWS services. 基本语法为:aws [options] <command> <subcommand> [parameters] 选项 --debug (boolean) 打开debug日志. --endpoint-url (string) 使用指定的url替换默认url. --no-verify-ssl (boole

Amazon AWS EC2开启Web服务器配置

在Amazon AWS EC2申请了一年的免费使用权,安装了CentOS + Mono + Jexus环境做一个Web Server使用. 在上述系统安装好之后,把TCP 80端口开启(iptables),同时启动Jexus.正常情况下,从客户端使用 http://IP地址/info,就可以看到Jexus运行成功的效果了.但在Amazon AWS EC2却说网络出现问题或者无法访问.因为对CentOS本身来说,TCP 80端口已经打开,但是否有AWS本身还做限制呢? 在AWS主控台,找到这个Se

AWS部署XenApp7.6:创建AWS EC2实例

一.概述 本章节记录在实施过程中,创建AWS EC2实例的步骤. 二.描述 Amazon Elastic Compute Cloud (Amazon EC2) 在Amazon Web Services(AWS) 云中提供可扩展的计算容量.使用Amazon EC2 可避免前期的硬件投入,因此您能够快速开发和部署应用程序.通过使用Amazon EC2,您可以根据自身需要启动任意数量的虚拟服务器.配置安全和网络以及管理存储.Amazon EC2 允许您根据需要进行缩放以应对需求变化或流行高峰,降低流量

AWS EC2 安装 Kibana X-Pack 插件的内存不足问题

最近在学习 ELK,为了尝试和练手,我申请了 AWS EC2 micro instance (一年免费使用的主机),内存为 1G. 在安装 ElasticSearch, Logstash, Kibana 的过程中,整个过程还是比较顺利,但是也遇到了一个非常头疼的问题,就是 Kibana 的 X-Pack 无论如何也安装不上,一直卡在 "Optimizing and caching browser bundles...",显示如下. [[email protected] kibana]#

aws ec2 keepalived 的高可用构建

前言: AWS 已有ALB (Application Load Balancer) 和 NLB (Network Load Balancer),可滿足大部分業務需求,但某些業務場景仍需要自建高可用環境.此文便是基於AWS EC2 自建高可用主機. 準備: EC2 host1:192.168.10.10EC2 host2:192.168.10.20Float IP:192.168.10.30 思路: AWS EC2 主機支持分配輔助IP,可使用AWS CLI 創建輔助IP,基於此方式,只要當主機或

AWS EC2避免误删软件包和数据的方法:取消“终止删除”默认配置

本文介绍AWS在终止实例的时候如何保留根卷,避免误删软件包和数据. 作者:光环云 尹晓征 在aws控制台创建EC2的时候,我们在添加存储步骤中,如果使用默认配置的情况下,“终止时删除”配置默认是被选中的,就是说在这个实例被终止的时候,所挂载的这个EBS卷也同时会被删除:这样带来的影响就是我们在这个卷中所配置的软件包或者存储的数据也就直接被删除了. 但是很不幸,aws的web管理控制台并没有选项取消这个默认配置,那么我们有没有方案能够满足这个需求呢?答案是有的,就是需要通过aws的cli命令行工具

在NodeJS中配置aws ec2

获取access key和secret access key 自己账户下有security credentials的选项 然后点击Access Keys 根据提示create new access key 安装SDK  npm install aws-sdk --save 在app.js中,声明引用aws-sdk  var AWS = require('aws-sdk'); 配置EC2的服务           在项目根目录下新建文件config.json,输入以下内容保存  { "access