Serverless webapplicatie in de praktijk

Noud van Kruysbergen
0

Inhoudsopgave

Met de term ‘serverless’ vragen cloudaanbieders de aandacht van webontwikkelaars. Ze beloven dat als jij de code schrijft, dat zij zich dan om de rest zullen bekommeren. Geen eigen server nodig, en geen serverbeheer. Kan dat werken of is dat een loze belofte? Verslag van een eigen ervaring.

Serverless moet de toekomst van de IT-structuur gaan worden. Dat klinkt voor iemand die nog weet wat het betekent dat er afgeschreven schijven in servers moeten worden omgewisseld en dat die loodzware machines naar een tussen­verdieping moeten worden gesjouwd een beetje onwerkelijk. Webapplicaties draaien op een server, op veel lawaai makende apparaten die in racks staan en hete lucht produceren. De term ‘serverless’ moet een uitvinding van een pr-afdeling zijn – ook voornamelijk hete lucht dus. Maar omdat zelfs grote bedrijven inmiddels tot de klanten behoren, moet er toch iets in dat idee zitten. Het wordt tijd om de scepsis enigszins te laten varen en de eerste regels code eens zonder server tot leven te brengen.

serverless webapplicatie ontwikkelen cloud Git

In de webinterface laat Zeit Now alle gepubliceerde webapplicaties zien. Het meeste werk gebeurt echter op de commandline.

Aanmelden zonder wachtwoord

Een van de grootste aanbieders noemt zichzelf Zeit en zijn serverless-platform Zeit Now. Die kun je vinden op zeit.co. Het eerste positieve resultaat: het kleinste pakket is zelfs gratis. Je mag daarbij 100 GB aan netwerkverkeer per maand produceren, 100 GB code uploaden en logs van 1000 regels lang veroorzaken. Voor een kleine applicatie is dat ruim meer dan genoeg. Achter de link ‘Join Free’ in de rechter bovenhoek zit een extreem kort registratieformulier. De dienst vraagt alleen naar een e-mailadres. Een wachtwoord is er niet, voor het aanmelden gebruik je in plaats daarvan weer je e-mailadres, waarna je dat verifieert via een bevestigingsmail die je krijgt. Je kunt echter ook een GitHub-account en GitHubs aanmeldingsprocedure met tweefactor­authenticatie gebruiken.

Zeit Now wordt aangestuurd met het commandlineprogramma ‘now’. Er zijn meerdere manieren om dat te installeren. Als je het JavaScript-pakketmanagement npm geïnstalleerd hebt, hoef je alleen het commando npm install -g now uit te voeren. Op de downloadpagina zeit.co/download zijn er echter ook alternatieven zonder npm. Voor macOS en Windows kun je een kleine desktopclient downloaden die het commandlineprogramma meteen mee installeert.

Eerste project

Het starten is verbazingwekkend simpel: now login. De commandline vraagt naar het mailadres waar je je eerder mee geregistreerd hebt. Zeit Now verstuurt dan een e-mail waarin je weer een link moet aanklikken. Vervolgens kun je aan de slag. In de map ‘nowexperiment’ ontstaat een kleine hallo-wereld-HTML-pagina index.htm. Met de commandline navigeer je naar de map en voer je het commando voor het publiceren uit: now. Een paar seconden later verschijnt er een succesmelding en een url: https://nowexperiment-jsbocvu2y.now.sh. Die werd gegenereerd uit de mapnaam en een random tekenreeks.

Als je iets aan de code verandert, moet je now opnieuw uitvoeren. Dan krijg je een nieuwe url met een nieuwe random tekenreeks. Dat werkt bij Zeit Now net als bij GitHub: de oude toestanden blijven bewaard en worden niet overschreven als je nieuwe code publiceert. Met now ls krijg je een lijst van de gepubliceerde applicaties, en now ls nowexperiment laat alle versies van je webpagina zien, je url’s en hoeveel minuten er sinds het publiceren verstreken zijn. Met now rm gevolgd door de url verwijder je een versie.

Voor een productief gebruik is het echter niet praktisch bij elke verandering een nieuw adres te moeten gebruiken. Zeit Now heeft daar een oplossing voor in de aanbieding: je mag een subdomein bedenken en dat eraan toekennen. Met een enkel commando krijgt een gepubliceerde applicatie een statische naam:

