Bonjour !
Je viens vers vous à car je rame un peu pour crée un accès HTTPS à un streamlit.
J’ai volontairement essayé de ne présenter que la version qui me semble la plus simple, afin de faciliter la comprehension.
De même, j’ai essayé de présenter les choses de manière abstraite et générale plutôt que particulière, à la fois par soucis de simplicité, mais aussi parce que je présume que je ne suis pas le permier à vouloir déployer un streamlit sur une EC2
Méthodologie suivie:
[image docker] le port 8501 est exposé dans l’image docker, l’image est herbergé sur dockerhub.
[EC2] le container Streamlit est deployé dans une EC2 sur AWS.
[Instance EC2] Le port 8501 est exposé dans le container
sudo docker container run --rm -d --name containername -p 8501:8501 dockerhubrepo/dockerimage:1.0.0
[EC2] Le security group de l’instance ouvre les ports 8501 et 22
[EC2] Une IP fixe à été crée via le service d’IP Elastic d’AWS
[EC2] L’IP fixe à été attribuée à l’instance EC2
[Route 53] Un nom de domaine à été acheté
[Route 53] Le nom de domaine à été attaché à l’adresse IP fixe (hosted zone)
[ACM] Un certificat AWS à été crée pour le nom de domaine
[ACM=>Route 53] Les 2 enregistrements CNAME liés au certificats ont été ajoutés au nom de domaine (via la fonction automatique de AWS).
[EC2] un security group à été crée, en entrée et sortie sont ouverts les ports 80, 443
[EC2] Un target group à été crée, avec pour cible l’instance EC2 sur le port 8501
[EC2] Un Load balancer basique à été crée pour router les ports 80 et 443 vers le target group
Voici un rapide schéma, en espérant qu’il soit plus digeste:
Problème :
Le certificat AWS fonctionne correctement puisque, dans un navigateur, le nom de domaine est automatiquement redirigé de HTTP à HTTPS.
Cependant je n’arrive pas à acceder au streamlit, j’ai un message “La connexion à échouée”.
Tests réalisés :
Le streamlit fonctionne :
- en restant sur un accès http, le streamlit fonctionne parfaitement en se rendant sur mon-ip-fixe:8501
- En définissant la redirection du container sur 80:8501, j’ai aussi accès HTTP au streamlit en accédant à http://www.nomdedomaine.net
Avant de découvrir que AWS pouvait pouvait fournir des certificats gratuitement, j’utilisais let’s encrypt via l’agent certbot installé directement sur l’instance. j’ai depuis revoqué et supprimé le certificat let’s encrypt pour éviter un conflit avec le certificat AWS.
Piste
La couche de cryptage n’intervient qu’au niveau du load balancer, donc je penche pour un manque d’ouverture de port, mais je vois pas ou.
Question :
Est-ce que la démarche décrite dans le contexte vous semble correcte ?
Est-ce que vous auriez une idée ce qui pourrait ne pas fonctionner ?
Note:
J’ai conscience de l’existence de AWS Fargate et Lightsails, mais après quelques comparatifs une machine EC2 est plus économique dans mon cas (effet de seuil sur les config des machines + coûts additionnels de services annexes (load balancer payant par exemple)).
Je vous remercie par avance pour tout indice
Cédric