100 lines
1.8 KiB
HCL
100 lines
1.8 KiB
HCL
terraform {
|
|
required_providers {
|
|
heroku = {
|
|
source = "heroku/heroku"
|
|
}
|
|
}
|
|
}
|
|
|
|
provider "heroku" {
|
|
email = var.heroku_email
|
|
api_key = var.heroku_api_key
|
|
}
|
|
|
|
variable "heroku_api_key" {
|
|
description = "Heroku API Key"
|
|
type = string
|
|
sensitive = true
|
|
}
|
|
|
|
variable "heroku_email" {
|
|
description = "Heroku Email"
|
|
type = string
|
|
}
|
|
|
|
variable "app_name" {
|
|
description = "Heroku App Name"
|
|
type = string
|
|
default = "terraform-app"
|
|
}
|
|
|
|
variable "region" {
|
|
description = "Heroku Region"
|
|
type = string
|
|
default = "us"
|
|
}
|
|
|
|
variable "stack" {
|
|
description = "Heroku Stack"
|
|
type = string
|
|
default = "heroku-22"
|
|
}
|
|
|
|
variable "dyno_size" {
|
|
description = "Dyno Size"
|
|
type = string
|
|
default = "basic"
|
|
}
|
|
|
|
resource "heroku_app" "main" {
|
|
name = var.app_name
|
|
region = var.region
|
|
stack = var.stack
|
|
}
|
|
|
|
resource "heroku_formation" "web" {
|
|
app_id = heroku_app.main.id
|
|
type = "web"
|
|
quantity = 1
|
|
size = var.dyno_size
|
|
}
|
|
|
|
resource "heroku_addon" "postgres" {
|
|
app_id = heroku_app.main.id
|
|
plan = "heroku-postgresql:essential-0"
|
|
}
|
|
|
|
resource "heroku_addon" "redis" {
|
|
app_id = heroku_app.main.id
|
|
plan = "heroku-redis:mini"
|
|
}
|
|
|
|
resource "heroku_config" "app_config" {
|
|
sensitive_vars = {
|
|
NODE_ENV = "production"
|
|
PORT = "8080"
|
|
}
|
|
}
|
|
|
|
output "app_url" {
|
|
description = "Heroku App URL"
|
|
value = "https://${var.app_name}.herokuapp.com"
|
|
}
|
|
|
|
output "app_name" {
|
|
description = "Heroku App Name"
|
|
value = heroku_app.main.name
|
|
}
|
|
|
|
output "postgres_url" {
|
|
description = "PostgreSQL Database URL"
|
|
value = heroku_addon.postgres.config_var_values
|
|
sensitive = true
|
|
}
|
|
|
|
output "redis_url" {
|
|
description = "Redis URL"
|
|
value = heroku_addon.redis.config_var_values
|
|
sensitive = true
|
|
}
|