it-roy-ru.com

Решение для локальных изменений IP-адресов экземпляров AWS EC2

Amazon предоставляет вам только определенное количество статических IP-адресов, и локальные (частные) IP-адреса каждого экземпляра EC2 могут изменяться при перезапуске компьютера. Это делает создание стабильной платформы, где экземпляры EC2 зависят друг от друга до смешного, насколько я могу судить, сложным для использования.

Я много искал в Интернете о различных решениях и до сих пор не нашел ничего разумного, кроме назначения эластичного IP-адреса для любого EC2, даже если он не является публичным. Есть ли у кого-нибудь еще хорошие идеи, которые на самом деле легко реализовать?

Спасибо!

См. Ответ команды AWS на вопрос Статический локальный IP :

Внутренний IP-адрес экземпляров EC2 назначается через DHCP. На Завершение работы экземпляра или по истечении срока аренды DHCP IP-адрес вернулся в общий пул адресов EC2 DHCP, доступный для других экземпляров.

Нет никакого способа гарантировать, что вы получите тот же DHCP адрес через перезагрузки.

Edit: Ответ заключается в использовании Amazon VPC. Там нет недостатка, кроме тривиального объема дополнительной настройки, потому что теперь вы контролируете маршрутизатор. Это мир, отличный от старого старого экземпляра EC2 на AWS. На самом деле это так необходимо, что VPC будет включен для всех будущих настроек AWS по умолчанию. См. Этот пост для получения дополнительной информации: http://www.reddit.com/r/aws/comments/1a3n0r/ec2_update_virtual_private_clouds_for_everyone/

24
Mauvis Ledford

Основные ответы:

  1. Используйте AWS VPC чтобы иметь полный контроль над адресацией экземпляра
  2. Используйте Elastic IP-адреса, которые будут разрешаться по адресу local экземпляра (не общедоступному, как вы ожидаете) при использовании для связи между экземплярами EC2
16
gabrtv

Я наткнулся на третий вариант. Есть ec2-ssh от ребят из Instragram. Это скрипт Python Shell, который вы устанавливаете глобально и позволяет вам запрашивать общедоступные dns ваших экземпляров ec2 по имени тега, а также через ssh через имя тега.

Документация к нему практически отсутствует. Я записал шаги для установки ниже:

Чтобы установить ec2-ssh:

  1. Sudo yum install python-boto (оболочка python для ec2 api)
  2. git clone https://github.com/Instagram/ec2-ssh
  3. В вашем ~/.bash_profile установите ключ доступа и секретный ключ AWS следующим образом:

    экспорт AWS_ACCESS_KEY_ID = XYZ123

    экспорт AWS_SECRET_ACCESS_KEY = XYZ123

  4. cd в папке репозитория bin будет два файла:

    ec2-Host и ec2-ssh

скопируйте их в свой /usr/bin или /usr/local/bin.

Теперь вы можете делать потрясающие вещи, такие как:

$ ec2-Host ZenWorker
ec2-999-xy-999-99.compute-1.amazonaws.com

а также

$ ec2-ssh ZenWorker
Connecting to ec2-999-xy-999-99.compute-1.amazonaws.com.

Обратите внимание, что в ваших обычных сценариях Shell вы можете использовать обратные ссылки для вызова этих глобальных инструментов. Я рассчитал время этих вызовов, и они занимают от 0,25 до 0,5 секунды, используя экземпляр EC2, так что это действительно единственный недостаток. Возможно, вы можете жить с задержкой или использовать тот факт, что общедоступный DNS изменяется только для экземпляра при перезагрузке, чтобы найти решение.

Обратите внимание, что эти две программы являются скриптами командной строки, и вам не нужны знания Python для их использования. Для поклонников PHP или тех, кто также хочет получить простой способ scp файлов, не зная изменяющегося публичного DNS, вы можете проверить ec2dns .

13
Mauvis Ledford

Я был в той же ситуации один раз. У меня все еще нет опыта, чтобы решить это должным образом. Моим уродливым решением было использовать elb не для балансировки нагрузки, а только для конечной точки.

Но я думаю, что хорошее решение можно получить с помощью aws vpc .

1
Josnidhin

Вот еще одно решение Ruby для Обновление DNS маршрута 53 с экземпляра на AWS . Вы не должны ссылаться на необработанные сторонние системные IP-адреса в своих приложениях или конфигурациях сервера.

1
kixorz

вы можете изменить IP-адрес с помощью Elastic Ip: Вы можете сделать с помощью кода C #:

 var associateRequest = new AssociateAddressRequest
            {
                 PublicIp = your Elastic Ip,
                 InstanceId = Your Instance Id Which You Assign
            };    
        amazonEc2Client.AssociateAddress(associateRequest);

после этого деассоциации.

        var disAssociateRequest = new isassociateAddressRequest(publicIp.ElasticIpAddress1);
  AmazonEc2Client.DisassociateAddress(your Elastic Ip);

Ваш публичный IP изменится

0
Viral Prajapati