Skip to content

Instantly share code, notes, and snippets.

@justinyoo
Created January 16, 2019 12:32
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save justinyoo/56f4078a7ef30efdec3f702b2620aedd to your computer and use it in GitHub Desktop.
Save justinyoo/56f4078a7ef30efdec3f702b2620aedd to your computer and use it in GitHub Desktop.
Terraforming Azure PaaS
# functionapp.tf
#
# Configure the Azure Provider
provider "azurerm" {
version = "=1.20.0"
}
locals {
name = "${var.name}"
location = "${var.location}"
resource_group = "${var.resource_group}"
tags = "${var.tags}"
consumption_plan_id = "${var.consumption_plan_id}"
web_config = "${var.web_config}"
app_settings = "${var.app_settings}"
}
resource "azurerm_function_app" "fncapp" {
# Function app name
name = "${local.name}"
# Function app location
location = "${local.location}"
# Resource group name that Function app belongs
resource_group_name = "${local.resource_group}"
# Resource tags
tags = "${local.tags}"
# Consumption plan ID
app_service_plan_id = "${local.consumption_plan_id}"
# Web config
https_only = "${local.web_config["https_only"]}"
site_config {
use_32_bit_worker_process = "${local.web_config["use_32_bit_worker_process"]}"
}
# App settings
storage_connection_string = "${local.app_settings["storage_connection_string"]}"
version = "${local.app_settings["functions_extension_version"]}"
app_settings {
AzureWebJobsSecretStorageType = "${local.app_settings["secret_storage_type"]}"
FUNCTION_APP_EDIT_MODE = "${local.app_settings["functions_edit_mode"]}"
FUNCTIONS_WORKER_RUNTIME = "${local.app_settings["functions_worker_runtime"]}"
}
}
resource "azurerm_logic_app_trigger_custom" "test" {
name = "example-trigger"
logic_app_id = "${azurerm_logic_app_workflow.test.id}"
# JSON hard-coding required
body = <<BODY
{
"recurrence": {
"frequency": "Day",
"interval": 1
},
"type": "Recurrence"
}
BODY
}
# logicapp.tf
#
# Configure the Azure Provider
provider "azurerm" {
version = "=1.20.0"
}
locals {
name = "${var.name}"
location = "${var.location}"
resource_group = "${var.resource_group}"
tags = "${var.tags}"
}
resource "azurerm_logic_app_workflow" "logapp" {
# Logic App name
name = "${local.name}"
# Logic App location
location = "${local.location}"
# Resource group name that Logic App belongs
resource_group_name = "${local.resource_group}"
# Resouce tags
tags = "${local.tags}"
}
# orchestrator.tf
#
# Configure the Azure Provider
provider "azurerm" {
version = "=1.20.0"
}
# Initialise external variables
variable "resource_name" {
type = "string"
description = "Resource name"
}
variable "resource_environment" {
type = "string"
description = "Resource environment"
default = "Development"
}
variable "resource_environment_code" {
type = "string"
description = "Resource environment code"
default = "dev"
}
variable "resource_location" {
type = "string"
description = "Resource location"
default = "Australia Southeast"
}
variable "resource_location_code" {
type = "string"
description = "Resource location code"
default = "ase"
}
# Initialise local variables
locals {
resource_long_name = "{0}-${var.resource_name}-${var.resource_environment_code}-${var.resource_location_code}"
resource_short_name = "${replace(local.resource_long_name, "-", "")}"
location = "${var.resource_location}"
tags = {
environment = "${var.resource_environment}"
}
}
# Create Resource Group
module "resgrp" {
source = "./modules/resourcegroup"
name = "${replace(local.resource_long_name, "{0}", "resgrp")}"
location = "${local.location}"
tags = "${local.tags}"
}
# Create Storage Account
module "st" {
source = "./modules/storageaccount"
name = "${replace(local.resource_short_name, "{0}", "st")}"
location = "${local.location}"
resource_group = "${module.resgrp.name}"
tags = "${local.tags}"
}
# Create Consumption Plan
module "csplan" {
source = "./modules/consumptionplan"
name = "${replace(local.resource_long_name, "{0}", "csplan")}"
location = "${local.location}"
resource_group = "${module.resgrp.name}"
tags = "${local.tags}"
}
# Create Function App
module "fncapp" {
source = "./modules/functionapp"
name = "${replace(local.resource_long_name, "{0}", "fncapp")}"
location = "${local.location}"
resource_group = "${module.resgrp.name}"
tags = "${local.tags}"
consumption_plan_id = "${module.csplan.id}"
web_config = {
https_only = "true"
use_32_bit_worker_process = "false"
}
app_settings = {
storage_connection_string = "${module.st.connection_string}"
secret_storage_type = "Files"
functions_extension_version = "~2"
functions_edit_mode = "ReadOnly"
functions_worker_runtime = "dotnet"
}
}
# Create Logic App
module "logapp" {
source = "./modules/logicapp"
name = "${replace(local.resource_long_name, "{0}", "logapp")}"
location = "${local.location}"
resource_group = "${module.resgrp.name}"
tags = "${local.tags}"
}
# outputs.tf
#
# Resource group ID
output "id" {
value = "${azurerm_resource_group.resgrp.id}"
}
# Resource Group name
output "name" {
value = "${azurerm_resource_group.resgrp.name}"
}
# Resource Group location
output "location" {
value = "${azurerm_resource_group.resgrp.location}"
}
# resourcegroup.tf
#
# Configure the Azure Provider
provider "azurerm" {
version = "=1.20.0"
}
locals {
name = "${var.name}"
location = "${var.location}"
tags = "${var.tags}"
}
resource "azurerm_resource_group" "resgrp" {
# Resource group name
name = "${local.name}"
# Resource group location
location = "${local.location}"
# Resource group tag
tags = "${local.tags}"
}
# variables.tf
#
variable "name" {
type = "string"
description = "Resource group name"
}
variable "location" {
type = "string"
description = "Resource group location"
default = "Australia Southeast"
}
variable "tags" {
type = "map"
description = "Tags for resource group"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment