批量配置EC2 Autorecovery

一、前提

1、安装AWS CLI,并设置正确的区域,例如运行aws configure时候配置为宁夏区域。

2、安装Python3

3、安装Python3对应的boto3库,例如执行如下命令:

pip3 install boto3

需要注意的是要确认安装的版本是python3。

4、在本区域生成一个SNS Topic,生成的方法是可以是选一台EC2,通过AWS Console图形界面配置一下auto recovery,即可获得一个SNS Topic。

二、运行脚本生成虚拟机清单

1、下载并解压缩代码

wget https://blogimg.bitipcman.com/workshop/EC2-autorecovery/auto_recover.zip
unzip auto_recover.zip

获得listinst.py、config.json和setAlarm.py三个文件。

2、列出EC2清单

配置cli为正确的区域,然后执行如下命令。

python3 listinst.py

执行成功的话,返回结果如下。

id: i-0a8fc77fc09167870 state: running instance-status: ok system-status: ok
id: i-045c3b158346cf447 state: running instance-status: ok system-status: ok
id: i-0e812de60cccd71d9 state: running instance-status: ok system-status: ok
id: i-0bc81cfb824764376 state: running instance-status: ok system-status: ok
id: i-0eb33dc5168419a39 state: running instance-status: ok system-status: ok

由此将在当前目录下生成一个ec2_status.csv文件,其中将包含当前的EC2清单。

三、修改配置文件

编辑config.json,修改其中的region代号和SNS的ARN。修改后结果如下。

{
    "region":"cn-north-1",
    "SnsTopic":"arn:aws-cn:sns:cn-north-1:420029960748:ec2-recovery",
    "AlarmDescription":"When system check fails, auto recover the instance and send message to SNS topic",
    "AlarmNamePrefix":"EC2AutoRecoveryAlarm-",
    "DatapointsToAlarm":1,
    "Period":60,
    "EvaluationPeriods":1
}

保存退出。

此外还需要注意,本文提供的脚本默认是在AWS中国区域的,如果是在Global区域运行,需要修改setAlarm.py文件中第86行中的alarmAction方法,需要将 “arn:aws-cn:automate” 中的aws-cn修改为aws,也就是去掉cn区域。

修改完成后,将config.json和setAlarm.py以及上文生成的ec2_status.csv放在同一个目录下。

四、批量配置

运行如下命令。

python3 setAlarm.py

执行后返回结果如下。

$ python3 setAlarm.py                                                                                                               
Alarm already exists for i-0e78d424fb1baf8b4
Created alarm for i-0a8fc77fc09167870
Created alarm for i-045c3b158346cf447
Created alarm for i-0e812de60cccd71d9
Created alarm for i-0bc81cfb824764376
Created alarm for i-0eb33dc5168419a39

从以上返回结果可以看到,批量设置完成。

需要注意的是:1)已经有了Autorecovery的alarm的EC2不会被重复配置,另外处于Stop状态关机的EC2也不会配置。

至此操作完成。