Each Nuon app allows you to deploy to a single platform, by combining a sandbox with your application and infrastructure code. This document outlines the supported platforms, and how you can use a platform that is not currently supported by Nuon.

While Nuon has first class support for the following platforms, terraform components can be used to provision any custom resources in a customer’s cloud account.

AWS EKS

Nuon supports running your app via AWS EKS. You can create apps that provision a completely new network (VPC) and k8s cluster, or use an existing customer managed network or cluster (using app-inputs).

To use AWS EKS, configure your app with the following:

An aws-eks runner:

resource "nuon_app_runner" "main" {
  app_id = nuon_app.main.id

  runner_type = "aws-eks"
}

An aws-eks sandbox:

resource "nuon_app_sandbox" "main" {
  app_id            = nuon_app.main.id
  terraform_version = "v1.6.3"

  public_repo = {
    repo      = "nuonco/sandboxes"
    branch    = "main"
    directory = "aws-eks"
  }
}

We provide a supported aws-eks sandbox that creates a new VPC, as well as a byo-vpc sandbox. Both sandbox support customization using app inputs, to override values such as the cluster version and more.

Read more about this in sandboxes.

AWS ECS

Nuon supports running your app via AWS ECS. You can create apps that provision a completely new network (VPC) and ECS cluster, or use an existing customer managed network or cluster (using app-inputs).

To use AWS ECS, configure your app with the following:

An aws-ecs runner:

resource "nuon_app_runner" "main" {
  app_id = nuon_app.main.id

  runner_type = "aws-ecs"
}

An aws-eks sandbox:

resource "nuon_app_sandbox" "main" {
  app_id            = nuon_app.main.id
  terraform_version = "v1.6.3"

  public_repo = {
    repo      = "nuonco/sandboxes"
    branch    = "main"
    directory = "aws-ecs"
  }
}

AWS Serverless

Nuon supports running any app using AWS Lambda, by configuring your app using the AWS ECS section above and configuring all serverless resources using terraform.

You can configure any serverless infrastructure using terraform components, and can model your container images using either docker or external image components.

If you have a serverless use case, we would love to hear more. Please get in touch.

Azure AKS

We are currently building Azure AKS support with a handful of early customers.

If you have an Azure app, customers who are asking for Azure deployments or are trying to sell into the EU, please get in touch.

Custom Infrastructure as Code

You can provision custom IAC resources on any platform using a terraform component.

This is useful for configuring additional resources such as databases, storage buckets and other resources that your application requires.

To provision third party cloud providers, please refer to Supporting Custom Platforms.

Supporting Multiple Platforms

You can support deploying your product to multiple platforms, by creating different apps. Each app can declare it’s own sandbox, inputs and runner.

Using our terraform provider, you can easily share components between different apps and create many different deployment varieties for your product.

resource "nuon_app" "aws-eks" {
  name = "aws-eks"
}

resource "nuon_app" "aws-ecs" {
  name = "aws-ecs"
}

resource "nuon_app" "aws-eks-byo-vpc" {
  name = "aws-eks-byo-vpc"
}

Supporting Custom Platforms

If you would like to support third party cloud providers, that Nuon does not natively support, you can use app inputs and terraform components. This is useful for managing things such as third party databases, AI tools, or even CDN providers alongside your application.

For example, if you would like to provision additional resources using a provider such as the Cloudflare Terraform Provider,

First, define an app input to require a customer api token:

resource "nuon_app_input" "main" {
  app_id = nuon_app.main.id

  input {
    name = "cloudflare_api_token"
    description = "Cloudflare API token"
    required = true
  }
}

Second, configure your terraform component to use this api token. This will be set as a terraform variable and can be used to configure the provider.

resource "nuon_terraform_module_component" "cloudflare" {
  name   = "cloudflare"
  app_id = nuon_app.main.id

  env_var {
    name  = "cloudflare_api_token"
    value = "{{.nuon.install.inputs.cloudflare_api_token}}"
  }

  var {
    name  = "CLOUDFLARE_API_TOKEN"
    value = "{{.nuon.install.inputs.cloudflare_api_token}}"
  }

In some cases, customizations can be handled using a custom sandbox, if they do not require a different cloud provider. Read more about customizing sandboxes here.