Running database migrations on deployment for Fargate containers

One of the tenets of modern framework-based web development is the management of your database state in code. Rather like infrastructure-as-code, it means there is an immutable history of the state of the application database at any point in time, which can be re-applied or rolled back as necessary. In addition, the desired state of the database and the application are tied together at any point in time to reduce the chances of divergence. ...

September 14, 2020 · Resolver Engineering

Finally forcing computers to think like humans

On 17th June 2020 I attended my first AWS summit. New to the industry, it was one of the first tech conferences I’d been to (other than the Women in Development conference earlier this year, back in that beautiful time when people were allowed to meet in groups…) and was certainly the first virtual online conference I’ve been to. I didn’t quite know what to expect, but it ended up being an intense, engaging half-day where I learnt a LOT. ...

August 31, 2020 · Elise Aston

Implementing HTTP Basic Auth for Fargate using Lambda@Edge and CloudFront

Ask any developer the quickest and hackiest way of locking unauthorised users out of your website and they will probably mention HTTP Basic Auth. As an extremely simple method of authentication that is built-in to the HTTP protocol standard and supported by every web browser, it’s the universal, go-to method of setting up a username and password authentication prompt with minimal work. Simplicity and minimalism of course bring with them compromise, and most things you may associate with authentication systems cannot be achieved easily or at all with HTTP Basic Auth, so you would probably not consider it your primary authentication method for anything but the most basic of needs. But for our needs, it’s the perfect method of stopping casual snooping and accidental usage of a non-live system. ...

August 17, 2020 · Resolver Engineering

If you only learn 5 Docker Compose commands, it should be these

In my previous blog post, I gave a brief introduction to containerisation, and the differences between Docker and Docker Compose. Here I’m going to share the Docker Compose commands that I use on a daily basis and have found the most essential. In my opinion, if you only learn 5 Docker Compose commands, they should be: docker-compose up Run this command to launch your project. The up command builds or creates all the services in the docker-compose file and starts a container for each of them. ...

August 3, 2020 · Elise Aston

A beginner’s guide to Docker and containerisation

I joined Resolver in February 2020 and was put into the Accord team, working on a brand new project (they had literally typed the words ‘rails new’ the week before I joined). This meant I would be involved from the ground up, that I would see the app grow and develop from the very start, and that I wouldn’t need to get to grapple with years of legacy code. As we had decided to build the app with Docker, which I haven’t used before, it also meant I was about to get to grips with it very quickly! This whale of a task initially felt quite daunting, but thanks to the gloriously comprehensive Docker documentation, Linux Academy courses about Orchestration, Containers and Docker, Rob Isenberg’s invaluable Docker for Rails Developers book, and, of course, a lot of Googling, I’m now happy to share my understanding of containers and Docker in my next few blog posts. I hope they can help make the topic a little less confusing! ...

July 20, 2020 · Elise Aston

AWS GameDay 2020

On 1st July, a team of Resolver developers made up of both Accord and Consumer members joined forces to compete in the AWS GameDay. The premise of the day is that it is our induction at a brand new start-up ‘Unicorn Rentals’, a fictitious company who dominate the Legendary Animal Rental Market (LARM) by providing temporary use of a unicorn to ever-demanding children. The developers at Unicorn Rentals have recently moved on to other ventures, leaving a lot of legacy services behind them. It was our job to try to move away from these to ensure faster technology and therefore more unicorns! The strategy throughout the day to earn as many points as possible (and therefore beat the other teams) was to keep our router running, to launch microservices so that other teams can use them and route to as many other teams microservices (especially fast ones!) as possible. Points were lost at any moment for sending messages to our own microservices and for our router not working. ...

July 9, 2020 · Poppy Rodgers

Granting time-limited access to assets in S3 using CloudFront

There was a time when asset storage was one of the problems facing web app developers - maybe you stored assets on the web server (easy if you only have one, more difficult if you need to sync them up between multiple servers), or maybe you had a shared disk mounted using NFS. In any case, the easier part was granting access to these assets to the right users. Given that assets are normally stored outside the web server’s root directory, it’s easy to write a script that checks user access then serves the asset. ...

July 6, 2020 · Resolver Engineering

Making a Maker: a day in the life of a coding bootcamp student

A day at Makers was a lot like going to a theme park with your pals: The eager excitement of waking up and getting ready. Meeting your friends for breakfast, fueling up on coffee, and making all the best-laid plans for what is about to come. Enjoying all the sights and sounds of wonderment and magic. Going for lunch and exploring the area for delicious food. Tackling the big rollercoasters, and experiencing all the highs and lows. Leaving exhausted, and desperate to come back. ...

June 22, 2020 · Alex Clifford

How to redirect an apex domain to www using CloudFront and S3

A common issue for developers and operations staff when it comes to domain names is whether to choose the apex domain (e.g. example.com) or the www subdomain (e.g. www.example.com) as their primary domain, and then how to redirect one to the other. Choosing to use www over the apex At Resolver, we use AWS for the majority of our infrastructure, and we generally have staging and production environments for each product or service we build. We use subdomains as namespaces to separate the environments whilst providing similar URLs for each. ...

June 8, 2020 · Resolver Engineering

Hiring during a pandemic

Remote working isn’t a new thing for developers; at Resolver we were already doing it regularly. Our meetings were remote-friendly, if not fully remote, and Slack would keep us all constantly connected. So when we went into lockdown in March, the transition to home-working was perhaps easier for our team than for others. But when it came to hiring new developers, removing any face-to-face contact posed some new challenges. Networking events The hiring process would often begin by speaking at events such as LRUG, giving a summary of Resolver and what we’re striving for. That gave us an opportunity to meet any interested candidates straight away and to make those important first impressions. Under lockdown, we’ve had to approximate that by posting to mailing lists, posting to LinkedIn and using recruiters. We’ve seen some good results doing that, and the market for Ruby developers still seems to be strong. But it can also be easy for the message to get lost in the noise. Emphasising what sets Resolver apart as a great place for developers has been more important than ever. ...

May 22, 2020 · Adam Colvin