Skip to content


Repository files navigation

Provose is the easiest way to manage your Amazon Web Service (AWS) 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 free and open-source software forever.

Provose is distributed under the MIT license. You can download Provose at, 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 blog on Amazon Web Services using Provose.

Subscribe to the Provose newsletter for updates

Click here to find the Provose newsletter.

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 = ""
  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 = ""
    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 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                = [""]
      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.

How to report a security issue

To report a security issue, email Do not post on GitHub.


Provose is a HashiCorp Terraform module, and needs the latest version of Terraform installed on your machine to run.

Additionally, Provose also depends on the AWS CLI version 2 to run additional configuration commands not yet supported in Terraform.

If you want to build and deploy Docker images with Provose, you will also need the docker command installed on your machine.


Follow the Tutorial for instructions on how to install and use Provose.