Как получить IP-адрес экземпляра EC2, запущенного с помощью CLI, для последующего использования?

Мне часто нужно запускать экземпляры AWS EC2 для работы из командной строки, чтобы работать с ними через SSH, и я хотел бы написать для этого короткий скрипт, но я застрял на самых основных шагах.

Например, я могу начать с

aws ec2 start-instances --instance-ids i-84Sd8jdf 

и хотел бы продолжить, захватив IP-адрес, назначенный экземпляру, и используя его в качестве переменной среды или переменной сценария для выполнения последующих операций, таких как

ssh ubuntu@<theIP>

or

scp ubuntu@<theIP>:~/soruce_stuff/* ~/dest_folder/

но я не могу понять, как получить IP-адрес из команды start-instances или из любого JSON, испускаемого другими командами.

Как создать скрипт для запуска экземпляров EC2, ношения для назначения IP-адреса и захвата назначенного IP-адреса для последующего использования?


person orome    schedule 20.05.2016    source источник
comment
Возможный дубликат Список общедоступных IP-адресов экземпляров EC2. Просто позвоните describe-instances вскоре после запуска вашего экземпляра, следуя примеру в этом связанном ответе.   -  person Anthony Neace    schedule 20.05.2016
comment
@AnthonyNeace: Как мне перейти из списка IP-адресов к (а) адресу только что запущенного экземпляра, который я могу (б) назначить переменной среды (например)?   -  person orome    schedule 21.05.2016
comment
Поскольку вы знаете идентификатор экземпляра, вы можете использовать параметр --instance-ids для describe-instances, чтобы отфильтровать результат для вашего единственного экземпляра, а затем использовать строку запроса из этого ответа, чтобы отфильтровать до единственного адреса, который вам нужен.   -  person Anthony Neace    schedule 21.05.2016
comment
@AnthonyNeace: Хорошо! Это не совсем дубликат связанного вопроса; поэтому я бы воспринял это как ответ (особенно, если бы он дополнительно показал, как передать или что-то еще в переменную env и/или переменную сценария). И даже лучше: если бы был способ заставить скрипт ждать, пока IP-адрес не станет доступен.   -  person orome    schedule 21.05.2016


Ответы (2)


Amazon предлагает условие ожидания, чтобы дождаться готовности экземпляра, прежде чем вы сможете выполнять на нем другие задачи. Вот пример может вам помочь

aws ec2 start-instances --instance-ids $instance_id
aws ec2 wait instance-running --instance-ids $instance_id
aws ec2 describe-instances --instance-ids $instance_id --output text|grep ASSOCIATION |awk '{print $3}'|head -1
person Prash    schedule 09.06.2017

Пример (на основе этого отличного ответа) в bash, где запущен экземпляр, скрипт спит (указанный в секунд), а общедоступный IP-адрес сохраняется в локальной переменной:

aws ec2 start-instances --instance-ids i-aaaa1111
sleep 10
ec2Address=$(aws ec2 describe-instances --instance-ids i-aaaa1111 --query "Reservations[*].Instances[*].PublicIpAddress" --output=text)

Проверять:

echo $ec2Address
11.1.111.111
person Anthony Neace    schedule 20.05.2016