My Cost Effective Run Sync

I switch between Nike and Strava to track my runs. When I hit a rut and slog through my running routine, Nike’s guided runs are better. I like NRC coaching to get me back on track. But the biggest problem in this workflow is, I lose my miles in Strava. All the solutions available to sync up these two applications has been really a price related affair.

This blog post is to explain how handled this workflow and keep my cost at $1.60 between two cloud providers every month.

Here is a high level application system diagram for this flow. System uses two public cloud providers in the project. Keep in mind the cost factor as well. Keep the cost low and use as many free resources as possible. I need to run these services only when I need to miss the runs between the two running applications

The application uses AWS for the Strava runs parsem sync and Azure for Nike Runs parse.

The stack runs around 20 microservices and uses Debezium to sync the CDC into the Cassandra store. To save costs in the ingress/egress world, I use the CQRS pattern here and sync up data/CDC events through Debezium.

I sync up with Nike for getting their JSON data output to land that into a Azure landing zone. Here is the code for the Azure CSP details. The services am using for almost free from the Azure service. Here is quick rundown

Here is the basic rundown of the sample Terraform code for Appservice,

resource "azurerm_service_plan" "sathish-appserviceplan" {
  name                = "sathish-appserviceplan"
  location            = azurerm_resource_group.rg_resource_defn.location
  resource_group_name = azurerm_resource_group.rg_resource_defn.name
  os_type             = var.appservice-ostype
  sku_name            = var.appservice-sku

}


resource "azurerm_linux_web_app" "sathishconfigserverwebapp" {
  name                = "sathishconfigserverwebapp"
  resource_group_name = azurerm_resource_group.rg_resource_defn.name
  location            = azurerm_service_plan.sathish-appserviceplan.location
  service_plan_id     = azurerm_service_plan.sathish-appserviceplan.id
  logs {
    application_logs {
      file_system_level = "Verbose"
    }
  }
  site_config {
    application_stack {
      docker_image     = var.dockerimagewithurl
      docker_image_tag = var.dockerimagetag
    }
    always_on = false
  }
}

If you want to take look at the GitHub location for the Terraform details.

Config server details are for all the applications that we are discussing above.

spring:
  application:
    name: sathish-projects-git-config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/xx/xx-xx
          search-paths:
            - 'resumes*'
            - 'wi-traffic*'
            - 'running/*'
server:
  port: 8888
# http://localhost:8888/wi-traffic-alerts-url/dev/main dev here is the profile and main in the url
# branch or the main branch name
encrypt:
  key: xxx

Config server information in the github. All data related to config server had an encryption logic to mask all the data.

More to come in next post