In my previous post I wrote about creating infrastructure for Azure WebJob using Terraform. Using that solution is created empty infrastructure ready for deployment of Azure WebJob, but the deployment of Azure WebJob have to be done separately.
Terraform provides also options to deploy Azure WebJob immediately after required Azure resources are created. It is posible by combination of Terraform provisioner together with Azure CLI command az webapp deployment
as demonstrated in following code snippet:
resource "null_resource" "webjob" { provisioner "local-exec" { when = create command = "az webapp deployment source config-zip -g ${var.resource_group_name} -n ${var.resource_group_name} --src ${var.deployment_package}" } depends_on = [ azurerm_app_service.as ] }
Terraform provisioner is executed locally at creation of resource and is placed in null_resource which has dependency on azurerm_app_service.as
resource. Complete main.tf
file which is responsible for creating Azure resources and then deployment of Azure WebJob is:
terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = ">= 2.0" } } } provider "azurerm" { features {} } variable "resource_group_name" { type = string description = "Resource group name" default = "WinServiceToAzureTest" } variable "location_name" { type = string description = "Resource location" default = "westeurope" } variable "deployment_package" { type = string description = "Deployment package" default = "Publish.zip" } resource "azurerm_resource_group" "rg" { name = var.resource_group_name location = var.location_name } resource "azurerm_app_service_plan" "asp" { name = var.resource_group_name location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name sku { tier = "Basic" size = "B1" } } resource "azurerm_app_service" "as" { name = var.resource_group_name location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name app_service_plan_id = azurerm_app_service_plan.asp.id client_affinity_enabled = false site_config { use_32_bit_worker_process = false always_on = true } app_settings = { "APPINSIGHTS_INSTRUMENTATIONKEY" = azurerm_application_insights.ai.instrumentation_key } connection_string { name = "AzureWebJobsDashboard" type = "Custom" value = "DefaultEndpointsProtocol=https;AccountName=${lower(var.resource_group_name)};AccountKey=${azurerm_storage_account.sa.primary_access_key};EndpointSuffix=core.windows.net" } connection_string { name = "AzureWebJobsStorage" type = "Custom" value = "DefaultEndpointsProtocol=https;AccountName=${lower(var.resource_group_name)};AccountKey=${azurerm_storage_account.sa.primary_access_key};EndpointSuffix=core.windows.net" } } resource "azurerm_storage_account" "sa" { name = lower(var.resource_group_name) location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name account_tier = "Standard" account_replication_type = "LRS" } resource "azurerm_application_insights" "ai" { name = var.resource_group_name location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name application_type = "web" } resource "null_resource" "webjob" { provisioner "local-exec" { when = create command = "az webapp deployment source config-zip -g ${var.resource_group_name} -n ${var.resource_group_name} --src ${var.deployment_package}" } depends_on = [ azurerm_app_service.as ] }
If you are interested in Azure WebJobs and how to use them to migrage Windows service to Azure, take my Udemy course Migrate Windows service to Azure.