Deploy Azure Service Bus and Azure Function using Terraform and Azure devOps

Mohit Gupta
AzureDiary
Published in
3 min readSep 20, 2019

Overview:

The Article give an overview of how to use terraform with Azure Devops to deploy

Azure Infrastructure and Azure Function App.

Tools used:

Terraform, Azure DevOps, Azure Service Bus, Azure Web App

Solution Diagram:

Create Terraform file to create Azure Service Bus and Azure Function App

Create Azure Function project using Visual studio.

Create Azure DevOps CI CD Pipeline to deploy terraform and Azure Function

Create Azure Function Project

Use Service Bus Topic Trigger

Create Terraform code to create Azure Service Bus and Azure Function

resource “azurerm_resource_group” “test” {

name = “${var.prefix}-resources”

location = “${var.location}”

}

resource “azurerm_servicebus_namespace” “example” {

name = “xyzsevicebusn01s”

location = “${azurerm_resource_group.test.location}”

resource_group_name = “${azurerm_resource_group.test.name}”

sku = “Standard”

tags = {

source = “terraform”

}

}

resource “azurerm_servicebus_topic” “example” {

name = “events”

resource_group_name = “${azurerm_resource_group.test.name}”

namespace_name = “${azurerm_servicebus_namespace.test.name}”

enable_partitioning = true

}

resource “azurerm_storage_account” “test” {

name = “xyzstorageaccount09”

resource_group_name = “${azurerm_resource_group.test.name}”

location = “${azurerm_resource_group.test.location}”

account_tier = “Standard”

account_replication_type = “LRS”

}

resource “azurerm_app_service_plan” “test” {

name = “azure-functions-test-service-plan”

location = “${azurerm_resource_group.test.location}”

resource_group_name = “${azurerm_resource_group.test.name}”

kind = “FunctionApp”

sku {

tier = “Dynamic”

size = “Y1”

}

}

resource “azurerm_function_app” “test” {

name = “test-xyzcompany-functions”

location = “${azurerm_resource_group.test.location}”

resource_group_name = “${azurerm_resource_group.test.name}”

app_service_plan_id = “${azurerm_app_service_plan.test.id}”

storage_connection_string = “${azurerm_storage_account.test.primary_connection_string}”

app_settings = {

“ServiceBusConnectionString” = “some-value”

}

}

Check-In Code to Git-Hub

Create a project in Azure Dev Ops

Create Build Definition

Connect GitHub Repository

Select your repository

Configure Pipeline

Pipeline includes

· Build and Publish Function app

· Copy and Publish Terraform code

# .NET Core Function App to Windows on Azure

# Build a .NET Core function app and deploy it to Azure as a Windows function App.

# Add steps that analyze code, save build artifacts, deploy, and more:

# https://docs.microsoft.com/en-us/azure/devops/pipelines/languages/dotnet-core

trigger:

- master

variables:

# Agent VM image name

vmImageName: ‘vs2017-win2016’

stages:

- stage: Build

displayName: Build stage

jobs:

- job: Build

displayName: Build

pool:

vmImage: $(vmImageName)

steps:

- task: CopyFiles@2

inputs:

SourceFolder: ‘Infra’

Contents: ‘**’

TargetFolder: ‘$(Build.ArtifactStagingDirectory)’

- task: PublishBuildArtifacts@1

inputs:

PathtoPublish: ‘$(Build.ArtifactStagingDirectory)’

ArtifactName: ‘Infra’

publishLocation: ‘Container’

- task: DotNetCoreCLI@2

displayName: Build

inputs:

command: ‘build’

projects: |

**/*.csproj

arguments: — output publish_output — configuration Release

- task: ArchiveFiles@2

displayName: ‘Archive files’

inputs:

rootFolderOrFile: ‘$(System.DefaultWorkingDirectory)/xyz-functions-app/publish_output’

includeRootFolder: false

archiveType: zip

archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip

replaceExistingArchive: true

- publish: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip

artifact: drop

Create Release pipeline

Add artifacts:

Configure Stage to add following tasks.

Select Artifacts to configure Terraform Steps:

Select Build artifacts to deploy azure function.

Create release and verify the deployment in Azure portal .

Source Code :

--

--

Mohit Gupta
AzureDiary

Integration Developer works on Azure , DevOps , BizTalk. Contact : mohit.e.gupta@gmail.com