获取从 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 任务时出现资源:内存错误

ECS 任务。如何在容器中使用 AWS CLI

使用 AWS CLI 从 S3 获取最后修改的对象

如何从 AWS Lambda 函数运行 ECS 任务?

aws 如何从生产环境中的 lambda 函数访问 ECS 服务

如何在 AWS ECS 集群的服务中运行 AWS ECS 任务,而不是将服务从 Circle CI 的“aws-ecs/run-task”中排除