Home

Awesome

Heroku Enterprise microservices with a unified gateway using Terraform

A Heroku Private Space provides a container for internally routed apps that are only accessible within its private network.

Each microservice (internal app) is exposed to the internet through a Kong service & route with a custom domain name, secured via automated certificate management.

A single Terraform config embodies the complete system, enabling high-level collaboration, repeatability, test-ability, and change management.

Diagram: Terraform a complete multi-app
architecture with Heroku Private Spaces,
a Kong gateway, & DNSimple

▶ See also: Heroku Common Runtime version of this architecture

Primary components

Challenges & Caveats

Requirements

Usage

Ensure the requirements are met, then,

  1. Clone this repo:

    git clone git@github.com:heroku-examples/terraform-heroku-kong-microservices.git
    cd terraform-heroku-kong-microservices/
    
  2. Install terraform-provider-kong 1.9.1

    • download the .zip asset for your computer's architecture
    • unzip it into terraform.d/plugins/$ARCH/
    • where $ARCH is the computer's architecture, like darwin_amd64
  3. Set Heroku API key

    1. heroku authorizations:create -d terraform-heroku-kong-microservices
    2. export HEROKU_API_KEY=<"Token" value from the authorization>
  4. Setup DNS

    1. locate the account ID & API token (help)
    2. export DNSIMPLE_ACCOUNT=xxxxx DNSIMPLE_TOKEN=yyyyy
  5. terraform init

  6. Then, apply the config with your own top-level config values:

    terraform apply \
      -var name=kong-micro \
      -var dns_zone=example.com \
      -var heroku_enterprise_team=example-team
    
  7. Visit the output URLs in a web browser to demonstrate the secure backend & public gateway:

    • terraform output wasabi_backend_url not directly accessible
    • terraform output wasabi_public_url

🔬 This is a community proof-of-concept, MIT license, provided "as is", without warranty of any kind.