now alias https://nowexperiment -jsbocvu2y.now.sh ct-testpagina

Je applicatie is dan te bereiken via https://ct-testpagina.now.sh. Een wildcard-certificaat voor now.sh beveiligt het HTTPS-verkeer. Serverless is dan opeens leuk, en de werkwijze is aantrekkelijk. Je programmeert de veranderingen, publiceert ze met now, test de code met de random url en stelt dan een alias in voor het productieve adres. Als er later problemen zijn, zet je de alias terug op een oudere versie. Die aanpassing gebeurt zonder uitvaltijd omdat alle versies gewoon blijven bestaan.

Het subdomein van now.sh is nog wat onbevredigend. Maar als je even in de docu­mentatie kijkt, blijkt dat je rechtstreeks via de commandline een domein kunt kopen door bij now alias een vrije domeinnaam mee te geven. Op de commandline wordt dan een prijs aangegeven (9 dollar per jaar voor een .nl adres). Als je je creditkaart­gegevens bij de webinterface hebt achtergelaten, kun je meteen je slag slaan.

Als je bij een andere hoster al een eigen domein hebt, is daar ook een passende oplossing voor: in de webinterface van die hoster ga je naar het DNS-beheer en maak je daar een subdomein aan, bijvoorbeeld test.example.org. Die krijgt een item van het type CNAME met de waarde alias.zeit.co. Met now stel je dan een alias naar dat subdomein in:

now alias https://nowexperiment -jsbocvu2y.now.sh test.example.org

Het programma komt dan wel met een foutmelding en wil een bevestiging. Er volgt een tekenreeks die je moet kopiëren en als TXT-item bij je DNS-beheer moet aanmaken. Daarmee weet Zeit zeker dat het domein ook bij die gebruiker hoort. Dat is op zich snel gedaan. Met het opnieuw uitvoeren van now alias krijg je dan een succesmelding. De webpagina geeft dan een antwoord – en wel via HTTPS. Zeit Now heeft op de achtergrond snel een certificaat bij Let’s Encrypt geregeld en toegepast. Simpeler kan het niet!

Doorlezen is gratis, maar eerst even dit:

Dit artikel is met grote zorg samengesteld door de redactie van c’t magazine – het meest toonaangevende computertijdschrift van Nederland en België. Met zeer uitgebreide tests en praktische workshops biedt c’t de diepgang die je nergens online vindt.

Bekijk de abonnementen   Lees eerst verder

Lekker programmeren

Het vertonen van statische HTML-pagina’s is op die manier echt geen probleem, maar hoe gaat dat met dynamische content? Zeit Now belooft PHP, Python, Go en serverside JavaScript uit te voeren en Markdown-­documenten te renderen. Daarvoor moet je volgens de documentatie een configuratie­bestand aanmaken met de naam now.json. Dat bestand moet in de map met de code staan. Om dat te testen beginnen we met Zeit PHP-bestanden te laten renderen. Daarvoor krijgt het configuratiebestand een element voor de zogeheten ‘build’ @now/php, waar je de extensie .php aan koppelt:

{
“version”: 2,
“builds”: [
{“src”: “*.php”,”use”: “@now/php”}
]
}

Volgens hetzelfde patroon werkt dat bijvoorbeeld ook met @now/go en @now/python. Het volgende kleine script zeit.php moet de datum en de tijd leveren. Dat script publiceer je weer met now.

<?php
echo date(“d.m.Y H:i:s”);
?>

Er zit bij Zeit Now daar nog wel een kleine valkuil in. Zodra je een build geactiveerd hebt, verschijnt index.htm niet meer als startpagina, maar krijg je een overzichts­pagina te zien met daarop alle bestanden. Dat probleem is snel verholpen, want als je ook verder nog HTML-pagina’s wilt leveren, is daar alleen een andere build voor statische pagina’s voor nodig:

“builds”: [
{“src”: “*.php”,”use”: “@now/php”},
{“src”: “*.htm”,”use”: “@now/static”}
]

Embedden

