recherche
Maisondéveloppement back-endTutoriel PythonDéploiement d'un système de détection d'intrusion basé sur Flask sur AWS ECS avec CI/CD

Introduction

Dans cet article, je vais vous guider à travers le processus de déploiement d'un système de détection d'intrusion sur AWS

REMARQUE : ce projet suppose que vous disposez déjà d'un compte AWS actif et que vous avez configuré les informations d'identification de votre compte (clés d'accès) sur votre éditeur de code et ce projet entraînera certains coûts dans votre console

Aperçu du projet

Objectifs

Les objectifs de ce projet sont les suivants :

  • Containeriser l'application avec Docker
  • Poussez l'image du conteneur vers ECR
  • Créez un VPC, deux sous-réseaux privés et deux sous-réseaux publics
  • Créez des points de terminaison VPC pour que les sous-réseaux privés accèdent à ECR
  • Déployer un équilibreur de charge d'application et un groupe cible dans les sous-réseaux publics pour le service ECS
  • Créer une définition de tâche pour le service ECS
  • Créez un cluster ECS et un service ECS avec le type de lancement fargate dans les sous-réseaux privés.
  • Créez une zone hébergée dans la route 53 et pointez-la vers le nom DNS de l'ALB

Architecture du projet

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Conteneuriser l'application avec Docker

Cette section montrera les étapes impliquées dans la création de ce projet à partir de zéro

Étape 1 : Dockeriser l'application Flask

Créez un Dockerfile dans le répertoire du projet afin de packager l'application flask.

FROM python:3.12

#set the working dir
WORKDIR /usr/src/app

#copy the requirements and install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Copy all the files to the container
COPY . .

#Expose the port
EXPOSE 5000

#run the app
CMD ["gunicorn","-b","0.0.0.0:5000", "app:app"]

Étape 2 : Créer et tester l'image Docker

Il est important de créer et de tester l'image Docker localement pour s'assurer qu'elle fonctionne comme prévu

docker build -t image-name .
docker run -p 5000:5000 image-name

Transférer l'image Docker vers ECR

Étape 1. Créer un référentiel de conteneurs élastiques (ECR)

  • Accédez à la console AWS ECR, créez un référentiel et notez l'URI (par exemple, 123456789012.dkr.ecr.region.amazonaws.com/repo-name)
  • REMARQUE : entrez votre dépôt ECR et sélectionnez Afficher les commandes push afin de voir les commandes permettant de transférer l'image vers votre dépôt ECR. Ce sont ces commandes qui seront utilisées ici.

Étape 2. Authentifier Docker auprès d'ECR

Exécutez la commande suivante pour authentifier Docker avec ECR (remplacez votre région et votre identifiant de compte) :

aws ecr get-login-password --region your-region | docker login --username AWS --password-stdin your-account-id.dkr.ecr.your-region.amazonaws.com

Étape 3. Marquez et poussez l'image

Marquez votre image Docker locale pour qu'elle corresponde au référentiel ECR, puis envoyez-la :

REMARQUE : assurez-vous qu'il s'agit de la région et de l'identifiant de compte respectifs de votre compte

docker tag image-name:latest your-account-id.dkr.ecr.your-region.amazonaws.com/image-name:latest
docker push your-account-id.dkr.ecr.your-region.amazonaws.com/image-name:latest

Votre dépôt ECR devrait ressembler à ceci si l'image est poussée avec succès

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Créer un VPC et ses sous-réseaux

Prenez note de la Région, car c'est là que toutes les ressources seront déployées

Étape 1 : Créer un nouveau VPC

  • Allez sur la console VPC et créez un nouveau VPC
  • Spécifiez le bloc CIDR (par exemple 10.0.0.0/16)

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • REMARQUE : assurez-vous que le paramètre Activer les noms d'hôte DNS est coché lors de la création du VPC

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Étape 2 : Créer une passerelle Internet (IGW) pour le VPC

Dans la console VPC, sélectionnez l'onglet Intergate Gateway et créez la passerelle Internet. Une fois l'IGW créé, attachez-le à votre VPC

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Étape 3 : Créer des sous-réseaux

  • Créez deux sous-réseaux dans une zone de disponibilité (par exemple us-east-1)
  • Créez un autre ensemble de deux sous-réseaux dans différentes zones de disponibilité (AZ) (par exemple us-east-2)
  • REMARQUE : Dans chaque AZ, les sous-réseaux serviront respectivement de sous-réseaux privés et publics.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

REMARQUE : le cluster ECS sera déployé sur le sous-réseau privé et l'Application Load Balancer sera dans le sous-réseau public et accédera au cluster ECS dans le sous-réseau privé

Étape 4 : Mettre à jour les tables de routage

  • Créez des tables de routage pour les sous-réseaux publics et privés et associez les tables de routage aux sous-réseaux publics et privés respectivement. (Assurez-vous que le VPC utilisé est sélectionné pour les deux.)
  • Pour la table de routage des sous-réseaux publics, ajoutez à la route pour diriger tout le trafic sortant 0.0.0.0/0 via la passerelle Internet.
  • Le sous-réseau privé n'acheminera pas le trafic sortant pour l'instant.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Créer des points de terminaison d'un VPC pour ECR

Cela permettra au cluster ECS d'avoir accès à Elastic Container Registry (ECR).
REMARQUE : Quatre points de terminaison seront créés pour S3, ECR, DOCKER et CloudWatch.

  • sélectionnez Endpoints et cliquez sur créer un point de terminaison.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • Nommez le point de terminaison et recherchez le point de terminaison de l'API ECR sous services com.amazonaws.us-east-1.ecr.api
  • Sélectionnez le VPC que nous avons utilisé, cela fera apparaître l'option de sous-réseaux dans laquelle les zones de disponibilité dans lesquelles se trouvent nos sous-réseaux privés seront sélectionnées, puis enfin sélectionnerons nos sous-réseaux privés et le groupe de sécurité par défaut.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • Sélectionnez la valeur par défaut et laissez la stratégie telle quelle, puis créez le VPC.

* Créez maintenant les points de terminaison restants en modifiant les services pour docker com.amazonaws.us-east-1.ecr.dkr, pour les journaux CloudWatch com.amazonaws.us-east-1.logs et pour S3 com.amazonaws. us-east-1.s3 respectivement et suivez tout le reste exactement comme prévu pour ces changements.

  • REMARQUE : Pour le point de terminaison S3, sélectionnez la passerelle. C'est ce qu'on appelle le point de terminaison de la passerelle S3 et vous invitera à le connecter à votre table de routage de sous-réseau privé, ce qui créera une route dans la table de routage pour cela.

Créer un équilibreur de charge d'application et un groupe cible

C'est une étape très importante car c'est l'ALB qui
acheminera le trafic vers le service ECS privé.

Tout d'abord, nous devons créer un groupe de sécurité pour l'ALB.

  • Accédez au groupe de sécurité sur la gauche et sélectionnez Créer un groupe de sécurité. donnez un nom et une description à la sécurité.
  • Ajoutez une règle entrante sur la plage de ports 80 et la source 0.0.0.0/0 et ajoutez-en une seconde sur la plage de ports 443 et la source 0.0.0.0/24 pour le trafic HTTP et HTTPS respectivement

Étape 1 : Créer un groupe cible

  • Allez sur la console EC2 et à gauche, sous Load Balancing, sélectionnez le groupe cible.
  • Sous la configuration de base, sélectionnez les adresses IP et nommez le groupe cible
  • Laissez le protocole et le port sur HTTP : 80
  • Sélectionnez le VPC dans lequel nous déployons l'équilibreur de charge, faites défiler et cliquez sur Suivant.
  • Ici, supprimez l'adresse IP qui s'y trouve, toutes les adresses IP seront automatiquement ajoutées. Ensuite, spécifiez le port qui a été exposé, Port : 5000 et créez le groupe cible.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Créer un équilibreur de charge d'application

  • Sur la gauche de la console EC2, sélectionnez l'équilibreur de charge et sélectionnez créer un équilibreur de charge.
  • Sélectionnez Créer un équilibreur de charge d'application, ce sera un équilibreur de charge accessible sur Internet. donnez un nom à l'ALB.
  • Dans la section Mappage du réseau, sélectionnez le VPC créé et les sous-réseaux publics dans les deux zones de disponibilité.
  • Dans la section Auditeurs et Routage, sélectionnez le groupe cible créé. L'ALB écoutera sur le port 80 et transmettra au groupe cible.
  • Créez l'ALB.

Créer des définitions de tâches

Accédez à la console ECS et sélectionnez les définitions de tâches.

Étape 1 :

  • Nommez la famille de définition de tâche
  • Laissez les exigences d'infrastructure par défaut telles quelles, mais vous pouvez modifier le processeur virtuel et la mémoire en fonction de votre discrétion. Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Étape 2 : Pour le Conteneur 1

  • Donnez un nom
  • Accédez à votre ECR et copiez l'URI de l'image Docker que nous avons poussée dans les sections précédentes de ce projet et revenez à la section conteneur 1 des définitions de tâches que nous créons et collez-la dans l'URI de l'image du conteneur.
  • Pour les mappages de ports, définissez-le sur 5000, car il s'agit du port que nous avons exposé dans notre conteneur Docker et donnez-lui un nom. REMARQUE : Il est très important que les mappages de ports soient les mêmes que ceux du port Docker exposé
  • Ajouter des variables d'environnement
    Cela sera important dans la section CI/CD de ce projet. Mais sera ignoré pour l'instant.

  • Allez-y, sautez les sections restantes et créez la définition de la tâche

Créer un cluster et un service Fargate

Créer un groupe de sécurité pour le service ECS

  • Accédez au groupe de sécurité sur la gauche et sélectionnez Créer un groupe de sécurité. donnez un nom et une description à la sécurité.
  • Ajoutez une règle entrante sur la plage de ports 5000 et la source sera le groupe de sécurité des Application Load Balancers.

Étape 1 : Créer un cluster

  • Allez dans l'onglet clusters et sélectionnez créer un cluster, cela vous amènera à la page de configuration du cluster. Nommez le cluster et assurez-vous que seul AWS Fargate (Serverless) est sélectionné sous l'onglet Infrastructure, puis créez le cluster.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Étape 2 : Créer un service

  • Sélectionnez le cluster créé et cliquez sur créer sous service.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Cela vous mènera à une nouvelle page où vous préciserez la configuration du service Fargate.

  • Faites défiler la section Environnement et accédez à la configuration de déploiement. Ici, spécifiez la famille de définition de tâche, qui sélectionnera également automatiquement la révision.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • Sélectionnez le nombre souhaité de tâches à lancer. Un seul convient à ce projet.

  • Faites défiler jusqu'à l'onglet Réseau et sélectionnez le VPC créé, puis le(s) sous-réseau(s) privé(s)

  • Dans la section Équilibreur de charge, sélectionnez le type d'équilibreur de charge comme Application Load Balancer, puis sélectionnez utiliser un équilibreur de charge existant. Cela fera apparaître l'ALB créé dans les sections précédentes. sélectionnez-le.

  • Faites défiler et vous verrez, auditeur. sélectionnez Utiliser un écouteur existant et sélectionnez l'écouteur du port 80 qui est là et sous le groupe cible, faites de même, en sélectionnant le groupe cible existant que nous avons créé.

  • Vient ensuite Service Auto Scaling. Ceci est facultatif mais constitue un bon ajout pour devoir évoluer vers une application en fonction de métriques définies. Activez cette option et spécifiez le nombre minimum et maximum de tâches que vous souhaitez exécuter. Ajoutez ensuite une stratégie de mise à l’échelle. Pour ce projet, une stratégie de suivi cible est utilisée parallèlement à la métrique du service ALBrequestCountPerTarget ECS, avec la valeur cible de 50, la période de refroidissement de montée en charge et la période de refroidissement de montée en charge de 60 s

  • Créez le service.

  • Une fois le Service créé, le nombre de tâches souhaité sera créé.

Créer une zone hébergée dans la route 53

Si les instructions ci-dessus ont été suivies, vous devriez disposer d'une application Web entièrement fonctionnelle, pour y accéder, accédez à votre équilibreur de charge, copiez le nom DNS et collez-le dans votre navigateur. Mais c'est fastidieux et ne fait pas appel aux meilleures pratiques. Idéalement, il devrait y avoir un pare-feu d'application Web devant l'ALB ou CloudFront, mais par souci de simplicité, nous utiliserons uniquement la Route 53.

REMARQUE : Cette section nécessite que vous ayez un nom de domaine enregistré auprès d'AWS ou de tout autre fournisseur

Étape 1 : Créer un hébergement dans

  • Accédez à la console Route 53.
  • Dans l'onglet de gauche, sélectionnez Zones hébergées. tu devrais avoir ça.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • Sélectionnez Créer une zone hébergée
  • Entrez votre nom de domaine et donnez une description. Laissez le type comme Zone hébergée publique et sélectionnez Créer une zone hébergée.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Étape 2 : Ajouter le nom DNS ALB aux enregistrements de zone hébergée

  • Accédez à votre console ALB et copiez son nom DNS.
  • Revenez dans la zone hébergée et sélectionnez créer un enregistrement.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • Le type d'enregistrement par défaut qui existe est l'enregistrement A, qui sera utilisé.
  • Basculez le commutateur d'alias

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • Sous Choisir le point de terminaison, sélectionnez l'alias de l'application et l'équilibreur de charge classique.
  • Ensuite, choisissez la région dans laquelle vous avez lancé votre équilibreur de charge. Dans ce cas, c'est us-east-1, assurez-vous qu'il s'agit bien de votre région.
  • Choisissez votre équilibreur de charge dans le menu déroulant.
  • Créer un enregistrement.

Cela suppose que vous avez votre nom de domaine avec AWS

FÉLICITATIONS!!

Si vous avez suivi les étapes vers le T, vous devriez disposer d'une application Web entièrement fonctionnelle et accessible via votre nom de domaine.

Ce fut un projet très passionnant car j'ai travaillé avec des VPC, des sous-réseaux privés et publics, des points de terminaison de VPC, des services ECS, ECR, des groupes cibles, des groupes de sécurité et un équilibreur de charge d'application alors qu'ils se sont tous réunis pour créer ce site Web. application.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Python vs C: Comprendre les principales différencesPython vs C: Comprendre les principales différencesApr 21, 2025 am 12:18 AM

Python et C ont chacun leurs propres avantages, et le choix doit être basé sur les exigences du projet. 1) Python convient au développement rapide et au traitement des données en raison de sa syntaxe concise et de son typage dynamique. 2) C convient à des performances élevées et à une programmation système en raison de son typage statique et de sa gestion de la mémoire manuelle.

