Скрипт позволяет обновлять IP адреса AWS ec2 инстансов за счет того, что если вы не приаттачили к инстансу выделенный Elastic IP, то stop инстанса и последующий start инстанса приведет к тому, что он получит другой IP-адрес.
Скрипт позволяет автоматизировать это через Cron. Скрипт получает список работающих инстансов по определенному тегу, по-умолчанию это тег Group, сортирует их по времени работы и те инстансы, которые уже работают дольше, чем MIN_TTL
минут будут стопнуты и затем обратно запущены.
Владельцам больших ферм на AWS предлагаю кастомный AMI-образ Ubuntu - ami-05e9aa118a3b86d6f
(регион eu-west-3), чтобы вы не платили за пустое место на EBS-волумах, так как все стандартные образы ОС по 8гб, но реально там файлов меньше 1гб, а если удалить man-pages, тексты лицензий и несколько пакетов - и того меньше. Пример:
root@ip-10-0-31-9:~# df -h | grep nvme0n1p1
/dev/nvme0n1p1 2.0G 555M 1.3G 30% /
Кто не доверяет чужим образам рассказываю как такое сделать самому:
-
Создаёшь тазик с ванильного образа 8гб
-
Аттачишь к нему пустой волум 2гб
-
Размечаешь, создаёшь ФС, монтируешь
-
Делаешь rsync корня на новый волум
-
Правишь uuid в fstab, grub.cfg
-
Делаешь Chroot на новый волум
-
Ебешься с загрузчиком
(Не стоит пытаться сделать такое же для Google Cloud. Они выделяют постоянный пул адресов, проверяли.)
Для работы скрипта нужно создать пользователя, выбрав AWS credential type: Programmatic access и выдать ему доступ, достаточный чтобы запрашивать список инстансов, а также делать стоп и старт инстансов.
AmazonEC2FullAccess
точно хватит, но если у вас много лишнего времени - можете вручную наклацать более узкие права.
https://docs.aws.amazon.com/powershell/latest/userguide/pstools-appendix-sign-up.html
IMPORTANT - создание тега группы
MIN_TTL
- сколько минимум отработает инстанс, прежде чем попадет под ротацию (default 30min)
PERCENT_TO_ROTATE
- процент инстансов, которые будут стопаться за один запуск скрипта, чтобы никогда не стопать всю ферму (default 25%)
AWS_EC2_ROTATE_REGION
- регион AWS, по которому будет работать скрипт, например, eu-north-1)
KEY_ID
- получите когда создадите пользователя
KEY_SECRET
- получите когда создадите пользователя
-
Устанавливаете
python3
,python3-pip
-
Устанавливаете зависимости через
pip3 install -r requirements.txt
-
Создаете пользователя, как описано ниже, получаете
KEY_ID
иKEY_SECRET
-
Запускаете редактирование Cron через
crontab -e
, обязательно прописываете ЕнвыAWS_EC2_ROTATE_REGION
,KEY_ID
иKEY_SECRET
, опционально прописываетеMIN_TTL
иPERCENT_TO_ROTATE
если не устраивают значения по-умолчанию, ну и прописываете запуск самого скрипта в формате Крон, для примера, если вы проставили инстансам тегGroup
со значениемrotate_me_group
:
*/30 * * * * /usr/bin/python3 /home/ozamodaz/aws-ec2-rotate/rotate.py rotate_me_group >> /tmp/aws-ec2-rotate.log 2>&1