Cloud: The Game. How we used AWS Amplify to motivate our colleagues

-

Why?

At Luminis we are focusing on becoming Cloud proficient and we are using any means necessary. We share our knowledge, follow courses and get certifications. However, we wanted to also take the road less traveled and think of other ways we might motivate this journey for our colleagues.

Our Idea: We will use the Cloud to host a Cloud Game that will motivate our colleagues to Cloud! Yes, I used Cloud as a verb…

Since we are also becoming more proficient with AWS Amplify at Luminis, we decided to use it to quickly get started.

Goals

The main goal is to motivate our colleagues to do more with the Cloud. We decided that they should be able to do the following:

  • Log in using our existing Azure Active Directory Luminis accounts
  • Be able to add “achievements” related to the Cloud, such as reading a blog, giving a presentation or get a certificate.
  • They will get points based on these achievements
  • They will get badges that based on points and combinations of things they achieve

These were the main requirements for the first version of the application. Furthermore it was important that we can go live quickly and that we can add new features later on. This is where Amplify comes in.

Under the hood

Our entire setup looks like this:

We have created an AWS Cognito user pool, API Gateway and Lambda using the Amplify CLI. Our Angular frontend uses the AWS SDK to easily authenticate our users and to communicate with our REST endpoints hosted on API Gateway.

Since all of our Luminis colleagues have an account on Azure Active Directory, we want them to be able to use these accounts to log in. We have created an Open ID Connect provider in the Cognito console and link this with our Azure Active Directory. If you want to know how to do this, see this link.

After this is set, we can just call “Auth.federatedSignin({provider:”Office”})” in our frontend where “office” in this case is the name of our custom OIDC identity provider to sign in. We will automatically get redirected to the Microsoft office page where you can sign in to your account.

Another aspect you might notice is that we use RDS instead of DynamoDB, which comes out of the box with Amplify. Why did we do this?

  • We wanted to try out Aurora Serverless
  • We wanted to use SQL so that we can simply write our SQL queries per badge and have these queries run at certain times to check if players deserve new badges
  • While we like DynamoDB as a database and for its pricing, we are not that good yet with the query language and we wanted to quickly be able to add queries for badges

On RDS and Aurora Serverless

Because RDS is not a standard part of Amplify we had some work to do in order to get this working. We first created an Aurora Serverless cluster in the RDS console. Then we gave Lambda RDS full access via policies in its role so that it can communicate with it. Finally in the Lambda, we used the RDSDataService available in the “aws-sdk” package to be able to communicate with the database.

While we are happy that we got this working, we are not quite happy with the results yet. This is because:

  • It turns out that Aurora Serverless on RDS is quite expensive to keep running. We were already paying a few euros on our first day without having any users. To give a comparison, another project I run with DynamoDB cost me less than 1 euro for an entire year when in “On demand” pricing mode
  • If we turned the scaling of the RDS to 0, which is one of the benefits of Serverless, then we have a very long cold start.

We are still looking into how we can fix this problem, however since it is an internal application within Luminis it is not that bad if some requests fail once in a while.

Hosting and continuous deployment

We used GitLab to host our repository and we could easily use the Amplify console to build and deploy our application on every commit to a certain branch. We then registered the domain cloudthegame.com on Route53 and with a few clicks we were able to link our Amplify deployment to the domain and even HTTPS was set up for us!

Results

The end result looks like this:

 

As mentioned previously, we used Route53 to register a domain. You can visit the app on https://www.cloudthegame.com. You won’t be able to log in, but you can at least see the design.

We used a retro gaming theme and we try to add the word “Cloud” as much as possible. It is currently only available in Dutch, but the screenshot above shows that I have earned 2 badges so far! We already have around 90 users with almost all of them having at least 1 badge!

We have big plans for Cloud: The Game, however we are glad we were able to use Amplify to quickly get started and focus on what matters.