繁体   English   中英

AWS JAVA SDK获取任务的公共IP

[英]AWS JAVA SDK get public IP of Task

我有一个小问题。 我正在通过JAVA SDK启动任务(泊坞窗容器)。 这很好。

但是现在我想通过SDK来获取公共IP,但不知道如何使用。

这是到目前为止我现有的代码。

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

响应包含容器,但尚未连接网络设备。 是否有一种简单的方法来获取公共IPV4?

您将需要进行多个AWS API调用以获得公共IPv4地址。 步骤如下。

  1. 一旦执行taskRun操作。 保留taskFullArn从输出。
  2. 使用以上taskArn和群集名称,进行describeTasks操作调用。 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);
  1. 上面的API将为您提供网络附件详细信息的响应。

“附件”:[{“ id”:“ xxxxx-d02c-4a9d-ae79-xxxxxxx”,“ type”:“ 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”}]}],

  1. 从上面的API响应中获取networkInterfaceId并进行以下调用。
  2. 调用AWS EC2 describeNetworkInterfaces。 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);
  1. 上面应该给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“}]}

  1. 注意-您将需要执行第2步,直到任务启动并运行,否则您将无法获得理想的结果。 因此,可能要在runTask之后休眠几秒钟,然后查看Task是否已启动并正在运行,然后执行其余步骤。

任务元数据端点将使您能够获取有关容器的网络信息。 如果要附加EIP,则必须使用容器中的IPv4才能通过SDK查找EIP。

看起来现在有元数据服务v3!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM