Introduction
Qu’est-ce qu’AWS ?
Qu’est-ce qu’une instance EC2 ?
Pourquoi utiliser EC2 ?
- Contrôle et flexibilité : EC2 offre un contrôle total sur vos ressources informatiques, vous permettant de configurer et gérer les instances selon vos besoins.
- Élasticité : Redimensionnez facilement vos instances en fonction de la demande, assurant que vous disposez toujours de la bonne quantité de ressources.
- Intégration avec d’autres services AWS : EC2 s’intègre parfaitement avec d’autres services AWS comme S3, RDS et VPC, améliorant les capacités de vos applications.
- Variété de types d’instances : EC2 propose une large gamme de types d’instances optimisés pour différents cas d’utilisation.
Une brève explication du projet
Inscription AWS — utilisateurs root et IAM, permissions, sécurité
Étape 1 : Inscription à un compte AWS
7. Finalisez l’inscription. Suivez les instructions pour terminer la configuration de votre compte. Vous recevrez un email de confirmation une fois que votre compte sera actif.
Étape 2 : Comprendre les utilisateurs root et IAM
- L’utilisateur root : créé lors de l’inscription et dispose d’un accès complet à tous les services et ressources AWS. Utilisez-le uniquement pour les tâches de gestion de compte et de service.
- Utilisateurs IAM : AWS Identity and Access Management (IAM) vous permet de créer des utilisateurs avec des permissions spécifiques. Cela améliore la sécurité en respectant le principe du moindre privilège. Gardez une trace des comptes utilisateurs IAM et supprimez-les toujours s’ils ne sont pas utilisés.
Importance de la sécurité :
- Activez l’authentification multi-facteurs (MFA) pour les utilisateurs root et IAM.
- Créez des utilisateurs IAM individuels pour chaque personne accédant au compte.
- Utilisez des mots de passe forts et uniques, et changez-les régulièrement.
- Révisez régulièrement les politiques et permissions IAM.
Étape 3 : Création d’un utilisateur IAM
- 1. Allez sur la console de gestion AWS et trouvez le service IAM. Il peut apparaître dans les services récemment visités, sinon, cherchez-le dans la « recherche
2. Ensuite, dans IAM, choisissez « Utilisateurs » dans le panneau de gauche et cliquez sur « Créer un utilisateur ».
3. Suivez les étapes de création d’utilisateur. Spécifiez votre nom d’utilisateur :
4. Définissez les permissions. Sélectionnez « Attacher des politiques directement ». Vous verrez qu’il y a de nombreuses politiques de permissions parmi lesquelles choisir, vous pouvez même créer votre propre politique.
Pour nos besoins et pour des raisons de simplicité, nous choisirons la politique « AdministratorAccess » pour notre utilisateur. Cette politique fournit un accès complet aux services et ressources AWS. Cependant, essayez de ne pas utiliser cette politique pour vos utilisateurs dans des applications de production.
Pour être plus restrictif, vous pouvez rechercher spécifiquement des politiques d’instance EC2. Par exemple, vous pouvez assigner la politique « AmazonEC2FullAccess », ce qui permettra à votre compte IAM de tout faire avec le service EC2, mais rien d’autre avec les autres services.
5. Terminez le processus de création de l’utilisateur avec les étapes restantes, puis cliquez sur « Créer un utilisateur ».
Après la création de l’utilisateur, vous ne pouvez pas y accéder immédiatement. La première chose à faire est d’activer l’accès à la console pour l’utilisateur.
1. Sélectionnez le nouvel utilisateur créé, allez dans « Informations d’identification de sécurité » et cliquez sur « Activer l’accès à la console ».
2. Téléchargez le fichier .csv et gardez-le aussi sécurisé que possible. La recommandation générale est de ne même pas le conserver sur votre machine.
Le format du fichier est le suivant : Nom d’utilisateur, Mot de passe, URL de connexion à la console.
3. Déconnectez-vous de votre compte root en le choisissant en haut à droite et en cliquant sur « Se déconnecter ».
4. Retournez à la console de connexion et cette fois, choisissez l’utilisateur IAM.
L’ID du compte est le numéro à 12 chiffres de la troisième colonne du fichier de données d’identification enregistré précédemment.
5. À l’étape suivante, entrez votre nom d’utilisateur IAM et votre mot de passe, qui se trouvent également dans le fichier de données d’identification.
6. Après avoir saisi toutes ces informations, vous devriez pouvoir accéder à la console de votre compte IAM. Vous remarquerez que l’accès est limité à certains endroits.
Création d’une instance EC2
Introduction à EC2 et au niveau gratuit
- 750 heures d’utilisation d’instances t2.micro (ou t3.micro dans les régions où t2.micro n’est pas disponible) sur des AMI du niveau gratuit par mois ;
- 750 heures d’utilisation d’adresse IPv4 publique par mois ;
- 30 GiB de stockage EBS ;
- 2 millions d’E/S ;
- 1 Go de snapshots ;
- 100 Go de bande passante vers Internet.
Création d’une instance EC2
2. Sélectionnez « Lancer une instance » et vous verrez un formulaire avec de nombreux paramètres différents pour votre instance.
- Nom. Choisissez un nom pour votre instance.
- Applications et images OS. Dans le menu déroulant « Amazon Machine Image », vous verrez plusieurs options. Pour ce tutoriel, vous pouvez choisir « Amazon Linux -> Amazon Linux 2023 AMI », qui est éligible pour le niveau gratuit.
- Type d’instance. Sélectionnez le type d’instance t2.micro, qui est éligible pour le niveau gratuit. Ce type d’instance fournit 1 vCPU et 1 GiB de mémoire, ce qui est suffisant pour les petites applications et les tests.
- Paire de clés. Sélectionnez « Créer une nouvelle paire de clés », définissez un nom et choisissez les paramètres suivants :
Après avoir cliqué sur « Créer une paire de clés », le fichier .pem sera téléchargé sur votre machine. Conservez ce fichier, il sera nécessaire pour les étapes ultérieures lors de l’accès à l’instance.
- Changements réseau. Pour ce tutoriel, aucune modification n’est requise.
- Configuration du stockage. La configuration de stockage par défaut pour l’AMI sera pré-sélectionnée. Pour le niveau gratuit, vous pouvez avoir jusqu’à 30 GiB de stockage EBS. Ajustez la taille du stockage si nécessaire, mais assurez-vous qu’elle reste dans les limites du niveau gratuit.
3. Après avoir rempli la configuration, cliquez sur « Lancer l’instance ». Cela lancera le processus de démarrage de votre instance.
4. Accédez à la liste de vos instances en cliquant sur « Instances » dans le panneau de gauche, puis sélectionnez votre instance nouvellement créée.
5. Il faudra un certain temps avant de pouvoir l’utiliser. Attendez que l’état de l’instance passe de « En cours de démarrage » à « En cours d’exécution » :
6. À ce stade, votre instance est configurée. Votre adresse IPv4 publique ou votre DNS IPv4 public seront nécessaires à l’étape suivante de ce tutoriel pour accéder à l’instance.
Accès à Amazon Linux
Connexion depuis la machine locale
Nous couvrirons les étapes pour utiliser le fichier .pem téléchargé afin d’établir une connexion sécurisée avec votre instance EC2.
mv ~/Downloads/your-key-pair.pem ~/keys/
2. Définissez les permissions correctes pour le fichier .pem :
chmod 400 ~/keys/your-key-pair.pem
- Connexion à votre instance EC2 à l’aide de SSH.
- Pour vous connecter à votre instance EC2, vous avez besoin du nom DNS public ou de l’adresse IP de l’instance. Vous pouvez trouver ces informations dans la console de gestion EC2 sous la section « Instances ». Ouvrez Terminal et utilisez la commande ssh pour vous connecter à votre instance.
- Remplacez votre-paire-de-clés.pem par le nom de votre fichier de clé, ec2-user par le nom d’utilisateur par défaut de votre instance Amazon Linux, et votre-DNS-public-de-l’instance par le DNS public de votre instance EC2.
Vous devriez maintenant être connecté au terminal Amazon Linux :
Connexion depuis le navigateur
Il existe une autre manière de se connecter au terminal : vous pouvez vous connecter directement depuis le navigateur.
1. Pour cela, cliquez simplement sur le bouton « Se connecter » situé dans le coin supérieur droit du résumé de votre instance :
2. Sur la page suivante, laissez les paramètres préremplis et cliquez sur « Se connecter ».
3. Vous verrez le même invite de commande :
Clonage du dépôt vers une instance EC2
sudo yum install git -y
1. Clonez le dépôt.
Sur votre instance EC2, utilisez la commande git clone avec l’URL HTTPS du dépôt discuté au début de ce tutoriel.
git clone https://github.com/RusikPro/library-backend.git
2. Vérifiez le clonage.
cd library-backend
ls -la
Optionnel : Configuration des clés SSH GitHub
- Suivez les étapes de création de la clé.
- Vous êtes libre de choisir le nom par défaut, mais il est préférable de les personnaliser pour une meilleure gestion future des clés. Dans ce tutoriel, le nom est /home/ec2-user/.ssh/id_ed25519_tutorial_key.
- La phrase secrète sera laissée vide pour simplifier les choses.
2. Copiez la clé publique.
- Affichez le contenu de votre nouveau fichier de clé publique :
Copiez la sortie, qui commence par ssh-ed25519 et inclut votre adresse e-mail.
Étape 2 : Ajouter la clé SSH à votre compte GitHub
1. Connectez-vous à GitHub et accédez à votre projet.
2. Ouvrez les paramètres de votre projet, sélectionnez « Deploy keys » dans le panneau de gauche, puis cliquez.
3. Sélectionnez le nom et insérez la clé ed copié précedement.
4. Laissez « Autoriser l’accès en écriture » non coché. En général, vous ne souhaitez pas pousser les modifications depuis l’instance EC2 vers GitHub.
5. Cliquez sur « Ajouter une clé » et vous devriez maintenant voir votre clé dans la liste des clés de déploiement.
Étape 3 : Démarrer ssh-agent sur EC2
- Lancez ssh-agent à l’intérieur de l’instance EC2 :
- Ajoutez la clé SSH à l’agent :
if [ -z « $SSH_AUTH_SOCK« ]; then
eval « $(ssh-agent -s)«
fi
# Add SSH key
ssh-add ~/.ssh/id_ed25519_choven
Déploiement du projet Django sur AWS EC2 en utilisant Docker
sudo yum install docker
docker info
sudo systemctl start docker.service
ssh -i ~/keys/your-key-pair.pem ec2-user@your-instance-public-dns
sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose version
Étape 2 : Configurer votre projet
1. Naviguez vers votre projet précédemment cloné. Le fichier env.dev.sample est présent.
cd library-backend
2. Créez un nouveau fichier .env à partir de .env.dev.sample et ouvrez-le.
cp .env.dev.sample .env
vim .env
3. Modifiez les valeurs à l’intérieur.
DB_USER=your_db_user
DB_PASS=your_complicated_password
DJANGO_SECRET_KEY=your_django_secret_key
# Public IPv4 address from EC2 instance console
DJANGO_ALLOWED_HOSTS=35.181.153.18
DJANGO_DEBUG=False
DJANGO_TEST_MODE=True
Étape 3 : Construire et exécuter vos conteneurs Docker
1. Construisez vos conteneurs Docker en utilisant la commande suivante.
docker-compose -f docker-compose-prod-deploy.yml build
Vous devriez voir la construction de votre conteneur Docker :
2. Lancez les conteneurs Docker en mode daemon (-d).
docker–compose –f docker–compose–prod–deploy.yml up –d
3. Surveillez les journaux.
docker-compose -f docker-compose-prod-deploy.yml logs -f
4. Accédez à votre site web via le DNS public. Notez que par défaut, la connexion est configurée en HTTP, pas HTTPS. Donc, avant d’accéder au site, supprimez le « s » de l’URL :
http://ec2-35-181-153-18.eu-west-3.compute.amazonaws.com/api/health-check/
5. Vous pouvez arrêter votre instance en utilisant la commande suivante.
docker-compose -f docker-compose-prod-deploy.yml down
6. Nettoyez les instances Docker inutilisées de temps en temps.
Pour libérer de l’espace sur votre disque, nettoyez les conteneurs Docker obsolètes de temps en temps en utilisant cette commande :
docker system prune
Dépannage
- Si vous ne parvenez pas à accéder au site. Si vous rencontrez ce problème :
Cela signifie que votre proxy n’est pas accessible depuis l’extérieur.
Pour résoudre ce problème, accédez à la console de votre instance EC2 et vérifiez l’onglet Sécurité :
Si ce n’est pas le cas, cliquez sur votre groupe de sécurité (par exemple, sg-0ca016958bb85b7e4 (launch-wizard-3)) puis sur « Modifier les règles entrantes ».
Vous pourrez voir différentes règles pour les connexions entrantes. Cliquez sur « Ajouter une règle » et essayez d’ajouter HTTP avec une source personnalisée 0.0.0.0/0
Après cela, vous devriez pouvoir accéder au site.
Conclusion
Félicitations ! Vous avez déployé avec succès une application Django en utilisant Docker sur une instance AWS EC2. À travers ce tutoriel, nous avons couvert les étapes essentielles pour mettre en place votre projet dans le cloud. Voici un récapitulatif rapide de ce que nous avons accompli :
1. Vue d’ensemble. Nous avons commencé par comprendre les bases d’AWS et d’EC2, ainsi que les avantages d’utiliser ces services pour déployer des applications.
2. Création du projet : Nous avons discuté de la configuration du projet Django, en abordant les modèles principaux et les détails du dépôt.
3. Inscription AWS : Nous avons parcouru les étapes pour créer un compte AWS, configurer des utilisateurs root et IAM, en mettant l’accent sur l’importance de la sécurité.
4. Création d’une instance EC2 : Nous avons créé une instance EC2, configuré ses paramètres nécessaires, et nous sommes assurés qu’elle respecte les limites du niveau gratuit d’AWS.
5. Accès SSH à Amazon Linux : Nous avons appris à accéder de manière sécurisée à l’instance EC2 en utilisant SSH depuis une machine locale et via la Console de gestion AWS.
6. Clonage du dépôt vers l’instance EC2 : Nous avons installé Git sur notre instance EC2 et cloné le dépôt du projet Django en utilisant HTTPS. Nous avons également couvert une étape facultative pour configurer des clés SSH GitHub pour un accès sécurisé.
7. Déploiement du projet Django sur AWS EC2 en utilisant Docker : Nous avons installé Docker sur l’instance EC2, configuré le projet, construit les images Docker, et lancé les conteneurs Docker pour déployer l’application Django.
En suivant ce tutoriel, vous avez maintenant une bonne compréhension du déploiement d’une application Django sur AWS EC2 en utilisant Docker. Cette configuration garantit que votre application est évolutive et flexible.
N’hésitez pas à explorer d’autres améliorations, telles que la mise en place d’un pipeline CI/CD, l’activation de HTTPS pour des connexions sécurisées, ou le dimensionnement de votre infrastructure en fonction de la demande. AWS propose une large gamme d’outils et de services qui peuvent vous aider à optimiser et à gérer efficacement vos déploiements.
Bon déploiement !