Agence web » Actualités du digital » Codifiez votre infrastructure AWS avec CloudFormation

Codifiez votre infrastructure AWS avec CloudFormation

codifiez-votre-infrastructure-aws-avec-cloudformation-cloudsavvy-it-2655576

CloudFormation est un outil pour automatiser la création, la mise à jour et la gestion de l’ensemble de votre pile de ressources. Il fournit un moyen de transformer votre infrastructure en code, sous la forme d’un fichier YAML, dont la version peut être contrôlée avec votre logiciel.

Qu’est-ce que CloudFormation?

Le concept de CloudFormation est assez simple: la création manuelle de ressources peut être pénible, et bien qu’elle puisse être automatisée à l’aide de requêtes CLI ou API, si vous avez besoin de mettre à jour votre pile à l’avenir, ce sera toujours un processus principalement manuel. Plutôt que de se soucier de cela, CloudFormation offre un moyen de modéliser la structure et la configuration de toutes vos ressources.

Cela se fait avec un modèle YAML ou JSON, qui contient toutes les informations requises pour votre pile de produits, y compris les ressources à créer, les paramètres et la configuration de ces ressources et les sorties qu’elles renvoient. Ce fichier peut être contrôlé par version via Git, et même utilisé pour créer un pipeline de déploiement continu qui poussera automatiquement les modifications

Cependant, vous n’avez pas à créer le modèle YAML manuellement. Il est beaucoup plus facile d’utiliser le «Designer» basé sur le Web de CloudFormation, qui affichera visuellement l’ensemble de votre pile de produits. Par exemple, voici l’un des exemples de modèles, pour un déploiement WordPress à mise à l’échelle automatique, à charge équilibrée en utilisant une instance RDS comme base de données.

1600784181_534_codifiez-votre-infrastructure-aws-avec-cloudformation-cloudsavvy-it-4809713

Vous pouvez faire glisser de nouveaux composants hors du catalogue fourni et lier les composants ensemble. Les mises à jour du modèle visuel mettront à jour le modèle YAML sous-jacent. Si vous cliquez sur une ressource de ce modèle, elle défilera automatiquement jusqu’à l’entrée dans la liste des ressources YAML. Très utile.

Une fois que vous déployez ce modèle, toutes les ressources qui lui sont associées seront créées dans votre compte. Lorsque la pile doit être mise à jour, les ressources existantes seront mises à jour avec une nouvelle configuration, les anciennes ressources seront supprimées si elles ne sont plus utilisées et de nouvelles ressources seront lancées lors de leur ajout.

CloudFormation gérera également la création de dépendances dans le bon ordre, sans que vous ayez à y penser vous-même. Par exemple, si vous souhaitez créer une instance EC2 avec un groupe de sécurité, CloudFormation s’assurera de créer d’abord le groupe de sécurité, puis de créer l’instance avec ce groupe de sécurité. Tout ce que vous avez à faire est de les relier dans la console.

Le principal inconvénient de CloudFormation est que si vous vous engagez dans Infrastructure-as-code, vous devrez vous engager pleinement – apporter des modifications manuelles à la configuration des ressources en dehors de CloudFormation est dangereux, car les mises à jour de CloudFormation peuvent écraser vos modifications manuelles pour appliquer ce que vous avez dans votre modèle. Par exemple, si vous avez déployé une adresse IP élastique et que vous souhaitez la pointer vers une autre instance, vous devrez le faire à partir de la console CloudFormation, et non de la console de gestion EC2. Techniquement, les modifications manuelles persisteront au moins jusqu’à la prochaine mise à jour de CloudFormation, et si la configuration du modèle ne change pas entre-temps, CloudFormation n’appliquera pas le schéma dans le modèle. Ainsi, bien que vous puissiez vous en sortir avec des changements manuels à court terme, cela n’est pas conseillé et est entièrement éphémère.

Utilisation de l’éditeur en ligne

Accédez à la console CloudFormation, cliquez sur « Créer une pile », puis sélectionnez « Avec de nouvelles ressources ».

1600784181_369_codifiez-votre-infrastructure-aws-avec-cloudformation-cloudsavvy-it-4254785

Cela ouvrira une boîte de dialogue dans laquelle vous sélectionnerez votre modèle CloudFormation. Vous pouvez importer un modèle existant depuis S3, mais si vous ne faites que commencer, nous vous suggérons d’essayer l’un des exemples de modèles. Nous allons sélectionner le modèle simple «LAMP Stack», qui déploie un seul serveur Web. Cliquez sur «Afficher dans le concepteur» pour ouvrir le modèle.

1600784181_75_codifiez-votre-infrastructure-aws-avec-cloudformation-cloudsavvy-it-1933449

Ce modèle est assez basique. Juste une instance EC2 et un groupe de sécurité pour cette instance.

