获取从 aws cli 运行的 ecs 任务的外部链接
Posted
技术标签:
【中文标题】获取从 aws cli 运行的 ecs 任务的外部链接【英文标题】:Fetch external link of ecs task running from aws cli 【发布时间】:2017-01-06 06:32:02 【问题描述】:如何获取正在运行的aws ecs任务的外部链接,其中包含容器实例的公共ip和正在运行的任务的端口?
我正在从 cli 管理任务/服务执行,并希望从 aws cli 获取显示在 aws UI 中的外部链接。我尝试了 aws cli 的 describe-tasks 命令,但它没有返回运行任务的实例的公共 IP 地址。
有没有办法从 aws cli 中获取相同的内容?
提前致谢!
【问题讨论】:
您是否设法通过 cli 或 sdk 获取外部链接?我也在寻找外部链接。 嗨@testphreak,我能够用cli实现这一点,而不是单个cli命令需要运行多个来获取服务的外部ip 如果你能展示一个工作示例会很棒。 【参考方案1】:这是相当痛苦的脖子,但它会做你想做的:
-
按服务名称列出您的任务
aws ecs list-tasks --cluster mycluster --service-name my-service-name
-
使用上述任务 ARN 获取任务的详细信息。
aws ecs describe-tasks --cluster mycluster --tasks arn:aws:ecs:us-east-1:999999999999:task/ad0ba3e9-ac3b-4a4c-a1af-de3e06f46dfa
-
任务描述包括您需要的两条信息:网络绑定,其中包括端口(查找映射到您关心的服务端口的端口)和容器实例 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
-
作为此描述的一部分,您应该能够获取 EC2 实例 ID 并查询 EC2 以了解更多详细信息:
aws ec2 describe-instances --instance-ids i-c91aee40d92c23b3c
^^^^ NOT ECS
此命令的输出应包含 EC2 实例的私有 IP。这个 IP + 之前计算的端口应该对应于来自 Web UI 的外部链接。
注意:数据已匿名化,但仍应与您预期看到的一样。此外,我省略了 AWS 区域和配置文件参数,我已使用环境变量将其设置为默认值。
【讨论】:
【参考方案2】:这应该显示您的入口 IP 地址,它是一个公共 URL,然后通常使用 AWS route53 控制台作为 A 类记录映射到您的域,这样您的用户就可以使用您的 URL domain.com/lalala 访问相同的地址
aws ecs describe-services --service my-http-service
要发现这个命令和其他命令,aws
命令行工具实际上非常友好......只需发出
aws help
然后查看可用子命令的***列表,然后通过发出向下钻取
aws ecs help
然后重复上面的操作,深入挖掘可用的命令,直到你找到可以工作的东西......就像在
ecs ecs describe-services help
【讨论】:
这是如何在不猜测 OP 用法的情况下开始使用aws ec2
的最佳示例。
嗨@Scott Stensland 我已经检查过了,其中返回的详细信息是服务详细信息、部署和事件。在服务详细信息中显示了负载均衡器的详细信息,但在我的情况下我没有使用任何负载均衡器。【参考方案3】:
你可以通过运行得到你想要的答案:
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
]
那你就是金子了!
【讨论】:
错误答案。 @pmann 要求“aws ecs 任务的外部链接”,而 NetworkBindings 部分中不存在该信息。我只能从 UI 控制台看到它。 实际存在。您只需要将IP和端口一起添加,即可构建外部链接。 如果您能展示一个如何获取 IP 的示例,那就太好了。因为当我尝试它时,我得到的只是没有 IP 的 networkBindings 部分。如果这就是您的意思,bindIP 不是外部 ip。 没错!我找到的所有答案都忽略了网络绑定不包含外部 IP 的事实......这正是我(可能是 OP)所需要的!以上是关于获取从 aws cli 运行的 ecs 任务的外部链接的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 AWS CLI 运行 ECS 任务时出现资源:内存错误
aws 如何从生产环境中的 lambda 函数访问 ECS 服务
如何在 AWS ECS 集群的服务中运行 AWS ECS 任务,而不是将服务从 Circle CI 的“aws-ecs/run-task”中排除