Python vs C: Quelle langue choisir pour votre projet?Python vs C: Quelle langue choisir pour votre projet?Apr 21, 2025 am 12:17 AM

Le choix de Python ou C dépend des exigences du projet: 1) Si vous avez besoin de développement rapide, de traitement des données et de conception du prototype, choisissez Python; 2) Si vous avez besoin de performances élevées, de faible latence et de contrôle matériel, choisissez C.

Atteindre vos objectifs python: la puissance de 2 heures par jourAtteindre vos objectifs python: la puissance de 2 heures par jourApr 20, 2025 am 12:21 AM

En investissant 2 heures d'apprentissage Python chaque jour, vous pouvez améliorer efficacement vos compétences en programmation. 1. Apprenez de nouvelles connaissances: lire des documents ou regarder des tutoriels. 2. Pratique: Écrivez du code et complétez les exercices. 3. Revue: consolider le contenu que vous avez appris. 4. Pratique du projet: Appliquez ce que vous avez appris dans les projets réels. Un tel plan d'apprentissage structuré peut vous aider à maîtriser systématiquement Python et à atteindre des objectifs de carrière.

Maximiser 2 heures: stratégies d'apprentissage Python efficacesMaximiser 2 heures: stratégies d'apprentissage Python efficacesApr 20, 2025 am 12:20 AM

