AWS JAVA SDK получает публичный IP-адрес задачи - PullRequest
0 голосов
/ 23 октября 2018

У меня небольшая проблема.Я запускаю задачу (Docker-контейнер) через JAVA SDK.Это работает отлично.

Но теперь я хочу получить общедоступный IP-адрес через SDK и не знаю, как.

здесь мой существующий код.

RunTaskRequest request = new RunTaskRequest()
                .withCluster("JuiceShop")
                .withTaskDefinition("startJuiceShop:1")
                .withNetworkConfiguration(networkConfiguration)
                .withLaunchType("FARGATE");
RunTaskResult response = client.runTask(request);

Ответсодержит контейнер, но сетевые устройства еще не подключены.Есть ли простой способ получить публичный IPV4?

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Вам потребуется сделать несколько вызовов API AWS, чтобы получить публичный IPv4-адрес.Вот шаги.

  1. После выполнения операции taskRun.Сохраните taskFullArn из Output.
  2. Используя вышеуказанные taskArn и имя кластера, выполните вызов операции descriptionTasks.https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/ecs/AmazonECS.html#describeTasks-com.amazonaws.services.ecs.model.DescribeTasksRequest-.

Пример -

AmazonECS client = AmazonECSClientBuilder.standard().build();
DescribeTasksRequest request = new DescribeTasksRequest().withTasks("c5cba4eb-5dad-405e-96db-71ef8eefe6a8");
DescribeTasksResult response = client.describeTasks(request);
Выше API предоставит вам ответ с данными о сетевых вложениях.

"attachments": [{"id": "xxxxx-d02c-4a9d-ae79-xxxxxxx", "тип ":" ElasticNetworkInterface "," status ":" ATTACHED "," details ": [{" name ":" subnetId "," value ":" subnet-xxxxx "}, {" name ":" networkInterfaceId ","value ":" eni-e5aa89a3 "}, {" name ":" macAddress "," value ":" xxxxx "}, {" name ":" privateIPv4Address "," value ":" 172.31.94.215 "}]}]

Возьмите networkInterfaceId из приведенного выше ответа API и выполните следующий вызов. Вызовите AWS EC2 descriptionNetworkInterfaces.https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/ec2/AmazonEC2Client.html#describeNetworkInterfaces-com.amazonaws.services.ec2.model.DescribeNetworkInterfacesRequest-

Пример -

AmazonEC2 client = AmazonEC2ClientBuilder.standard().build();
DescribeNetworkInterfacesRequest request = new DescribeNetworkInterfacesRequest().withNetworkInterfaceIds("eni-e5aa89a3");
DescribeNetworkInterfacesResult response = client.describeNetworkInterfaces(request);
Выше должен дать DescriberNetworkInterfaceResult с PublicIp контейнера.https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/ec2/model/NetworkInterfaceAssociation.html#getPublicIp--

{"NetworkInterfaces": [{"Association": {"IpOwnerId": "amazon", "PublicDnsName": "ec2-52-xx-xx-xx.compute-1.amazonaws.com "," PublicIp ":" 52.xx.xx.xx "}]}

Примечание. Вам нужно будет выполнить шаг 2, пока задача не будет запущена, иначе вы не получите желаемого результата.Поэтому, вероятно, поспите пару секунд после runTask и посмотрите, запущена ли и запущена ли задача, затем выполните оставшиеся шаги.
0 голосов
/ 25 октября 2018

Конечная точка метаданных задачи позволит вам получить сетевую информацию о вашем контейнере.Если вы присоединяете EIP, вам нужно будет использовать IPv4 из контейнера, чтобы найти EIP с SDK.

Похоже, сейчас есть служба метаданных v3!

...