Получить внешнюю ссылку задачи ecs, запущенной из aws cli

Как получить внешнюю ссылку на запущенную задачу aws ecs, у которой есть общедоступный IP-адрес экземпляра контейнера и порт запущенной задачи?

Я управляю выполнением задачи / службы из cli и хочу получить внешнюю ссылку, которая отображается в пользовательском интерфейсе aws, из aws cli. Я попробовал команду описать задачи в aws cli, но она не возвращает общедоступный IP-адрес экземпляра, на котором выполняется задача.

Есть ли способ получить то же самое из aws cli?

Заранее спасибо!


person pmann    schedule 30.08.2016    source источник
comment
Удалось получить внешнюю ссылку через cli или sdk? Я тоже ищу внешнюю ссылку.   -  person testphreak    schedule 20.06.2018
comment
Привет @testphreak, мне удалось добиться этого с помощью cli, вместо одной команды cli необходимо запустить несколько, чтобы получить внешний IP-адрес для обслуживания   -  person pmann    schedule 21.06.2018
comment
Было бы здорово, если бы вы могли показать рабочий пример.   -  person testphreak    schedule 21.06.2018


Ответы (3)


Это довольно неприятно для шеи, но оно сделает то, что вы хотите:

  1. Составьте список задач по названию службы

aws ecs list-tasks --cluster mycluster --service-name my-service-name

  1. Получите подробную информацию о задаче, используя ARN задачи из приведенного выше.

aws ecs describe-tasks --cluster mycluster --tasks arn:aws:ecs:us-east-1:999999999999:task/ad0ba3e9-ac3b-4a4c-a1af-de3e06f46dfa

  1. Описание задачи включает в себя две части необходимой информации: сетевые привязки, которые включают порт (ищите тот, который сопоставлен с нужным вам сервисным портом) и ARN экземпляра контейнера. (НЕ контейнер ARN. Не делайте этой ошибки и не запутайтесь, когда следующий шаг не удастся, как это сделал я). Используя ARN экземпляра контейнера, получите подробную информацию об экземпляре контейнера:

aws ecs describe-container-instances --cluster mycluster --container-instances arn:aws:ecs:us-east-1:999999999999:container-instance/707e5193-51e3-454b-ba09-9745c5d7f527

  1. В рамках этого описания вы сможете получить идентификатор экземпляра EC2 и запросить EC2 для получения дополнительных сведений:

aws ec2 describe-instances --instance-ids i-c91aee40d92c23b3c ^^^^ NOT ECS

Вывод этой команды должен включать частный IP-адрес экземпляра EC2. Этот IP + ранее вычисленный порт должен соответствовать внешней ссылке из веб-интерфейса.

ПРИМЕЧАНИЕ. Данные были анонимными, но все равно должны ВЫГЛЯДИТЬ так, как вы можете ожидать. Также я пропустил параметры региона и профиля AWS, которые я установил по умолчанию, используя переменные среды.

person Tim Keating    schedule 29.06.2018

Это должно показать ваш IP-адрес Ingress, который является общедоступным URL-адресом и обычно затем сопоставляется с вашим доменом как запись типа A с помощью консоли AWS route53, чтобы ваши пользователи могли получить доступ к нему, просто используя ваш URL-адрес domain.com/lalala.

aws ecs describe-services --service my-http-service

чтобы обнаружить эту и другие команды, инструмент командной строки aws на самом деле очень дружелюбен ... просто введите

aws help

затем просмотрите этот список доступных подкоманд верхнего уровня, затем разверните его, выполнив

aws ecs help

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

ecs ecs describe-services help
person Scott Stensland    schedule 30.08.2016
comment
Это лучший пример того, как начать работу с aws ec2, не догадываясь об использовании OP. - person Marc Young; 01.09.2016
comment
Привет, @Scott Stensland. Я уже проверил это, и возвращенные детали - это детали обслуживания, развертывания и события. В деталях службы отображаются детали балансировщика нагрузки, но в моем случае я не использую балансировщик нагрузки. - person pmann; 01.09.2016

Вы можете найти нужный ответ, запустив:

aws ecs describe-tasks --cluster foo --tasks 8591006e-6f05-4886-bc4a-58d9063d3852

Он будет содержать такой раздел networkBindings:

"networkBindings": [
                    {
                        "protocol": "tcp", 
                        "bindIP": "0.0.0.0", 
                        "containerPort": 7000, 
                        "hostPort": 32769
                    }, 
                    {
                        "protocol": "tcp", 
                        "bindIP": "0.0.0.0", 
                        "containerPort": 7001, 
                        "hostPort": 32768
                    }
                ]

Тогда ты золотой!

person user1316072    schedule 10.03.2017
comment
Неверный ответ. @pmann запрашивает внешнюю ссылку на задачу aws ecs, и эта информация отсутствует в разделе NetworkBindings. Я вижу это только из консоли пользовательского интерфейса. - person testphreak; 20.06.2018
comment
Он присутствует на самом деле. Вам просто нужно добавить IP и порт вместе, чтобы создать внешнюю ссылку вместе. - person user1316072; 21.06.2018
comment
Было бы здорово, если бы вы могли показать пример того, как вы получаете IP. Потому что, когда я попробовал, все, что у меня было, это раздел networkBindings без IP. bindIP не является внешним IP-адресом, если вы это имеете в виду. - person testphreak; 21.06.2018
comment
Точно! Все ответы, которые я нашел, упускают из виду тот факт, что сетевые привязки не содержат внешний IP ... это именно то, что мне (и, предположительно, OP) нужно! - person Tim Keating; 28.06.2018