Créer une fonction Lambda avec Cloud Formation
Créer une fonction Lambda avec Cloud Formation
Photo by C Dustin on Unsplash
Automatisation avec l'Infrastructure as Code
L’avènement du "Cloud Computing" permet aux équipes de développement et celles chargées des opérations de collaborer davantage. Ensemble, elles peuvent, par exemple, créer des applications capables d'allouer des ressources au moment où elles en ont besoin. Les temps de réponse sont meilleurs. La facture est réduite. Aujourd'hui, le Cloud offre de nombreux avantages, comme la possibilité de créer et déployer des infrastructures sous-jacentes en quelques minutes. Néanmoins, plusieurs changements doivent être effectués pour pouvoir en faire un avantage. Ces changements sont entre autres :- définir les modèles des nouveaux services,
- automatiser leur déploiement, la gestion des configurations/mise à jour,
- monitorer les performances,
- remonter les alertes
- et surtout intégrer les processus de développement.
L’infrastructure as Code, quésaco ?
L’infrastructure as Code ou IaC fait référence à possibilité de pouvoir construire et gérer une infrastructure virtuelle à travers du code. Une infrastructure virtuelle comprend les serveurs, la mise en réseau, équilibrage de charge et la sécurité.L’utilisation de l’infrastructure as code profère certains avantages que l’on peut citer : Pourquoi ?
- la réduction des coûts : l’utilisation de l’IaC permet d'une certaine manière de réduire les coûts, car il nous évite de passer un certain temps sur des configurations matérielles ou logicielles, qui peuvent engendrer des coûts significatifs. De plus, l’IaC permet de provisionner et de détruire des ressources à la volée en fonction des besoins, cela permet d’éviter de payer pour des ressources non utilisées.
- la réduction des risques : l’automatisation de processus fiables ne requiert aucune action humaine, ce qui évite toute maladresse liée à une mauvaise manipulation simple ou répétitive. Il devient donc possible de développer le code qui construit l’infrastructure et de mettre en application de nombreuses bonnes pratiques et outils issus de l’expérience du développement. On peut par exemple, mentionner le versioning dans un contrôle de code source. Il devient, par la même occasion, possible de procéder à un retour arrière à chaque incrément de l’évolution d’une infrastructure.
- la rapidité d’exécution : l’automatisation permet aux équipes chargées du développement de l’application, de se focaliser sur la conception de l’application sans se préoccuper de son déploiement ce qui apporte un gain de temps important.
- une meilleure collaboration entre les équipes : le code peut être facilement partagé à tous les membres participant au projet du développement de l’application pour valider ou corriger le code. Ce qui va permettre de partager la responsabilité avec tous les membres et ainsi de casser "le mur de la confusion".
Les outils
Il existe plusieurs outils qui permettent d'utiliser l'IaC pour interagir avec le Cloud, mais ces outils n'ont pas tous la même fonction. Il existe plusieurs catégories d'outils permettant d'écrire une infrastructure en tant que code. Nous pouvons citer les outils de scripting classiques de type bash, python, ruby,... qui vont être utilisés pour automatiser tout ce qui peut être fait à la main. Les outils de gestion de configurations tels que Chef, Puppet, Ansible, vont être utilisés pour installer et gérer des applications dans un ou plusieurs serveurs existants. Nous avons ensuite les outils de templates serveur tels que Docker, Packer, Vagrant qui vont nous permettre de créer une image serveur pré-configuré qui va être déployé à l'aide d'outils comme Ansible sur plusieurs serveurs. Enfin, nous avons les outils de provisioning tels que Cloud Formation, Terraform, OpenStackHeat, qui vont servir à créer les serveurs qui vont être configurés par les outils de configuration. Nous allons, au cours de cet article de blog, nous concentrer sur l'outil Cloud Formation fourni par AWS pour rester sur une optique d'utilisation des outils AWS.Cloud Formation, c'est quoi ?
Cloud Formation est service AWS pour l'Infrastructure as Code. Il a joué un rôle dans la popularité d'AWS. Avant de commencer la démonstration, il est important de rappeler le rôle et le fonctionnement du service Cloud Formation. Cloud Formation permet de manière déclarative, de spécifier des groupes de ressources en langage JSON ou YAML. Chaque ressource déclarée est créée de manière conforme aux spécifications renseignées sur le code en JSON. Il est toujours plus simple de comprendre en illustrant par un exemple. Dans cet article nous déploierons une simple fonction Lambda NodeJs en utilisant Cloud Formation. La fonction NodeJs peut-être récupérée dans un bucket S3, mais pour cet exemple nous allons simplement nous contenter de décrire la fonction directement dans un code YAML. Pour rappel, Lambda est un service proposé par AWS qui permet d’exécuter du code en réponse à des événements, sans se soucier des ressources nécessaires à son exécution (serverless).Pratique
Nous commençons par créer unrôle
IAM qui va être attribué à la ressource Lambda que l'on va créer. Dans cet exemple, nous allons créer un rôle
RootRole qui sera assumé par le service Lambda.
Resources: RootRole: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: - 'sts:AssumeRole' Path: / ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
AssumeRolePolicyDocument
correspond à la stratégie (Policy) d'approbation associée à ce rôle.ManagedPolicyArns
va servir à spécifier la stratégie que l'on souhaite attacher à l'utilisateur.
Création d'une Lambda avec Cloud Formation
Lambda1: Type: 'AWS::Lambda::Function' Properties: Code: ZipFile: !Sub | exports.handler = async (event) => { const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; return response; }; Description: Test with CloudFormation FunctionName: HelloWorldNodeJs Handler: index.handler Role: !GetAtt RootRole.Arn Runtime: "nodejs10.x"
ZipFile
permet de spécifier le code source (NodeJs ou Python) directement dans la configuration. Cloud Formation s'occupera d'ajouter le code dans un fichier index.js qu'il compressera pour créer un package de déploiement.Handler
correspond au nom de la méthode au sein du code que Lambda appelle pour exécuter notre fonction. Il inclut le nom du fichier, donc doit obligatoirement commencer parindex
.
foo@bar:~$ aws cloudformation deploy --template-file ./lambda-helloworld-njs.yml --stack-name LambdaHelloWorldJs --capabilities CAPABILITY_IAMNous précisons le paramètre
--capabilities
pour spécifier que nous sommes OK pour créer une ressource liée à IAM.
Nous pouvons supprimer la pile à l'aide de la commande suivante :
foo@bar:~$ aws cloudformation delete-stack --stack-name LambdaHelloWorldJs
Conclusion
Comme nous avons pu le voir à travers cette démonstration, Cloud Formation est un outil indispensable pour toutes les tâches qui peuvent être automatisées. Cette manière de définir son infrastructure nous amène à réellement prendre en main notre infrastructure de manière rapide et efficace. En effet, la possibilité de construire toute son infrastructure avec du code nous permet de rapidement déployer de nouvelles fonctionnalités tout en gardant une vue globale de son infrastructure. Pour aller plus loin :- AWS CloudFormation : https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/
- AWS Lambda : https://docs.aws.amazon.com/lambda/latest/dg/