Sharing Our Passion For Technology
& continuous learning
  • Event Sourcing

    Software development teams are responsible for building a wide variety of software to solve a wide variety of problems. Many of these software development projects implement business flows that have defined activities completed by specific parties. An architecture that implements these flows by mixing validation logic with record updates becomes...
  • Deploying Azure Function with Azure Active Directory Authentication (Easy Auth) Interaction

    Prerequisites This article requires a few things in order to get started: You have an ARM template params file here, we’ll call ours: deploy-parameters.json You have the core Azure template here, we’ll call ours: arm-template.json You have an api that is protected by Azure Active Directory Authentication (Easy Auth) You...
  • Node Reference - Conclusion

    Prerequisites This article builds on the prior article: The “Join” Problem. Conclusion In this series, we walked the reader through the considerations of building a production-ready microservice. More important than the tools we used (e.x. NodeJS, AWS) were the questions we asked. You may choose different tools and libraries for...
  • Node Reference - Change Events

    The “Join” Problem Modern applications no longer exist in a silo. They need to integrate with other systems within the organization. In a microservice architecture, this is even more valid since very few business processes can be completed by involving only one service. Let us suppose that our product service...
  • Node Reference - Delete

    Prerequisites This article builds on the prior article: Node Reference - History. Deleting Humans make mistakes. Your users are humans, and sometimes they will create a product by mistake and will need to delete it. For that scenario, we need a DELETE REST endpoint. There are two main classes of...
  • Node Reference - History

    Prerequisites This article builds on the prior article: Patch. Tracking History The way our service is currently built, all modifications (PATCH requests) happen in-place to records in DynamoDB. It is common in most production applications that someone will want to know the history of a record. A business user may...
  • Node Reference - Patch Product

    Prerequisites This article builds on the prior article: Node Reference - Get Product by Id. Supporting Updates Sooner or later, there will be a need to modify a product. Except in the case of immutable data stores, rarely are there entities that are truely “insert only”. In order to support...
  • Node Reference - Get Product by Id

    Prerequisites This article builds on the prior article: Node Reference - Listing. Add Get By Id At this point, we have only one way to get Products. We have to list all products and page through them to find the one we want. However, a lot of the time, a...
  • Node Reference - List Products

    Prerequisites This article builds on the prior article: Node Reference - Monitoring. Add listing Clients of our service will need a way to find products. For that, we need a product listing service. DynamoDB provides an operation for listing the contents of a table called a ‘scan’. (As a table...
  • Node Reference - CloudWatch

    Monitoring How do we answer the question: “Is our application performing correctly?” With just one application server we could remotely log into the server, look at CPU and memory load, run grep on the log files and then determine that everything is fine. This approach is manual intensive and obviously...
  • Node Reference - Put Product

    Prerequisites This article builds on the prior article: Node Reference - DynamoDB. Create put test/endpoint First, lets write a spec for our POST /products endpoint. Create a file called products/createProduct.spec.js with the following contents: const proxyquire = require('proxyquire'); describe('products', function () { describe('createProduct', function () { beforeEach(function () { process.env.PRODUCTS_TABLE_NAME...
  • Node Reference - DynamoDB

    Prerequisites This article builds on the prior article: Node Reference - Authentication. Add DynamoDB Before we can start building out our product endpoints, we need a place to store them. For that, we are turning to DynamoDB. Tables are the main component, not a “database”, so we can create just...
  • Node Reference - Authentication

    Prerequisites This article builds on the prior article: Node Reference - Cognito. Adding authentication In order to leverage our new identity provider, we need to add a middleware into our Koa pipeline. This middleware will reject requests that do not contain valid tokens. We can accomplish this by using two...
  • Node Reference - Cognito Setup

    Cognito setup In order to secure our application we are going to leverage OpenID Connect. Each request to our application from either another service or a logged in human user will contain a JSON Web Token (a.k.a. JWT) as a “Bearer” token in the Authorization header. This token not only...
  • Node Reference - HTTPS

    Prerequisites This article builds on the prior article: Node Reference - HTTPS/DNS. HTTPS and DNS In this post we are going to add a friendly DNS address that can be used to invoke our service so that clients do not have to use the auto-generated AWS load balancer name. We...
  • Node Reference - Application Load Balancer

    Prerequisites This article builds on the prior article about AWS Fargate. Add an Application Load Balancer For a long time, AWS has supported an HTTP(S) load balancing service in the form of an Elastic Load Balancer (now called a “Classic load balancer”). When paired with ECS, a classic load balancer...
  • Node Reference - Fargate

    Prerequisites This article builds on the prior article about AWS CodePipeline. Fargate History With an automated build process underway, it is now time to switch focus to the application’s runtime environments. We will be creating two environments: Development (aka. Dev) and Production (aka. Prod). Consider wether your project needs more...
  • Node Reference - Code Pipeline

    Prerequisites This article builds on the prior article: CloudFormation. Continuous building via AWS CodePipeline Not only are we going to manage our application environments with Cloudformation but we are also going to manage our deployment pipeline in the same manner. CodePipeline (Not to be confused with CodeDeploy) is the Continuous...
  • Node Reference - Cloudformation

    Prerequisites This article builds on the prior article: Dockertize. Introduction In the articles leading up to this one, we’ve created a docker image of a minimal tested NodeJS microservice. Our next step is to deploy the docker image into a container running in the AWS cloud platform. AWS CloudFormation allows...
  • Node Reference - Introduction

    Summary Most AWS microservice articles only show you the tip of the iceberg. We certainly can’t blame the article authors. For starters, the SAM squirrel mascot is so darned cute! But more importantly, we all know that standing up a production web service involves far more considerations than you could...