Les méthodes pour apprendre Python efficacement dans les deux heures incluent: 1. Passez en revue les connaissances de base et assurez-vous que vous connaissez l'installation de Python et la syntaxe de base; 2. Comprendre les concepts de base de Python, tels que les variables, les listes, les fonctions, etc.; 3. Master Basic et Advanced Utilisation en utilisant des exemples; 4. Apprenez des erreurs courantes et des techniques de débogage; 5. Appliquer l'optimisation des performances et les meilleures pratiques, telles que l'utilisation des compréhensions de la liste et le suivi du guide de style PEP8.

Choisir entre Python et C: La bonne langue pour vousChoisir entre Python et C: La bonne langue pour vousApr 20, 2025 am 12:20 AM

Python convient aux débutants et à la science des données, et C convient à la programmation système et au développement de jeux. 1. Python est simple et facile à utiliser, adapté à la science des données et au développement Web. 2.C fournit des performances et un contrôle élevés, adaptés au développement de jeux et à la programmation système. Le choix doit être basé sur les besoins du projet et les intérêts personnels.

Python vs C: Une analyse comparative des langages de programmationPython vs C: Une analyse comparative des langages de programmationApr 20, 2025 am 12:14 AM

Python est plus adapté à la science des données et au développement rapide, tandis que C est plus adapté aux performances élevées et à la programmation système. 1. La syntaxe Python est concise et facile à apprendre, adaptée au traitement des données et à l'informatique scientifique. 2.C a une syntaxe complexe mais d'excellentes performances et est souvent utilisée dans le développement de jeux et la programmation système.

