DEV Community

loading...
Cover image for Exploring Azure - Azure Functions Coding

Exploring Azure - Azure Functions Coding

Mohamad Lawand
Code is Life. Crossfitter. Technical Architect. Just another human walking the earth! https://youtube.com/c/mohamadlawand
・3 min read

In this article we will be continuing our journey in exploring Azure. On this episode we will explore and dig deep into the coding and implementations Azure Functions this is the second part of Azure functions explorations.

This is part 2 of the Azure functions series you can check part on by clicking on the the following link
https://dev.to/moe23/exploring-azure-azure-functions-45cg

You watch the full video on Youtube

You can find the source code on GitHub
https://github.com/mohamadlawand087/v38-AzureFunctionsDeepDive

So what we will cover today:

  • Ingredients
  • How to build Azure Functions
  • Code

As always please comment your questions, clarifications and suggestions in the comments down below. Please like, share and subscribe if you like the video. It will really help the channel

Ingredients

  • Azure account
  • VS Code
  • Dotnet SDK

How to create Azure functions

  • Azure Portal
  • Azure CLI
  • Terraform

Azure CLI:

We will need to do some configuration and installation before we can deploy

  • We need to have an Azure Account
  • We need to install function tools
brew tap azure/functions
brew install azure-functions-core-tools@3
Enter fullscreen mode Exit fullscreen mode
  • We need to have the Azure CLI installed
brew update && brew install azure-cli
az login
Enter fullscreen mode Exit fullscreen mode

Now we need to do some checks before we can proceed

  • run func --version to check that the Azure Functions Core Tools are version 3.x.
  • Run az --version to check that the Azure CLI version is 2.4 or later.
  • Run az login to sign in to Azure and verify an active subscription.
  • Run dotnet --list-sdks to check that .NET Core SDK version 3.1.x is installed

Now let us create a new Azure function

func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
Enter fullscreen mode Exit fullscreen mode

Now let us start this function

func start
Enter fullscreen mode Exit fullscreen mode

We can see in the terminal a link has been generated which will allow us to connect to the function. We can execute the function by using that link in the browser

http://localhost:7071/api/HttpExample?name=Mohamad
Enter fullscreen mode Exit fullscreen mode

Now we need to publish our application to Azure

  • We need to make sure that we are signed in to Azure through our CLI
az login
Enter fullscreen mode Exit fullscreen mode
  • As we know everything in Azure needs to belong to a resource group so we will start by creating a resource group
az group create --name AzFunctionsDeepDive-rg --location uksouth
Enter fullscreen mode Exit fullscreen mode
  • Azure Functions require us to have a storage account so we need to create it as well
az storage account create --name azfuncstoragemldemo --location uksouth --resource-group AzFunctionsDeepDive-rg --sku Standard_LRS
Enter fullscreen mode Exit fullscreen mode
  • Once that is created now we can create our azure function
az functionapp create --resource-group AzFunctionsDeepDive-rg --consumption-plan-location uksouth --runtime dotnet --functions-version 3 --name azfuncmldemo1 --storage-account azfuncstoragemldemo
Enter fullscreen mode Exit fullscreen mode

Now that we have created our resources on Azure, its time for us to deploy our function

func azure functionapp publish azfuncmldemo1
Enter fullscreen mode Exit fullscreen mode

Once its deployed we can get the url for our function and we can test it out in our browser

Terraform:

we will need to install some items:

We need to download terraform (https://www.terraform.io/downloads.html)

brew tap hashicorp/tap
brew install hashicorp/tap/terraform
brew update
Enter fullscreen mode Exit fullscreen mode

We need to download to download azure cli (https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-windows?tabs=azure-cli)

brew update && brew install azure-cli
az login
Enter fullscreen mode Exit fullscreen mode

VS code plugin for Terrafrom

Now we need to create a new file called setup.tf which will represent our code for Azure function infrastructure

# we need to specify the provider that we are going to use
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "=2.67.0"
    }
  }
}

provider "azurerm" {
   features {

  }
}

resource "azurerm_resource_group" "az_func_rg" {
    name = "azure-functions-demo-rg"
    location = "uksouth"
}

resource "azurerm_storage_account" "azfuncstorage" {
    name = "azurefuncstoragesyt"
    resource_group_name = azurerm_resource_group.az_func_rg.name
    location = azurerm_resource_group.az_func_rg.location
    account_tier = "Standard"
    account_replication_type = "LRS"
}

resource "azurerm_app_service_plan" "az-func-sp" {
    name = "azure-functions-service-plan"
    location = azurerm_resource_group.az_func_rg.location
    resource_group_name = azurerm_resource_group.az_func_rg.name
    kind = "Linux"
    reserved = true

    sku {
        tier = "Dynamic"
        size = "Y1"
    }
}

resource "azurerm_function_app" "supper-az-func" {
  name = "super-azure-functions"
  location = azurerm_resource_group.az_func_rg.location
  resource_group_name = azurerm_resource_group.az_func_rg.name
  app_service_plan_id = azurerm_app_service_plan.az-func-sp.id
  storage_account_name = azurerm_storage_account.azfuncstorage.name
  storage_account_access_key = azurerm_storage_account.azfuncstorage.primary_access_key
  os_type = "linux"
}
Enter fullscreen mode Exit fullscreen mode

We need to make sure we are logged into Azure through CLI

az login # to login
Enter fullscreen mode Exit fullscreen mode

Once we have logged in we need now to run terraform code

terraform init
terraform plan
terraform apply
Enter fullscreen mode Exit fullscreen mode

To remove all of the infrastructure created

terraform destroy
Enter fullscreen mode Exit fullscreen mode

Discussion (0)