-
Notifications
You must be signed in to change notification settings - Fork 831
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
f4e809b
commit 1b0212f
Showing
5 changed files
with
186 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
# Azure Function App | ||
This template deploys an Azure Function App. | ||
|
||
## Terraform resource types | ||
|
||
- [random_pet](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/pet) | ||
- [azurerm_resource_group](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/resource_group) | ||
- [random_string](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string) | ||
- [azurerm_storage_account](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/storage_account) | ||
- [azurerm_app_service_plan](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/app_service_plan) | ||
- [azurerm_function_app](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/function_app) | ||
- [azurerm_application_insights](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/application_insights) | ||
|
||
## Variables | ||
|
||
| Name | Description | Default value | | ||
|-|-|-| | ||
| `resource_group_name_prefix` | Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription. | rg | | ||
| `resource_group_location` | Location of the resource group. | eastus | | ||
| `appName` | The name of the function app that you wish to create. | fnapp${random_string.unique_id.result} | | ||
| `storageAccountType` | Storage Account type. Possible values are: Standard_LRS, Standard_GRS, Standard_RAGRS. | Standard_LRS | | ||
| `appInsightsLocation` | Location for Application Insights. | "" | | ||
| `runtime` | The language worker runtime to load in the function app. Possible values are: node, dotnet, java. | node | | ||
|
||
## Example |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
resource "random_pet" "rg_name" { | ||
prefix = var.resource_group_name_prefix | ||
} | ||
|
||
resource "azurerm_resource_group" "rg" { | ||
location = var.resource_group_location | ||
name = random_pet.rg_name.id | ||
} | ||
|
||
resource "random_string" "unique_id" { | ||
length = 8 | ||
special = false | ||
} | ||
|
||
locals { | ||
functionAppName = var.appName | ||
hostingPlanName = var.appName | ||
applicationInsightsName = var.appName | ||
storageAccountName = "${random_string.unique_id.result}azfunctions" | ||
functionWorkerRuntime = var.runtime | ||
} | ||
|
||
resource "azurerm_storage_account" "storageAccount" { | ||
name = local.storageAccountName | ||
location = azurerm_resource_group.rg.location | ||
resource_group_name = azurerm_resource_group.rg.name | ||
account_tier = "Standard" | ||
account_replication_type = var.storageAccountType | ||
|
||
enable_https_traffic_only = true | ||
allow_blob_public_access = false | ||
} | ||
|
||
resource "azurerm_app_service_plan" "hostingPlan" { | ||
name = local.hostingPlanName | ||
location = azurerm_resource_group.rg.location | ||
resource_group_name = azurerm_resource_group.rg.name | ||
kind = "FunctionApp" | ||
sku { | ||
tier = "Dynamic" | ||
size = "Y1" | ||
} | ||
} | ||
|
||
resource "azurerm_function_app" "functionApp" { | ||
name = local.functionAppName | ||
location = azurerm_resource_group.rg.location | ||
resource_group_name = azurerm_resource_group.rg.name | ||
app_service_plan_id = azurerm_app_service_plan.hostingPlan.id | ||
storage_account_name = azurerm_storage_account.storageAccount.name | ||
storage_account_access_key = azurerm_storage_account.storageAccount.primary_access_key | ||
os_type = "linux" | ||
version = "~4" | ||
|
||
app_settings = { | ||
"AzureWebJobsStorage" = "DefaultEndpointsProtocol=https;AccountName=${azurerm_storage_account.storageAccount.name};EndpointSuffix=${azurerm_storage_account.storageAccount.primary_blob_endpoint};AccountKey=${azurerm_storage_account.storageAccount.primary_access_key}" | ||
"WEBSITE_CONTENTAZUREFILECONNECTIONSTRING" = "DefaultEndpointsProtocol=https;AccountName=${azurerm_storage_account.storageAccount.name};EndpointSuffix=${azurerm_storage_account.storageAccount.primary_blob_endpoint};AccountKey=${azurerm_storage_account.storageAccount.primary_access_key}" | ||
"WEBSITE_CONTENTSHARE" = lower(local.functionAppName) | ||
"FUNCTIONS_EXTENSION_VERSION" = "~4" | ||
"WEBSITE_NODE_DEFAULT_VERSION" = "~14" | ||
"APPINSIGHTS_INSTRUMENTATIONKEY" = azurerm_application_insights.applicationInsights.instrumentation_key | ||
"FUNCTIONS_WORKER_RUNTIME" = local.functionWorkerRuntime | ||
} | ||
|
||
identity { | ||
type = "SystemAssigned" | ||
} | ||
|
||
site_config { | ||
ftps_state = "FtpsOnly" | ||
min_tls_version = "1.2" | ||
} | ||
|
||
https_only = true | ||
} | ||
|
||
resource "azurerm_application_insights" "applicationInsights" { | ||
name = local.applicationInsightsName | ||
location = var.appInsightsLocation | ||
resource_group_name = azurerm_resource_group.rg.name | ||
application_type = "web" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
output "resource_group_name" { | ||
value = azurerm_resource_group.rg.name | ||
} | ||
|
||
output "storage_account_name" { | ||
value = azurerm_storage_account.storageAccount.name | ||
} | ||
|
||
output "app_service_plan_name" { | ||
value = azurerm_app_service_plan.hostingPlan.name | ||
} | ||
|
||
output "function_app_name" { | ||
value = azurerm_function_app.functionApp.name | ||
} | ||
|
||
output "application_insights_name" { | ||
value = azurerm_application_insights.applicationInsights.name | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
terraform { | ||
required_version = ">=1.0" | ||
|
||
required_providers { | ||
azurerm = { | ||
source = "hashicorp/azurerm" | ||
version = "~>3.0" | ||
} | ||
random = { | ||
source = "hashicorp/random" | ||
version = "~>3.0" | ||
} | ||
} | ||
} | ||
|
||
provider "azurerm" { | ||
features {} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
variable "resource_group_name_prefix" { | ||
type = string | ||
default = "rg" | ||
description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." | ||
} | ||
|
||
variable "resource_group_location" { | ||
type = string | ||
default = "eastus" | ||
description = "Location of the resource group." | ||
} | ||
|
||
variable "appName" { | ||
type = string | ||
default = "fnapp${random_string.unique_id.result}" | ||
description = "The name of the function app that you wish to create." | ||
} | ||
|
||
variable "storageAccountType" { | ||
type = string | ||
default = "Standard_LRS" | ||
validation { | ||
condition = contains(["Standard_LRS", "Standard_GRS", "Standard_RAGRS"], var.storageAccountType) | ||
error_message = "Must be one of Standard_LRS, Standard_GRS, Standard_RAGRS" | ||
} | ||
description = "Storage Account type" | ||
} | ||
|
||
variable "appInsightsLocation" { | ||
type = string | ||
description = "Location for Application Insights" | ||
} | ||
|
||
variable "runtime" { | ||
type = string | ||
default = "node" | ||
validation { | ||
condition = contains(["node", "dotnet", "java"], var.runtime) | ||
error_message = "Must be one of node, dotnet, java" | ||
} | ||
description = "The language worker runtime to load in the function app." | ||
} |