Cloud: The Game. Hoe wij AWS Amplify gebruiken om collega’s te motiveren

-

Waarom?

Bij Luminis zijn we altijd op zoek naar manieren om nog beter te worden in alles wat met Cloud te maken heeft. We delen onze kennis, volgen cursussen en halen certificeringen. We wilden echter ook de minder bereisde wegen verkennen en andere manieren bedenken om collega’s te motiveren tijdens hun ontwikkeling op gebied van Cloud technologieën.

Het idee: we gebruiken de cloud om een cloud game te hosten om onze collega’s te motiveren te clouden (ja ik heb inderdaad van cloud een werkwoord gemaakt…)

Omdat we bij Luminis steeds bekwamer worden met AWS Amplify, hebben we besloten om dit te gebruiken om zo snel mogelijk aan de slag te kunnen.

Doelen

Het belangrijkste doel is om onze collega’s te motiveren om meer met de Cloud te doen. We besloten daarom dat de applicatie het volgende moest kunnen:

  • Inloggen met onze bestaande Azure Active Directory Luminis accounts
  • In staat zijn om achievements toe te voegen die een relatie hebben met de Cloud, zoals het lezen van een blog, het geven van een presentatie of het behalen van een certificaat
  • Deelnemers krijgen punten op basis van deze prestaties
  • Deelnemers krijgen badges die gebaseerd zijn op punten en combinaties van dingen die ze bereiken

Dit waren de belangrijkste vereisten voor de eerste versie van de applicatie. Verder was het belangrijk dat we snel live konden gaan en later nieuwe features konden toevoegen. Dit is waar AWS Amplify om de hoek komt kijken.

Onder de motorkap

Onze setup ziet er als volgt uit:

We hebben een AWS Cognito user pool, API Gateway en  Lambda gemaakt met behulp van de Amplify CLI. Onze Angular frontend gebruikt AWS SDK om gebruikers eenvoudig te authentiseren en om te communiceren met de REST endpoints die gehost worden op API Gateway.

Gezien al onze Luminis collega’s een account hebben op Azure Active Directory, willen we dat ze deze accounts gebruiken om in te loggen. We hebben een Open ID Connect provider in de Cognito console gemaakt en koppelen deze met Azure Active Directory. Bekijk deze link als je meer wilt weten over hoe je dit zelf kunt doen.

Nadat dit is ingesteld, kunnen we gewoon “Auth.federatedSignin({provider:”Office”})” invoeren in de frontend code waarbij “office” de naam is van de aangemaakte OIDC identity provider om mee in te loggen. We worden automatisch doorgestuurd naar de Microsoft Office-pagina waar gebruikers zich kunnen aanmelden bij hun account.

Een ander aspect dat je misschien al wel is opgevallen is dat we RDS gebruiken in plaats van DynamoDB, waar je wellicht eerder aan denkt in combinatie met Amplify. Waarom hebben we dit gedaan?

  • We wilden Aurora Serverless uitproberen
  • We wilden SQL gebruiken zodat we eenvoudig onze SQL queries per badge kunnen schrijven en deze queries op bepaalde tijden kunnen laten uitvoeren om te controleren of spelers nieuwe badges verdienen
  • Hoewel DynamoDB als database en vanwege de prijsstelling aantrekkelijk is, zijn we nog geen experts in de query language en we wilden graag snel queries voor badges kunnen toevoegen

Over RDS en Aurora Serverless

Omdat RDS geen standaard onderdeel is van Amplify, moest nog wat werk verzet worden om alles werkend te krijgen. We hebben eerst een Aurora Serverless cluster in de RDS console gemaakt. Vervolgens hebben we Lambda RDS volledige toegang gegeven via beleid in de rol, zodat het met Aurora Serverless kan communiceren. Ten slotte hebben we in de Lambda de RDSDataService gebruikt die beschikbaar is in het “aws-sdk” pakket om te communiceren met de database.

Hoewel we blij zijn dat we alles werkend hebben gekregen, zijn we nog niet helemaal tevreden met de resultaten. Dit komt doordat:

  • Aurora Serverless op RDS vrij duur blijkt te zijn. We betaalden op onze eerste dag zonder gebruikers al een paar euro. Om een vergelijking te geven, een ander project dat ik met DynamoDB draaide, kostte minder dan 1 euro voor een heel jaar in de ‘on demand’ prijsmodule
  • Als we de schaalvergroting van de RDS op 0 zetten, wat een van de voordelen is van Serverless dan hebben we een erg lange cold start

We zijn nog aan het onderzoeken hoe we dit probleem kunnen oplossen, maar aangezien het een interne applicatie binnen Luminis betreft is het niet zo erg als sommige verzoeken op dit moment af en toe mislukken.

Hosting en continuous deployment

We gebruikten GitLab om onze repository te hosten en we konden gemakkelijk de Amplify console gebruiken om onze applicatie te bouwen en te implementeren voor elke commit naar een bepaalde branch. We hebben het domein cloudthegame.com op Route53 geregistreerd en met een paar klikken konden we Amplify aan het domein linken, waarbij zelfs HTTPS voor ons werd opgezet.

Het Resultaat

Zoals eerder vermeld hebben we Route53 gebruikt om het domein te registreren. Je kunt onze app bezoeken op https://www.cloudthegame.com. Het is niet mogelijk om in te loggen, maar je kunt in ieder geval het ontwerp zien.

We hebben een retro gaming thema gekozen en proberen het woord Cloud zo veel mogelijk te gebruiken. De app is momenteel alleen beschikbaar in het Nederlands en zoals je op bovenstaand screenshot misschien wel kan zien heb ik al 2 badges verdiend! We hebben inmiddels zo’n 90 gebruikers die bijna allemaal minstens 1 badge hebben.

We hebben grootse plannen voor Cloud: The Game, maar we zijn blij dat we Amplify konden gebruiken om snel aan de slag te gaan en ons te concentreren op wat we echt belangrijk vinden.