CloudFormation dans AWS : L’outil indispensable pour tirer pleinement parti de vos infrastructures dans le Cloud

Je me suis lancé dans l’utilisation de CloudFormation à la suite d’échanges privilégiés avec AWS dans le cadre de notre partenariat. J’ai retenu que sans l’utilisation de CloudFormation, on perdait 50% des bénéfices du Cloud, en terme de fonctionnalités. Et je me suis mis à l’ouvrage.
Je dois dire que CloudFormation, ça se mérite et la prise en main est assez laborieuse. Mais quand on commence à bien le prendre en main, alors là… Jackpot !

Je vais vous présenter quelques fonctionnalités de CloudFormation, sachant que le guide utilisateur fait 2519 pages ! Bon, pour ne pas vous effrayer, il y a seulement 500 pages décrivant la prise en main, le reste ce sont des références langage sur les ressources.
Je m’appuierai au cours de cet article sur un exemple parlant :  le déploiement d’un template décrivant la création d’un VPC ainsi qu’un subnet privé, un subnet public, des tables de routage, une internet gateway.

 

1) Comment est construit CloudFormation ?

CloudFormation est composé de deux éléments majeurs :

  • Le template

    C’est un fichier plat qui définit l’infrastructure à mettre en place. C’est un fichier au format Json, et depuis un peu plus d’un an, il est possible d’utiliser un format Yaml.
    Voici un extrait d’un template au format Yaml, format pour lequel j’ai une préférence. L’outil graphique de création de template « Design template » permet de convertir le template afin de passer indifféremment d’un langage à l’autre.

AWSTemplateFormatVersion: 2010-09-09
Description: >
  Creation d'un VPC sur deux AZ differentes avec : deux subnets publics, deux
  subnets prives, une gateway internet Les tables de routages vers la gateway
  internet
Metadata:
  'AWS::CloudFormation::Designer':
.....
.....
Resources:
  EC2VPCGNIN1:
    Type: 'AWS::EC2::VPCGatewayAttachment'
    Properties:
      InternetGatewayId: !Ref InternetGateway
      VpcId: !Ref VPC
    Metadata:
      'AWS::CloudFormation::Designer':
        id: 971531bc-6847-434e-9d95-e81127b16d42
  TabRoute1PubA:
    Type: 'AWS::EC2::RouteTable'

 

Il est possible de créer une infrastructure par description de celle-ci en utilisant directement Json ou Yaml. En utilisant un éditeur de texte, vi ou notepad ou autre, on écrit les composants, le paramétrage. Comme vous pouvez vous en douter, cela n’est vraiment pas aisé. Qu’à cela ne tienne, l’éditeur graphique (« Design template ») disponible dans la console est là pour nous aider à décrire notre infrastructure avec des « drag and drop » de ressources. L’interface permet aussi d’ajouter des éléments de paramétrage non graphique.

Voici un exemple présentant le Designer

Ci-dessous notre template tel qu’il apparait dans le Designer

 

 

  • La stack

    C’est le mécanisme qui va utiliser le template pour pouvoir l’implémenter dans notre infrastructure Cloud. Il est possible, partant de notre template décrivant un réseau VPC, de créer une stack dédiée à un VPC Production, un VPC Dev, …
    Comment cela est il possible ?
    Par l’utilisation de paramétrage. Lors de la création de la stack.

Je crée donc deux stacks : une stack contenant le VPC de production, une autre stack contenant le VPC de développement.

Mon infrastructure se présente maintenant sous la forme de deux stacks :

 

 

2) Comment travailler avec CloudFormation ?

Il y a plusieurs objectifs dans l’utilisation de CloudFormation

    • La centralisation de la description de mon infrastructure. Si toute mon infrastructure est contenue dans les stacks, j’ai une vision centralisée de ce que déploie. Lorsque l’on utilise le Cloud, on se rend compte que la notion d’organisation est ici aussi primordiale. Le but est d’utiliser à bon escient les bonnes pratiques de conception et d’organisation d’une infrastructure.

 

    • La répétabilité, la réutilisation
      Certaines entreprises ont une librairie de dizaines, centaines de templates. L’avantage est certain : je décris mon infrastructure, je la crée, je réutilise le travail déjà effectué. Il existe des possibilités liées par exemple au déploiement d’un PRA. Mes templates sont déjà prêts. Je suis capable, en cas de sinistre sur le site de production on-premise, de déployer automatiquement dans le Cloud en quelques minutes l’image de mon infrastructure de production (il faut bien sûr penser à la duplication des données en plus). Grâce à cela, mon site de PRA ne me coûte rien (ou presque, suivant les choix réalisés comme la réplication des données par un mécanisme quelconque qui consommera du stockage ou des services RDS en cas de synchronisation des bases de données).

 

  • Maintenabilité
    L’utilisation de CloudFormation permet de maintenir les infrastructures. Lorsqu’une modification est à effectuer dans une stack sur une des ressources, ou qu’une ressource est à rajouter, la stack peut être ré-appliquée afin d’apporter les modifications.

 

A titre de conclusion, je ne peux que redire les bienfaits de l’utilisation de CloudFormation, qui, avec d’autres services comme Lambda, Elastic Beanstalk, CloudFront, … sont la voie à suivre pour une réelle « Cloudification » : automatisation, serverless, Cloud as code.

Montez en compétences sur l’architecture Amazon Web Services grâce à nos formations « Architecting on AWS ». Suivez la formation qui convient à votre niveau.