1600784181_733_codifiez-votre-infrastructure-aws-avec-cloudformation-cloudsavvy-it-5666457

Si vous souhaitez ajouter quelque chose de nouveau au modèle, le moyen le plus simple est de rechercher la ressource dans la barre latérale et de la faire glisser. Par exemple, si vous souhaitez ajouter une adresse IP Elastic à associer à cette nouvelle instance, regardez dans le « EC2 »Pour trouver« EIP »et faites-la glisser dans:

1600784181_907_codifiez-votre-infrastructure-aws-avec-cloudformation-cloudsavvy-it-1992090

Par défaut, il n’est connecté à rien. Vous devrez le joindre à l’instance EC2 pour avoir un effet. Les points de couleur violette sont des propriétés. Vous pouvez faire glisser à partir de ces propriétés pour former des liens vers d’autres ressources. Pour lier l’adresse IP Elastic, faites glisser le coin supérieur «EIPAssociation» vers l’instance. Les ressources compatibles seront surlignées en vert lors du glissement.

1600784181_534_codifiez-votre-infrastructure-aws-avec-cloudformation-cloudsavvy-it-4809713

Si vous cliquez sur une ressource, vous serez amené à l’entrée dans le modèle YAML. Les modifications apportées à ce modèle se propageront au concepteur, mais vous devrez peut-être appuyer sur le bouton d’actualisation dans le coin supérieur droit.

Formatage YAML

Dans l’ensemble, le modèle YAML comprendra quelques sections distinctes:

Métadonnées, principalement utilisé par CloudFormation Designer pour suivre visuellement où les choses se trouvent, mais peut également être utilisé pour les métadonnées générales.

Paramètres, arguments qui sont passés à la console CloudFormation et peuvent être passés dans le modèle au moment de l’exécution. Par exemple, le modèle par défaut comprend quelques paramètres permettant de spécifier le nom, le nom d’utilisateur et le mot de passe de la base de données MySQL, tels que:

DBName:
    Default: MyDatabase
    Description: MySQL database name
    Type: String
    MinLength: '1'
    MaxLength: '64'
    AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'
    ConstraintDescription: must begin with a letter and contain only alphanumeric characters.

Mappages, ce sont un peu compliqués, mais ils sont essentiellement comme case déclarations. Vous pouvez les utiliser pour modifier les valeurs des paramètres en fonction d’une clé. Par exemple, AWS l’utilise pour modifier l’ID AMI en fonction de la région dans laquelle le modèle est déployé. Vous pouvez utiliser le Fn::FindInMap fonction intrinsèque pour rechercher ces valeurs ailleurs dans le modèle. Vous voudrez peut-être en savoir plus à ce sujet dans la documentation AWS.

Mappings: 
  RegionMap: 
    us-east-1: 
      "HVM64": "ami-0ff8a91507f77f867"
    us-west-1: 
      "HVM64": "ami-0bdb828fd58c52235"
    eu-west-1: 
      "HVM64": "ami-047bb4163c506cd98"
    ap-southeast-1: 
      "HVM64": "ami-08569b978cc4dfa10"
    ap-northeast-1: 
      "HVM64": "ami-06cd52961ce9f0d85"

Conditions, qui permettent à CloudFormation de déployer des ressources uniquement si les conditions sont remplies. Par exemple, vous pouvez l’utiliser pour déployer des ressources spécifiques dans des environnements de production, de test et de préparation, mais pas dans ceux de développement.

Conditions: 
  CreateProdResources: !Equals [ !Ref EnvType, prod ]

Se transforme, qui permettent un traitement personnalisé sur votre modèle avant son déploiement. C’est un peu une fonctionnalité de niche, mais elle est utilisée par SAM pour déployer des fonctions Lambda. Vous devrez le configurer manuellement, puis l’appeler par son nom:

Transform: [MyMacro, AWS::Serverless]

Les sorties, qui vous permettent de lier des ressources entre des piles ou simplement de renvoyer une réponse. Vous pouvez les considérer comme des variables publiques ou privées.

Outputs:
  BackupLoadBalancerDNSName:
    Description: The DNSName of the backup load balancer
    Value: !GetAtt BackupLoadBalancer.DNSName
    Condition: CreateProdResources
  InstanceID:
    Description: The Instance ID
    Value: !Ref EC2Instance

Et enfin, Ressources, qui est simplement un tableau de toutes les ressources du modèle. Cela variera énormément en fonction de ce que vous utilisez, car chaque service aura ses propres propriétés. Par exemple, une instance EC2 avec une AMI personnalisée peut ressembler à ceci:

Resources:
  MyEC2Instance:
    Type: "AWS::EC2::Instance"
    Properties:
      ImageId: "ami-0ff8a91507f77f867"

Vous pouvez consulter la référence de schéma complète d’AWS pour plus d’informations sur le service particulier que vous utilisez, ou la référence de ressource et de propriété.