TP#134

AWS Lambdas lokal debuggen? Serverless-offline to the rescue

Problem

Ihr seid auch in der Neuzeit angekommen und schreibt euren Business Code jetzt serverless? Super! Die einzelnen Lambda-Funktionen laufen in der Amazon-Infrastruktur und man muss nur ein paar Zeilen JavaScript in der AWS Console schreiben. Aber will man das? Vielleicht doch lieber eine IDE nutzen und TypeScript schreiben? Geht klar. Aber woher weiß ich dann, dass mein Lambda-Code auch funktioniert, ohne ihn zu AWS zu deployen?

Lösung

Nutzt das Tool serverless (kurz: sls) in Kombination mit dem Plugin serverless-offline! Allgemeint hilft euch sls bei der lokalen Entwicklung der Lambdas, beim Deployment zu AWS etc. Es gibt etliche Plugins – eins davon ist serverless-offline. Dieses Plugin simuliert ein lokales AWS Api-Gateway. Mit diesem Gateway werden die einzelnen Lambda-Funktionen verknüpft und ihr könnt es lokal z. B. mittels Postman oder IDEA Scratch File testen.

Beispiel

In eurer sls Konfiguration müsst ihr http-Events für alle Lambdas definieren, welche ins lokale Gateway inkludiert werden sollen. Im TypeScript sieht das für eine getCoffee Funktion ungefähr so aus:
functions: {
   getCoffee: {
      events: [
        {
          // 'http' simulates the RestApi of AWS
          http: {
            method: 'get',
            path: '/coffee',
          },
        },
      ],
      handler: 'src/config/handlers/getCoffee',
    },
}
Ihr legt euch ein Nodejs Run/Debug-Profil an, welches sls offline startet:
Working directory: ~/Code/CoffeeLambdas
JavaScript file: ~/.nvm/versions/node/v12.14.1/bin/serverless # npm global binary file for sls
Application parameters: offline start --aws-profile jambit --stage dev
Environment variables: SLS_DEBUG=* # activate debug output to get more details
Breakpoint im Code setzen und einen Request gegen das lokale Gateway feuern! Happy Debugging!

Weiterführende Aspekte

---

Autor: Robert Gruner / Software Engineer / Standort Leipzig

Local debugging of AWS lambdas? Serverless-offline to the rescue

Wir verwenden Cookies, um unsere Webseite für Sie zu optimieren. Mit dem Besuch unserer Webseite erklären Sie sich damit einverstanden. // Our website is using cookies to improve your experience. By continuing to browse the site, you are agreeing to our use of cookies.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. // For more information, please refer to our privacy policy.