Deploy Azure Service Bus and Azure Function using Terraform and Azure devOps
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