Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Provose is the easiest way to manage your Amazon Web Services infrastructure.

Provose is built on top of HashiCorp Terraform, an industry-leading infrastructure-as-code tool.

Provose is a Terraform module that deploys hundreds of underlying cloud resources–containers, databases, TLS certificates, DNS rules, and more–with just a few lines of code. Provose is a layer on top of Terraform that makes intelligent configuration choices for you and reduces the amount of code needed.

Provose is free and open-source software forever.

Provose is distributed under the MIT license. You can download Provose at github.com/provose/provose, which is also where you can also submit bug reports and contribute improvements.

Learn Provose from Tutorial or the Reference.

Provose is easy to learn. You can get started with just a few lines of code. You can also find an example of setting up a Ghost.org blog on Amazon Web Services using Provose.

Here is what Provose code looks like.

Below is an example of what Provose looks like, provisioning a container serving HTTP traffic on AWS Fargate:

module "myproject" {
  source = "github.com/provose/provose?ref=v3.0.0"
  provose_config = {
    authentication = {
      aws = {
        region = "us-east-1"
      }
    }
    name                 = "myproject"
    # Provose requires a domain name to be used for internal purposes.
    # This allows us to protect internal services using
    # AWS Certificate Manager (ACM) certificates.
    internal_root_domain = "example-internal.com"
    internal_subdomain   = "production"
  }
  containers = {
    hello = {
      image = {
        # This is the name of a publicly-available container on DockerHub.
        # Private Elastic Container Registry (ECR) containers can also be used.
        name             = "nginxdemos/hello"
        # This is a container tag on DockerHub.
        tag              = "latest"
        private_registry = false
      }
      public = {
        https = {
          internal_http_port              = 80
          internal_http_health_check_path = "/"
          # You need to have example.com as a domain in your AWS
          # account with DNS managed by Route 53.
          # Provose will set up an Application Load Balancer serving
          # HTTP and HTTPS traffic to this group of containers.
          public_dns_names                = ["hello.example.com"]
        }
      }
      instances = {
        # Set this to an EC2 instance type to use AWS ECS-EC2
        # or FARGATE_SPOT to automatically save money by using Spot
        # instances.
        instance_type   = "FARGATE"
        container_count = 1
        cpu             = 256
        memory          = 512
      }
    }
  }
}

You can also take a look at how to use Provose to provision:

and a lot more on Amazon Web Services.