Skip to content

ozamodaz/aws-ec2-rotate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 

Repository files navigation

Скрипт позволяет обновлять IP адреса AWS ec2 инстансов за счет того, что если вы не приаттачили к инстансу выделенный Elastic IP, то stop инстанса и последующий start инстанса приведет к тому, что он получит другой IP-адрес.

Скрипт позволяет автоматизировать это через Cron. Скрипт получает список работающих инстансов по определенному тегу, по-умолчанию это тег Group, сортирует их по времени работы и те инстансы, которые уже работают дольше, чем MIN_TTL минут будут стопнуты и затем обратно запущены.

PS1

Владельцам больших ферм на 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 на новый волум

  • Ебешься с загрузчиком

PS2

(Не стоит пытаться сделать такое же для Google Cloud. Они выделяют постоянный пул адресов, проверяли.)


Создание юзера

Для работы скрипта нужно создать пользователя, выбрав AWS credential type: Programmatic access и выдать ему доступ, достаточный чтобы запрашивать список инстансов, а также делать стоп и старт инстансов.

AmazonEC2FullAccess точно хватит, но если у вас много лишнего времени - можете вручную наклацать более узкие права.

https://docs.aws.amazon.com/powershell/latest/userguide/pstools-appendix-sign-up.html

6

7


Создание инстансов

1 3

IMPORTANT - создание тега группы 10


Environment Variables:

MIN_TTL - сколько минимум отработает инстанс, прежде чем попадет под ротацию (default 30min)

PERCENT_TO_ROTATE - процент инстансов, которые будут стопаться за один запуск скрипта, чтобы никогда не стопать всю ферму (default 25%)

AWS_EC2_ROTATE_REGION - регион AWS, по которому будет работать скрипт, например, eu-north-1)

KEY_ID - получите когда создадите пользователя

KEY_SECRET - получите когда создадите пользователя


Установка:

  1. Устанавливаете python3, python3-pip

  2. Устанавливаете зависимости через pip3 install -r requirements.txt

  3. Создаете пользователя, как описано ниже, получаете KEY_ID и KEY_SECRET

  4. Запускаете редактирование 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

About

rotate aws ec2 instances to get new IP

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages