Fermer

mars 11, 2025

Déploiement de l’infra à l’aide de Terraform (IAC) et automatiser CICD à l’aide de Jenkins sur AWS ECS / Blogs / Perficient

Déploiement de l’infra à l’aide de Terraform (IAC) et automatiser CICD à l’aide de Jenkins sur AWS ECS / Blogs / Perficient


Terraform

Terraform est une infrastructure appartenant à Hashicorp en tant que technologie de code (IAC) qui vous permet de développer, déployer, modifier et gérer les infrastructures à l’aide du code. Il maintient la durée de vie de votre infrastructure, vous permet de définir des ressources et des infrastructures dans des fichiers de configuration déclaratifs lisibles par l’homme et gère le cycle de vie de votre infrastructure.

Le code est simplement des instructions écrites dans le langage HCL (Hashi Corp Configuration Language) dans un format lisible par l’homme avec le langage d’extension (.tf) ou (.tf.json) qui est écrit en langage HCL (Hashi Corp Configuration Language).

Qu’est-ce que IAC?

Infrastructure As Code (IAC) fait référence à l’utilisation de fichiers de configuration pour contrôler votre infrastructure informatique.

Quel est le but de l’IAC?

La gestion de l’infrastructure informatique est traditionnellement une tâche laborieuse. Les gens installeraient et configureraient physiquement les serveurs, ce qui prend du temps et coûteux.

De nos jours, les entreprises se développent rapidement, de sorte que les infrastructures gérées par manuelle ne peuvent plus répondre aux exigences des entreprises d’aujourd’hui.

Pour répondre aux demandes et économiser des coûts du client, les organisations informatiques adoptent rapidement le cloud public, qui est principalement axé sur l’API, et ils architectent leur application de manière à soutenir un niveau d’élasticité beaucoup plus élevé et de déployer leur application sur des technologies de support comme Docker Container et le cloud public. Pour créer, gérer et déployer le code sur ces technologies, un outil comme Terraform est inestimable pour livrer rapidement le produit.

Terraform Workflow

TF Workflow

Terraform init

  • La commande TerraForm INIT initialise un répertoire fonctionnel contenant des fichiers de configuration Terraform.

Plan de terre

  • La commande Terraform Plan est utilisée pour créer un plan d’exécution.

Terraform s’applique

  • La commande Terraform Apply est utilisée pour appliquer les modifications requises pour atteindre l’état souhaité de la configuration.

Terraform Refresh

  • La commande Terraform Refresh réconcilie l’État que Terraform connaît (via son fichier d’État) auprès de l’infrastructure du monde réel. Cela ne modifie pas l’infrastructure mais modifie le fichier d’état.

Terraform détruise

  • Le commandement Terraform Destroy est utilisé pour détruire l’infrastructure gérée par Terraform.

Pipeline Jenkins

Un pipeline Jenkins est une suite de plugins qui prend en charge la construction, le déploiement et l’automatisation des flux de travail d’intégration et de livraison continue (CI / CD). Il fournit un moyen de définir l’intégralité du processus de construction dans un format scripté ou déclaratif appelé Jenkinsfile. Cela permet aux développeurs de gérer et de verser leurs processus CI / CD avec leur code d’application.

Pourquoi Jenkins Pipeline?

Infrastructure comme code (IAC)

  • Le processus de construction est défini dans un Jenkinsfile Écrit en DSL basé sur Groovy (langue spécifique au domaine).
  • Le JenkinsFile peut être stocké et versé dans le même référentiel que le code source d’application, assurant la synchronisation entre les processus de code et de construction.

Réutilisabilité et maintenabilité

  • Un seul pipeline Jenkins peut être réutilisé dans plusieurs environnements (développement, test, production).
  • Mettez à jour le JenkinsFile pour modifier le processus de construction, en réduisant la nécessité de modifier manuellement plusieurs travaux dans Jenkins.

Contrôle de version améliorée

  • Le code d’application et le processus de construction sont versés ensemble.
  • Les versions plus anciennes peuvent être construites en utilisant le JenkinsFile correspondant, assurant la compatibilité.

Automatisation et évolutivité

  • Le pipeline automatise l’intégralité du flux de travail CI / CD, y compris la récupération du code, la construction, les tests et le déploiement.
  • Il prend en charge étapes parallèlespermettant à plusieurs tâches (par exemple, des tests d’unité et d’intégration) pour s’exécuter simultanément.

Gestion de configuration simplifiée

  • Les configurations de travail ne sont plus stockées en tant que fichiers XML dans Jenkins. Au lieu de cela, ils sont définis comme du code dans le JenkinsFile, ce qui facilite la sauvegarde et la restauration.

Types de pipelines Jenkins

Jenkins fournit deux types de pipelines:

Pipeline déclaratif

  • Plus facile à utiliser, structuré et conçu pour la plupart des utilisateurs.
  • Utilise une syntaxe définie et fournit une gestion des erreurs intégrée.

Pipeline

  • Plus flexible mais nécessite des connaissances avancées de script groovy.

AWS ECS

AWS ECS (Elastic Container Service) est un service géré par un conteneur AWS qui vous permet d’exécuter et de gérer des conteneurs Docker sur un groupe de serveurs virtuels.

Ère de déploiement des conteneurs

Le système d’exploitation du conteneur maintient l’isolement de l’application. Le service de conteneurs est tendance de nos jours.

  • Léger: Les conteneurs ont moins de frais généraux que les machines virtuelles. Ils peuvent être utilisés avec le système d’exploitation hôte sans l’installer; Ils ne contiennent que les bibliothèques et les modules nécessaires pour exécuter l’application.
  • Portable: Les conteneurs peuvent être déplacés d’un hôte à un autre et courir sur la distribution et les nuages ​​du système d’exploitation.
  • Efficace: Une meilleure utilisation des ressources que les machines virtuelles, qui ne peuvent pas occuper l’intégralité du matériel et augmenter progressivement en fonction des exigences.
  • Déploiement rapide: Les conteneurs peuvent construire rapidement à partir des images de conteneurs, et il est facile de faire reculer.
  • Microservices: Il est basé sur une architecture couplée vaguement et prend en charge le mieux distribué pour les microservices.

Architecture

Cambre

Dans ce diagramme d’architecture, nous lancerons une instance EC2 à l’aide de Terraform dans AWS et des données utilisateur pour la configuration du serveur Jenkins. Par Jenkins CICD Pipeline, nous récupérons le code source à partir de GitHub, créons une image Docker et le téléchargez dans le registre Docker ECR. Nous allons déployer l’application sur le cluster ECS avec cette image Docker.

Étape 1: Créez un utilisateur IAM et une clé d’accès / clé secrète pour l’utilisateur IAM, et fournissez les autorisations appropriées, telles que la politique ECR et Docker Container.

IMG 1

Étape 2: Créez un référentiel ECR pour stocker les images Docker.

IMG 2

Étape 3: Créer un cluster ECS

Img 4

Étape 3.1: Créer une définition de tâche. La définition de la tâche contient toutes les informations pour exécuter le conteneur, telles que l’URL de l’image du conteneur et la puissance de calcul.

IMG 5

Étape 3.2- Rôle d’exécution: Il est attaché à la définition de la tâche avec l’autorisation des journaux CloudWatch pour collecter les journaux en temps réel de la stratégie de rôle d’exécution de la tâche du conteneur et ECS.

Je rôle

Étape 3.3: Créer un service dans le cluster: Si la définition de la tâche ne peut pas gérer le déploiement, nous devons créer un service qui est un intermédiaire entre les instances d’application et de conteneur.

IMG 6

Étape 4: Configuration du serveur Jenkins

IMG 3.0

Déployons le code à l’aide de Jenkins sur ECS Cluster: JenkinsFile pour le pipeline CICD: https://github.com/prafulitankar/gitops/blob/main/jenkinsfile

Créez un pipeline Jenkins, qui devrait être un pipeline déclaratif.

IMG 7.0

Nous avons fait avec la configuration Infra et le pipeline Jenkins. Exécutons le pipeline Jenkins:

IMG 7

Une fois le pipeline Jenkins exécuté avec succès, le service ECS tentera de déployer une nouvelle révision de l’image Docker.

IMG 8

Sortir: Une fois le pipeline exécuté avec succès, notre application s’est déployée avec succès sur la sortie du cluster ECS de l’application.

IMG 9

Nous avons lancé le serveur Jenkins sur une instance EC2 avec Terraform. Ensuite, nous avons créé un référentiel ECR pour stocker l’image Docker, le cluster ECS, la définition de la tâche et le service pour déployer l’application. À l’aide du pipeline Jenkins, nous avons tiré le code source de GitHub, construit le code, créé une image Docker et l’avons téléchargée dans le référentiel ECR. Il s’agit de notre partie CI, puis nous avons déployé notre application sur ECS, qui est CD.






Source link