AWS Fargate主机名不可行吗?

时间:2018-03-31 21:44:57

标签: java amazon-web-services networking dropwizard aws-fargate

我正在尝试设置一个简单的应用程序。它是从https://budgetapp.docsapp.io/拖出来的,意味着要在公共场所工作。我的任务是以大多数自动化方式部署它,并向公众公开Java机器的指标(远程jConsole)。 最终,它应该在大约15个精确副本中站起来。

对于此任务,我选择了AWS Fargate。它设置了漂亮的应用程序,它让我回到管理端口上的度量标准(它由Dropwizard部署)。我挣扎的是监控。它应该是真实的,至少显示CPU和内存使用情况。我可以在码头上本地做,但是Fargate错过了一件至关重要的事情。为已部署的任务设置主机名。

我得到的错误: Error: Exception thrown by the agent : java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: 578463faab0f: 578463faab0f: System error。这是由于在/ etc / hosts文件中缺少容器' uname -n的条目。 好像我无法设置它!这有可能以某种方式完成吗?

我正在运行我的java服务: java -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=127.0.0.1 -Djava.rmi.server.useLocalHostname=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=5000 -Dcom.sun.management.jmxremote.rmi.port=5000 -jar budgetapp.jar server config.yml

我很乐意接受任何建议!

3 个答案:

答案 0 :(得分:1)

这是ecs代理中的已知问题。您是否尝试过这种解决方法:

echo "$(ip a | grep -A2 eth1 | grep inet | awk '{print $2}' | sed 's#/.*##g' ) $(hostname)" >> /etc/hosts

您可以在容器的入口点获取ip并修改/ etc / host。

我相信有一个ecs代理修复方式,但我在GitHub上找不到问题。

答案 1 :(得分:0)

感谢所有帮助。 最后的答案是我在互联网上阅读的内容和答案的组合。

关键是将java.rmi.server.hostname值更改为其外部IP地址,这是我在填充jConsole表单时将使用的实际地址。 (事实证明,这个值不是服务绑定的接口,而是外部监视工具用来访问它的IP地址的值。)

同样,在入口点我需要为容器的主机名添加一个外部IP,只是为了将主机名添加到/ etc / hosts

答案 2 :(得分:0)

我在ECS Fargate上遇到了同样的问题,其代码在docker和CI / CD管道中运行良好。我还没有引导脚本,因此集成Roy的解决方案需要花点功夫。

这对我有用:

  1. 在已经复制到映像中的目录中创建一个ecs_bootloader.sh shell脚本(在我的情况下为bin):
#!/bin/bash

echo "$(ip a | grep -A2 eth1 | grep inet | awk '{print $2}' | sed 's#/.*##g' ) $(hostname)" >> /etc/hosts

#My command here:
python bin/run_all.py

修改了我的ECS任务定义,将ENTRYPOINT和命令更改为:

ENTRYPOINT: bin/ecs_bootstrap.sh
COMMAND:    bin/run_all.py

注意:

  • 可以通过从ecs_bootstrap.sh脚本调用COMMAND来改善此情况。 (当前,引导脚本会忽略COMMAND。)
  • 因为我已经将bin文件夹复制到了容器中,所以不必修改Dockerfile。