Türchen #13: Weihnachts-Countdown mit Serverless und AWS Lambda


AWS Serverless

Serverless Application ist einer der Buzzwords der letzten Jahre. Dies ist auch kein Wunder, da hier der administrative Aufwand für Serverwartung entfällt. Die Security beschränkt sich somit auf die Applikation.

Nach dem wir uns bisher mit teilweise theoretischen Dingen beschäftigt haben, bieten wir Euch mal etwas Unterhaltsames an. Wir wollen gemeinsam eine Lambda-Funktion einrichten, welche uns die Tage bis Weihnachten ausrechnet.

Weihnachts-Countdown

Im Folgendem werden wir eine kleine Node.js Anwendung mithilfe von serverless installieren. Unsere Anwendung hängt hinter einem APIGateway und gibt uns, per curl https://API-URL/dev/ping das aktuelle Datum und die Tage bis Weihnachten zurück.

'use strict';

module.exports.endpoint = (event, context, callback) => {
    const date1 = new Date().getTime();
    const date2 = new Date("12/25/2019");
    const diffDays = parseInt((date2 - date1) / (1000 * 60 * 60 * 24));
    const response = {
    statusCode: 200,
    body: JSON.stringify({
      message: `Hallo die aktuelle Zeit ist ${new Date().toUTCString()}, es sind noch ${diffDays} Tage bis Weihnachten!`,
    }),
  };

  callback(null, response);
};

Vorausstetzungen

  • einen AWS Account
  • Access Keys
  • IAM Berechtigungen (PoweUser, IAMFullAccess)
  • Node.js

Einrichtung

Zurerst müssen wir, wenn Node.js installiert ist, noch serverless per npm installieren:

➜ npm install serverless -g

Nun installieren wir zunächst Lokal unsere Anwendung:

 serverless install -u https://gitlab.com/centrias-blog/weihnachts-countdown -n weihnachts-countdown
Serverless: Downloading and installing "weihnachts-countdown"...
Serverless: Successfully installed "weihnachts-countdown"

Dabei werden folgende Dateien und Verzeichnisse angelegt:

➜ tree                                                          
└── weihnachts-countdown
    ├── README.md
    ├── handler.js
    ├── package.json
    └── serverless.yml

Schön, jetzt haben wir schon mal einen Teil unserer Arbeit hinter uns, dann machen wir einen kleinen Trockentest:

➜ serverless invoke local --function currentTime
{
    "statusCode": 200,
    "body": "{\"message\":\"Hallo die aktuelle Zeit ist Thu, 12 Dec 2019 18:54:16 GMT, es sind noch 12 Tage bis Weihnachten!\"}"
}

Unsere Funktion scheint zu funktionieren, dann können wir diese auch deployen:

➜ serverless deploy

Dabei wird nun eine Ausgabe erzeugt, die Euch über den Verlauf der Installation informiert:

Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
........
Serverless: Stack create finished...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service serverless-simple-http-endpoint.zip file to S3 (5.55 KB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
..............................
Serverless: Stack update finished...
Service Information
service: serverless-simple-http-endpoint
stage: dev
region: us-east-1
stack: serverless-simple-http-endpoint-dev
resources: 11
api keys:
  None
endpoints:
GET - https://<API-URL>/dev/ping
functions:
  currentTime: serverless-simple-http-endpoint-dev-currentTime
layers:
  None
Serverless: Run the "serverless" command to setup monitoring, troubleshooting and testing.

Die Installation der Lambda-Funktion ist erfolgreich gewesen, nun können wir diese per curl https://API-URL/dev/ping testen

➜ curl https://weihnachts-countdown.centrias.me/ping/
{"message":"Hallo die aktuelle Zeit ist Thu, 12 Dec 2019 19:22:36 GMT, es sind noch 12 Tage bis Weihnachten!"}%

Es hat funktioniert, unsere Lambda-Funktion reagiert auf den API-Request und nennt uns die Tage bis Weihnachten.

Zurück zu den Blogbeiträgen

Trainings und Workshops

Vom Kurs für Einsteiger bis hin zu Experten-Workshops mit Tiefgang können wir Euch mit technischen Trainings unterstützen. Darüber hinaus bieten wir auch Workshops mit Fokus auf Cloud-Strategie oder für die Vertriebsmannschaft an.

Mehr...