java - AWS JAVA SDK 获取任务的公共 IP
问题描述
我有一个小问题。我正在通过 JAVA SDK 启动一个任务(docker 容器)。这很好用。
但是现在想通过SDK获取公网IP,不知道怎么做。
到目前为止,这是我现有的代码。
RunTaskRequest request = new RunTaskRequest()
.withCluster("JuiceShop")
.withTaskDefinition("startJuiceShop:1")
.withNetworkConfiguration(networkConfiguration)
.withLaunchType("FARGATE");
RunTaskResult response = client.runTask(request);
响应包含容器,但尚未连接网络设备。有没有一种简单的方法来获得公共 IPV4?
解决方案
您将需要进行多次 AWS API 调用以获取公共 IPv4 地址。以下是步骤。
- 一旦你执行 taskRun 操作。从输出中保留 taskFullArn。
- 使用上述 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);
- 以上 API 将为您提供网络附件详细信息的响应。
“附件”:[{“id”:“xxxxx-d02c-4a9d-ae79-xxxxxxx”,“类型”:“ElasticNetworkInterface”,“状态”:“附加”,“详细信息”:[{“名称”:“subnetId ", "值": "subnet-xxxxx" }, { "name": "networkInterfaceId", "value": "eni-e5aa89a3" }, { "name":“macAddress”,“value”:“xxxxx”},{“name”:“privateIPv4Address”,“value”:“172.31.94.215”}]}],
- 从上面的 API 响应中获取 networkInterfaceId 并进行以下调用。
- 调用 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);
- 上面应该给 DescriberNetworkInterfaceResult 和容器的 PublicIp。 https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/ec2/model/NetworkInterfaceAssociation.html#getPublicIp--
{“网络接口”:[{“关联”:{“IpOwnerId”:“亚马逊”,“PublicDnsName”:“ec2-52-xx-xx-xx.compute-1.amazonaws.com”,“PublicIp”:“52 .xx.xx.xx" } ] }
- 注意 - 您需要执行第 2 步,直到任务启动并运行,否则您将无法获得所需的结果。所以很可能,在 runTask 之后休眠几秒钟,看看 Task 是否启动并运行,然后执行剩余的步骤。
推荐阅读
- javascript - 如何禁用 CSS 过渡,更新样式,然后使用 JavaScript 快速恢复过渡
- r - 在标识符的值内将重叠间隔拆分为非重叠间隔
- c++ - 通过传递其长度在函数内部声明一个数组
- umbraco - 如何在本地环境中备份/设置 Umbraco 生产站点的副本
- akka-http - Akka-http 与 Akka-Remoting
- python - 如何根据 PySpark 数据框的另一列中的值修改列?F.当边缘情况
- javascript - 使用 JavaScript 将数字数组转换为字符串并返回到单个函数中的数字数组
- python - 如何以严格的顺序调用函数?
- java - 如何相对于图中的距离创建从单个节点传播的边
- javascript - maxFontSizeMultiplier 道具全部