Hello World Serverless : déployer une fonction AWS Lambda avec CDK + TypeScript
Le serverless est devenu l’une des approches les plus populaires pour construire des applications rapides,scalable et economiques. Avec AWS Lambda, il suffit d’écrire du code : Aws se charge du reste (serveurs,scalabilité…).
Mais un autre outil facilite encore plus l’expérience: AWS CDK, qui permet de décrire votre infrastructure en TypeScript, Java, Python,C# ou Go au lieu d’écrire du YAML ou du Json pour CloudFormation.
Dans cet article je vous montre comment déployer votre toute première fonction aws lambda en quelques minutes grâce à AWS CDK et TypeScript. Aucun préréquis compliqué, pas d’architecture difficile: juste un bon premier pas dans le monde du serverless.
Objectif du tutoriel
Nous allons:
- Creer un projet AWS CDK en TypeScript
- écrire une petite fontion Lambda ‘Hello world’
- Déployer cette fontion
- Testé
- Nettoyé les ressources pour éviter les coûts
Prérequis
Avant de commencer, il vous faut:
- Node.js
- AWS CLI configurée:
aws configure- AWS CDK installé:
npm install -g aws-cdk
- Un compte aws actif
1. Initialiser le projet CDK
Creez un dossier pour votre projet:
mkdir cdk-lambda-demo
cd cdk-lambda-demoInitialisez un projet CDK TypeScript:
cdk init app --language typescriptCDK crée la structure suivante:
/bin --------------> point d'entrée
/lib --------------> définition des stacks
cdk.json -------------> configuration CDK
tsconfig.json
package.json2. Créer la fonction Lambda
Créer un dossier /lambda/ et un ficher hello.ts
mkdir lambda
touch lambda/hello.tsAjouter ce code simple dans le fichier hello.ts
//lambda/hello.ts
export const handler = async()=> {
return {
statusCode: 200,
body: JSON.stringify({message: "hello world from aws cdk "});
}
};Cette fonction retourne juste un message en Json.
3. Déclarer la fonction Lambda dans CDK
Ouvrez le fichier lib/cdk-lambda-demo-stack.ts et remplacez son contenu par :
import * as cdk from "aws-cdk-lib";
import { Construct } from "constructs";
import * as lambdaNodejs from 'aws-cdk-lib/aws-lambda-nodejs';
export class CdkLambdaDemoStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
new lambdaNodejs.NodejsFunction(
this,
'HelloHandler', {
entry: 'lambda/hello.ts', // path to the Lambda function code
handler: 'handler',
functionName: 'HelloHandler' // name of the exported handler function
});
}
}En résumé:
- runtime -> environement d’éxecution de la fontion : Nodejs 18
- code -> dossier contenant la fonction
- handler -> fichier + fontion exportée
- functionName -> c’est le nom de la fonction à utiliser pour un appel depuis la cli aws
Avertissement
Executer la cmd npm install -D @types/aws-lambda esbuild
pour le typage ,
esbuild pour la transpilation du typeScript en JS sinon une image docker sera utiliser pour la transpillation ce qui rendrat le deploiement plus long
4. Déployer la Lambda
avant de deployer:
npm install # pour intaller les dependences du projet
cdk bootstrap
cdk synth #pour générer le template Cloudformation du projet
cdk deploy # c'est tres évident5. Tester la fonction
depuis la cli:
aws labda invoke\
-- function-name HelloHandler \
response.jsonpuis
cat response.jsondepuis la console aws :
6. Nettoyer
cdk destroyCela supprime la fontion lambda et la stack CDK.
Conclusion
Dans cet article nous avons :
- créér un projet aws cdk en Ts
- ecrit notre premiere fonction lambda
- déployer notre premiere stack cdk
- tester notre fonction lambda
- projet gitlab
C’est une première étape importante pour entrer dans le monde du serverless.
La prochaine étape pourrait être l’ajout d’une API Gateway comme déclancheur de notre fonction lambda.
Commentaires