【问题标题】:Fetch external link of ecs task running from aws cli获取从 aws cli 运行的 ecs 任务的外部链接
【发布时间】: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
  • 如果你能展示一个工作示例会很棒。

标签: amazon-web-services aws-cli amazon-ecs


【解决方案1】:

这是相当痛苦的脖子,但它会做你想做的:

  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 实例 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)所需要的!
    猜你喜欢
    • 2019-10-25
    • 2021-05-12
    • 2019-09-25
    • 2021-11-15
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    相关资源
    最近更新 更多