Het publiceren van webapplicaties met een simpel now is fascinerend. Maar één component ontbreekt nog: de code staat tot nu toe alleen op de lokale schijf, zonder Git-repository. Het zou ook mooi zijn als je met een git push de ontwikkelstand van de code zou kunnen opslaan en de applicatie tegelijkertijd uitgerold wordt. Gelukkig is daar wat van GitHub voor en is dat ook weer verrassend snel ingericht: in de web­interface van Zeit activeer je bij de accountinstellingen (verborgen achter het menu rechtsboven) de ‘GitHub Integration’. In de GitHub-­repository met code zet je een bestand met de naam now.json. Als de nieuwste versie meteen onder een domeinnaam bereikbaar moet zijn, krijgt dat json-bestand nog een extra regel voor de alias:

“alias”: [“demo.example.org”],

Als je wat verandert aan de code, die vervolgens commit en pusht, dan staat de aanpassing al online. Mooier kunnen we het niet maken.

Toch zijn er grenzen aan deze werkwijze: Zeit Now biedt geen database en de documentatie, die tot nu toe op elke vraag een antwoord had, verwijst in dit geval naar een andere aanbieder. Je moet dan een database bij een clouddienstverlener huren en je Zeit-applicatie daarmee laten communiceren.

Inkijkje

Om achter de schermen te kijken, werd een handige achterdeur ingebouwd. Als je naar een adres gaat in de vorm van <url-van-de-pagina>/_logs in de browser, dan verschijnen daar de logitems – als je op dat moment ingelogd bent bij Zeit Now tenminste. Vreemden worden naar de inlogpagina omgeleid.

In de logbestanden zie je ook waar de webpagina gepubliceerd werd. Standaard is dat altijd in de buurt van de ontwikkelaar, maar bij een test kwamen de pagina’s in Brussel terecht. Als je klanten in de VS wilt bedienen, dan kun je aan now de parameter –region SFO (voor San Fransisco) hangen. Alle beschikbare regio’s kun je zien bij
bru.zeit.co.

Toepassingsgebied

Deze eerste kennismaking was zeker leerzaam en veelbelovend. Serverless betekent namelijk niet dat alle servers uit de wereld zullen verdwijnen. Zo lang je aan het ontwikkelen bent, hoef je je echter geen zorgen te maken om een eigen server.

Het idee is niet alleen aantrekkelijk voor testsystemen en kleine experimenten. Een mogelijk project zou bijvoorbeeld een Telegram-bot kunnen zijn die je daarvoor thuis op een Raspberry Pi had draaien die aangesloten was op je breedbandaansluiting. Serverless is dan een echt alternatief zonder stroomkosten, beheer en kapotte sd-kaarten.

Je hoeft niet per se met Zeit Now te werken, dat is zeker niet het enige serverless-product. Maar wel een met een zeer korte inwerktijd. Als je graag zelf beslist bij welke cloudaanbieder de dienst moet draaien, dan kun je eens bij serverless.com kijken. De daar aangeboden opensource commandlinetool kan overweg met Amazon AWS, Microsoft Azure en Google Cloud. Daar hoef je verder alleen maar een toegangs­sleutel voor de betreffende dienst voor toe te voegen.

Serverless is daarbij ook voor open­source webdiensten interessant. De ontwikkelaars koppelen hun GitHub-project dan aan een serverless-aanbieder en kunnen dan altijd een draaiende en actuele versie van hun software presenteren. Zonder extra stappen wordt die dan bij elke push bijgewerkt.

(Jan Mahn, c’t magazine)

Lees uitgebreide achtergrondinfo en reviews in c't nov/2019

Deel dit artikel

Lees ook

Beveiligingscamera installeren – Ezviz W2D plus C3A

Ezviz is de consumentenlijn van Hikvision en brengt dan ook beveiligingsproducten op de markt die eenvoudig te installeren zijn. Bij de Ezviz C3A Duo ...

Malware bekijken zonder risico, via je browser

Met de online sandbox any.run kun je malware bekijken zonder risico, via je browser. Vaak krijg je daar veel informatie mee boven water – en het is no...

Interessant voor jou

0 Praat mee

avatar
  Abonneer  
Laat het mij weten wanneer er