Engineering

Managing dependencies between apps when using AWS ECS Service Connect

Reproduce the scenario with my CDK example: https://github.com/foyst/ecs-service-connect-dependencies I’ve been working on a project recently that made use of AWS Elastic Container Service (ECS) Service Connect. Since I last used ECS they’ve introduced capabilities around service discovery which aim to solve challenges orchestrating services in distributed and fluid environments. ECS Service Connect is different to Service Discovery, in that it still uses AWS Cloud Map under the hood as a service catalogue, but uses API based discovery rather than DNS. This means it’s quicker for it to detect outages to applications and update service entries as necessary. It’s kinda like...

Continue reading...

Challenges working with and tuning AWS Amplify and AppSync with Flutter

Whilst building my tutorial in Cross-platform mobile app prototyping with Flutter and AWS Amplify, I encountered a few issues whilst deploying an API capable of storing user details. My requirements were fairly basic – store a few simple details about a user (name, location and favourite programming language), and query this information based on the logged in user of my app. In Amplify, you can very quickly build and deploy and API with a single command: The following may feel like I’m taking you on a wild goose chase, but I figure if I shared the journey and pain encountered along...

Continue reading...

Cross-platform mobile app prototyping with Flutter and AWS Amplify

I’m going to show you how you can use Flutter and AWS Amplify to quickly go from nothing to a working cross-platform mobile application with authentication and backend infrastructure. What would usually take a small dev team a week or so to setup can be achieved in a fraction of the time using this toolkit. If you follow along with this tutorial, it should take you no more than an hour… well… it took me several hours fighting with various issues, but hopefully I’ve documented them well enough so you shouldn’t hit them! Here’s the finished product. If you want...

Continue reading...

Building an E-Ink Planner

Update – 06/12/2022: I’ve included a section at the top to track “Daily Habits”. I find this useful to keep on top of those daily tasks that aim to improve my skills. I use Todoist for this list as well (with recurring tasks), but managed using a separate project and an “Overdue” filter to only show the ones not completed for that day. Intro I wanted a high-tech alternative to the age old post-it note to do list, but I wanted something that’s energy efficient, clear and easy on the eyes. I also wanted something that was standalone from my monitors as...

Continue reading...

From Spring Boot Microservices to Lambda functions – a journey

You may be one of many organisations (or an engineer in one) that operates Java microservices in the cloud with a desire to move towards a serverless architecture, but are unable to justify the steep migration path (e.g. decomposing your services into functions, rewriting in a more suitable language etc.) from those microservices to the likes of AWS Lambda. But fear not! Because with the help of spring-cloud-function you can repurpose your existing microservices into serverless functions in a gradual and controlled manner, with minimal effort or interruption of service. In this article I’ll explain how you can achieve this...

Continue reading...

My expedition from AWS to GCP (with Terraform)

Follow along with my GitHub repo for this blog: https://github.com/foyst/gcp-terraform-quickstart/ TL;DR – Here’s the headline differences that might be useful for those adopting GCP from an AWS background: Difference #1 In AWS, projects or systems are separated using AWS Accounts, where as GCP has the built-in concept of “Projects”. Difference #2 – The GCP Console is always at global level – no need to switch between regions. Difference #3 – auto_create_subnetworks = false, otherwise you have a subnet created for every availability zone by default. Difference #4 – You have to enable services before you can use them. Difference #5...

Continue reading...

Performance Tuning Next.js

TL;DR: Next.js 9.3 introduces getStaticPaths, which allows you to generate a data-driven list of pages to render at build time, potentially allowing you to bypass server-side rendering for some use cases. You can now also use the fallback property to dynamically build pages on request, and serve the generated html instead. On a recent project we built a website for a client using a combination of Next.js and Contentful headless CMS. The goal of the website was to offer a responsive experience across all devices whilst keeping load times to a minimum and supporting SEO. I rather like Next.js –...

Continue reading...