背景
AWS 的EC2备份可以有很多方法,如果管理员熟悉脚本和Lambda,完全可以通过Cloudwatch的事件来定时备份,甚至可以直接在Windows的计划任务里面跑个简单的PowerShell脚本都能实现。
AWS官方也提供了一个一揽子的解决方案叫做 ops automation,这个很适合对于脚本完全不懂的管理员,配置好以后管理员通过对应的tag可以进行灵活的自定义操作。
下面这个截图是官方的示意图
具体的解释和配置向导的过程可以参考这个链接,不过目前暂不提供中文翻译
https://aws.amazon.com/solutions/ops-automator/
对于普通的用户来说,看了这个示意图能从一个高层抽象的角度去理解他的过程就行了,但是不需要去具体了解如何调用的。更重要的是知道如何去配置和使用。
简单的解释一下安装和配置的过程,通过Cloudformation我们可以安装一个叫做 AWS Ops Automator的stack 模板(我称为主模板),这个stack会自动配置一系列的微服务,包括Lambda函数,DynamoDB数据库等等,同时他会自动创建一个S3的bucket,并在这个bucket里面保存了6个stack 模板文件,刚好对应他的6个任务功能:创建快照,拷贝快照,删除快照,替换实例,更改实例类型和通过cpu利用率对实例进行标记。 如果我们需要他的某一个功能,那我们就需要通过对应的模板文件再次添加一个新的stack(我称为任务模板)。比如说,如果我们需要实现一个定时创建快照的功能,我们需要首先配置一个主stack,然后配置一个定时创建快照的任务stack,然后通过这个主模板来调用这个任务模板
那么怎么调用这些功能呢?我们在对应的EC2或者snapshot上面进行tag标记,将AWS Ops Automator的tag name赋予key,然后将对应的任务stack的tag name赋予 value,他就会通过主stack去调用对应的task stack了。
这个逻辑如果光看文字是比较迷惑的,最容易理解的方法就是直接动手操作一次。举个栗子,我打算实现每天定时在8:30,11:30,15:30和20:30这4个点进行快照备份,然后所有的快照超过30天以上的自动删除。下面看看怎么来实现的。
安装配置流程
安装主模板
首先安装我们的主模板,安装的时候注意在右上角选定自己需要的region,他的安装向导默认是在US East安装的,一定要记得修改。
配置stack的内容,关键的东西是taskscheduler tagname,这个是我们后面添加tag的时候,key的名字。
点击下一步
Review一下
记得勾选最下面的IAM选项
然后他就会自动开始配置相关的资源和微服务
状态变为Complete之后,点击output,查看对应的S3 bucket名称
点开对应的bucket看看,里面有2个目录,AccountsConfiguration是用来给其他账号配置IAM的权限,如果我们就用这个主账号操作的话可以暂时忽略;TaskConfiguration里面包括了6个Task Template,也就是我们需要操作的任务模板。
安装任务模板
点进去看看
点开Ec2CreateSnapshot.template,记录他的URL地址
然后回到Cloudformation里面,通过这个模板创建一个新的stack
根据自己的需要进行设置,这里关键是Task interval需要使用cron格式来进行配置
其他的自定义属性,比如时区
以及在创建的Snapshot上面,自动添加对应的tag,注意这个Delete30是我下一步要创建的stack的名字,他的作用是自动删除快照
稍等片刻,这个备份的stack就准备好了
创建配置Delete30 stack
这个步骤和上面基本类似,唯一的区别是我们需要使用Ec2DeleteSnapshot.template
相关的配置如下所示
时区
注意这个删除的操作并不是根据时间来的,而是每次创建新的snapshot的时候,这个事件会触发,根据我的观察,大概创建了snapshot 15分钟之后,他会扫描这个volume相关的snapshot,如果有标记的话,就根据设定的阈值进行删除旧的snapshot
设定删除的阈值,要么根据天数,要么根据总的个数
创建好的样子
Tag标记
最后看看如何tag,点开一个EC2,进行标记
根据我设定的时间 他会自动备份,在生成的snapshot上,我们可以看见对应的信息
如果我们设定了多个不同task template的stack,我们在进行标记的时候可以用逗号进行区分
查看历史记录
豆子一般是在cloudtrail里面查看相关的记录,不过可以看见日志比较凌乱
好在AWS提供了Athena,可以把cloudtrail的日志转换成table,然后通过sql语句来查询