一、前提
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也不会配置。
至此操作完成。