Running Serverless Service as Serverful

The most popular use case in current IT architecture is moving from Serverful to Serverless design. There are cases where we might need to design a service in a Serverful manner or move to Serverful as part of operational cost. In this article, we will be showing how to run Kumologica flow as a docker container. Usually, the applications built on Kumologica are focussed on serverless computing like AWS Lambda, Azure function, or Google function but here we will be building the service very similar to a NodeJS express app running inside a container. 

The Plan

We will be building a simple hello world API service using a low code integration tooling and wrapping it as a docker image. We will then run the docker container using the image in our local machine.  Then test the API using an external client.

Prerequisites

To start the development we need to have the following utilities and access ready.

  1. NodeJS installed
  2. Kumologica Designer
  3. Docker installed

Implementation

Building the Service

First, let's start the development of Hello World service by opening the designer. To open the designer use the following command kl open.

Once the designer is opened, Drag and drop an EvenListener node to the canvas. Click open the configuration and provide the below details.

Plain Text
 
Provider : NodeJS
Verb : GET
Path : /hello
Display Name : [GET] /hello

EvenListener

Now drag and drop a logger node from pallet to canvas and wire it after the EventListener node.

Plain Text
 
Display name : Log_Entry
level : INFO
Message : Inside the service
Log Format : String

Logger

Drag and drop the EventListenerEnd node to the canvas wire it to the Logger node and provide the following configuration.

Plain Text
 
Display Name : Success
Payload : {"status" : "HelloWorld"}
ContentType : application/json


EvenListenerEnd

The flow is now completed. Let's dockerize it.

Dockerizing the Flow

To dockerize the flow open the project folder and place the following Docker file on the root project folder (same level as package.json).

Plain Text
 
FROM node:16-alpine 
WORKDIR /app 
COPY package*.json ./ 
RUN npm install 
ENV PATH /app/node_modules/.bin:$PATH 
COPY . . 
EXPOSE 1880
CMD ["node","index.js"] 


Note: The above Dockerfile is very basic and can be modified according to your needs.

Now we need to add another file that treats Kumologica flow to run as an NodeJS express app. 

Create an index.js file with the following Javascript content. Replace the "your-flow.json" with the name of the flow.json in your project folder.

JavaScript
 
const { NodeJsFlowBuilder } = require('@kumologica/runtime');
new NodeJsFlowBuilder('your-flow.json').listen();


Now let's test the flow locally by invoking the endpoint from Postman or any REST client of your choice.

curl http://localhost:1880/hello

You will be getting the following response:

JSON
 
{"status" : "HelloWorld"} 


As we are done with our local testing, Now we will build an image based on our Docker file.

To build the image, go to the root of the project folder and run the following command from a command line in Windows or a terminal in Mac.

Plain Text
 
docker build . -t hello-kl-docker-app


Now the Docker image is built. Let's check the image locally by running the following command.

Plain Text
 
docker images


Let's test the image running the image locally by executing the following command.

Plain Text
 
docker run -p 1880:1880 hello-kl-docker-app


Check the container by running the following command:

Plain Text
 
docker ps -a


You should now see the container name and ID listed. Now we are ready to push the image to any registry of your choice.

 

 

 

 

Top