6 votes

Le nom d'hôte d'AWS Fargate n'est pas possible ?

J'essaie de mettre en place une application simple. Elle est glissée depuis https://budgetapp.docsapp.io/ et qui est censé fonctionner quelque part en public. Ma tâche est de le déployer de la manière la plus automatisée possible et d'exposer les métriques de la machine java au public (jConsole à distance). En fin de compte, il devrait être mis en place dans environ 15 copies exactes.

Pour cette tâche, j'ai choisi AWS Fargate. L'application est très bien configurée, elle me renvoie les métriques sur le port d'administration (elle est déployée par Dropwizard). Ce qui me pose problème, c'est la surveillance. Il devrait être en direct et montrer au moins l'utilisation du CPU et de la mémoire. Je suis capable de le faire localement sur docker, mais Fargate manque une chose cruciale. La configuration du nom d'hôte pour la tâche déployée.

L'erreur que je reçois : Error: Exception thrown by the agent : java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: 578463faab0f: 578463faab0f: System error . Cela est dû à une entrée manquante dans le fichier /etc/hosts avec le nom du conteneur. uname -n . Il semble que je ne puisse pas le configurer ! Est-il possible de le faire d'une manière ou d'une autre ?

J'exécute mon service Java comme ceci : 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

Je suis heureux de recevoir des conseils !

2voto

Roy Kachouh Points 674

Il s'agit d'un problème connu dans l'agent ecs. Avez-vous essayé ceci comme solution de contournement ?

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

Vous pouvez récupérer l'ip et modifier /etc/host pendant le point d'entrée dans votre conteneur.

Je pense qu'un correctif pour l'agent ecs est en cours, mais je ne trouve pas le problème sur GitHub.

1voto

aaronsteers Points 465

J'ai rencontré le même problème sur ECS Fargate, avec un code qui fonctionnait bien dans docker et dans le pipeline CI/CD. Je n'avais pas encore de script de bootstrap, donc cela a demandé un peu de travail pour intégrer la solution de Roy.

Voici ce qui a marché pour moi :

  1. Créer un ecs_bootloader.sh shell script dans un répertoire qui était déjà copié dans l'image ( bin dans mon cas) :

    !/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

J'ai modifié ma définition de tâche ECS, en changeant ENTRYPOINT et la commande en :

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

NOTES :

  • On pourrait améliorer cette situation en appelant COMMAND à partir de l'écran d'accueil de l'utilisateur. ecs_bootstrap.sh script. (Actuellement, COMMAND est ignoré par le script d'amorçage).
  • Parce que je copiais déjà le bin au conteneur, je n'ai pas eu à modifier mon Dockerfile.

0voto

agat90 Points 91

Merci pour toute l'aide apportée. La réponse finale a été une combinaison de ce que j'ai lu sur Internet et des réponses données ici.

La clé était de changer la valeur de java.rmi.server.hostname à son adresse IP externe qui est l'adresse réelle que je vais utiliser pour remplir le formulaire de jConsole. (Il s'avère que cette valeur n'est pas celle de l'interface où le service est lié, mais la valeur de l'adresse IP que les outils de surveillance externes utiliseront pour y accéder).

De même, dans le point d'entrée, je dois ajouter une IP externe au nom d'hôte du conteneur, juste pour que le nom d'hôte soit ajouté au fichier /etc/hosts.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X