Exploring Azure - Azure Functions Coding
Tags: azure, serverless, terraform, cli
Published: 2021-07-21 08:36:21


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
{% youtube njJN3MfU218 %}

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

```bash
brew tap azure/functions
brew install azure-functions-core-tools@3
```

- We need to have the Azure CLI installed

```bash
brew update && brew install azure-cli
az login
```

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 

```bash
func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
```

Now let us start this function

```bash
func start
```

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
```

Now we need to publish our application to Azure 

- We need to make sure that we are signed in to Azure through our CLI

```bash
az login
```

- As we know everything in Azure needs to belong to a resource group so we will start by creating a resource group

```bash
az group create --name AzFunctionsDeepDive-rg --location uksouth
```

- Azure Functions require us to have a storage account so we need to create it as well

```bash
az storage account create --name azfuncstoragemldemo --location uksouth --resource-group AzFunctionsDeepDive-rg --sku Standard_LRS
```

- Once that is created now we can create our azure function

```bash
az functionapp create --resource-group AzFunctionsDeepDive-rg --consumption-plan-location uksouth --runtime dotnet --functions-version 3 --name azfuncmldemo1 --storage-account azfuncstoragemldemo
```

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

```bash
func azure functionapp publish azfuncmldemo1
```

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](https://www.terraform.io/downloads.html))

```bash
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
brew update
```

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

```bash
brew update && brew install azure-cli
az login
```

VS code plugin for Terrafrom

Now we need to create a new file called [setup.tf](http://setup.tf) which will represent our code for Azure function infrastructure

```bash
# 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"
}
```

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

```bash
az login # to login
```

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

```bash
terraform init
terraform plan
terraform apply
```

To remove all of the infrastructure created

```bash
terraform destroy
```