2 heures par jour: le potentiel de l'apprentissage python2 heures par jour: le potentiel de l'apprentissage pythonApr 20, 2025 am 12:14 AM

Il est possible d'investir deux heures par jour pour apprendre Python. 1. Apprenez de nouvelles connaissances: apprenez de nouveaux concepts en une heure, comme les listes et les dictionnaires. 2. Pratique et pratique: utilisez une heure pour effectuer des exercices de programmation, tels que la rédaction de petits programmes. Grâce à une planification et à une persévérance raisonnables, vous pouvez maîtriser les concepts de base de Python en peu de temps.

Python vs C: courbes d'apprentissage et facilité d'utilisationPython vs C: courbes d'apprentissage et facilité d'utilisationApr 19, 2025 am 12:20 AM

Python est plus facile à apprendre et à utiliser, tandis que C est plus puissant mais complexe. 1. La syntaxe Python est concise et adaptée aux débutants. Le typage dynamique et la gestion automatique de la mémoire le rendent facile à utiliser, mais peuvent entraîner des erreurs d'exécution. 2.C fournit des fonctionnalités de contrôle de bas niveau et avancées, adaptées aux applications haute performance, mais a un seuil d'apprentissage élevé et nécessite une gestion manuelle de la mémoire et de la sécurité.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Puissant environnement de développement intégré PHP

MantisBT

MantisBT

Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

mPDF

mPDF

mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) ​​et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),