Ответ
Elastic IP (EIP) — это статический публичный IPv4-адрес в AWS, который можно выделить для своего аккаунта и динамически привязывать к различным ресурсам, например, к EC2-инстансам или сетевым интерфейсам.
Проблема, которую он решает:
По умолчанию публичный IP-адрес, назначаемый EC2-инстансу, является динамическим. Он меняется каждый раз, когда инстанс останавливается и запускается. Это делает невозможным надежное обращение к серверу по IP-адресу (например, через DNS A-запись).
Решение с помощью Elastic IP:
EIP привязывается к вашему аккаунту, а не к конкретному инстансу. Вы можете в любой момент "переключить" его с одного инстанса на другой. Это обеспечивает стабильную точку входа для вашего приложения, даже если базовый сервер выходит из строя и его нужно заменить.
Ключевые особенности:
- Статичность: Адрес не меняется при перезапуске или замене инстанса.
- Гибкость: Можно быстро переназначить EIP на другой инстанс в том же регионе для минимизации времени простоя.
- Тарификация: EIP бесплатен, пока он привязан к работающему EC2-инстансу. Плата взимается, если EIP выделен, но не используется, чтобы мотивировать освобождение дефицитных IPv4-адресов.
Пример привязки EIP к инстансу с помощью Python (boto3):
import boto3
ec2 = boto3.client('ec2', region_name='us-east-1')
# 1. Выделяем новый Elastic IP
response = ec2.allocate_address(Domain='vpc')
allocation_id = response['AllocationId']
public_ip = response['PublicIp']
print(f"Выделен новый EIP: {public_ip}")
# 2. Привязываем его к существующему инстансу
ec2.associate_address(
InstanceId='i-0123456789abcdef0', # ID вашего инстанса
AllocationId=allocation_id
)
print(f"EIP {public_ip} успешно привязан к инстансу.")
Аналогичные сервисы есть и у других провайдеров: Static IP в Google Cloud и Public IP addresses (Static) в Azure.
Ответ 18+ 🔞
Давай разжую про эти статические адреса в AWS, а то народ путается, как в трёх соснах, блядь.
Ну смотри, есть у тебя сервер в облаке (EC2-инстанс, ёпта). По умолчанию ему выдают публичный IP-адрес, чтоб из интернета достучаться. И всё бы ничего, но адрес этот — полная хуйня! Он динамический, блядь. Остановил ты свой инстанс, потом запустил — и всё, пипец, адрес новый! Представь, ты настроил DNS-запись на этот IP, а он взял и поменялся. Пиздец, сайт не грузится, пользователи орут, а ты сидишь и чешешь репу.
Вот для этого и придумали Elastic IP, или EIP, если по-пацански. Это как твой личный, нахуй, статический IPv4-адрес, который привязан к твоему аккаунту, а не к железяке. Ты его выделил — и он твой, пока сам не отдашь обратно в AWS.
Что он делает, этот красавчик?
Главная фишка — стабильность, ёбта! Ты привязываешь этот EIP к своему серверу. Сервер сдох? Запустил новый, хуяк — и перепривязал на него этот же самый адрес. DNS даже моргнуть не успеет, всё работает. Время простоя — ноль ебать, волнение — пиздец, но ты-то спокоен, как удав.
Важный нюанс, про который все забывают, пока им не прилетит счёт:
Сам EIP — бесплатный, но только если он привязан к работающему инстансу. Выделил адрес и он просто болтается, ни к чему не привязан? Готовь денежки, дружок, AWS тебя за это накажет, потому что IPv4-адреса — дефицит, их на всех не хватает. Мотивируют, суки, не захламлять пул. Так что не создавай их просто так, для галочки, а то будет тебе сюрприз.
Ну и как это в коде выглядит? Смотри, не зевай:
import boto3
ec2 = boto3.client('ec2', region_name='us-east-1')
# 1. Выделяем новый Elastic IP
response = ec2.allocate_address(Domain='vpc')
allocation_id = response['AllocationId']
public_ip = response['PublicIp']
print(f"Выделен новый EIP: {public_ip}")
# 2. Привязываем его к существующему инстансу
ec2.associate_address(
InstanceId='i-0123456789abcdef0', # ID вашего инстанса
AllocationId=allocation_id
)
print(f"EIP {public_ip} успешно привязан к инстансу.")
Вот и вся магия. Выделил, привязал — и спи спокойно. У других облачных провайдеров, ясное дело, тоже есть подобные штуки: в Google Cloud это Static IP, а в Azure — Public IP addresses (Static). Названия разные, а суть одна: дать тебе постоянную точку входа, чтобы не бегать, как угорелый, после каждого перезапуска.