#Azure – Creating an #AzureFunction ⚡ for #JulyOT

Hi !

In my previous post I wrote about how (Thanks to Sam), I’m on the path to learn Azure Bicep 🦾. I’m also share how I’m using Bicep to create my demo environments for for JulyOT!

https://julyot.dev/

I shared a full Bicep file that, using an existing Resource Group:

  • Create an Azure IoT Hub
  • Create a Storage Account
  • Create a Function App
  • Create an App Service Plan
  • Create an Application Insights

This is the output view of the elements created on the Resource Group.

resources created in azure

After this post, I had several questions around creating just an Azure Function, so let’s review a new Bicep file. With this remats

  • Project name it limited to a length of 1-11.
  • The Azure Function will be created on the same location of the Resource Group (line 32).
  • The runtime will be “python”, we can remove the lines 35 and 36, I leave them just for reference.
  • The hosting plan is defined in line 60, you may change it to fit your needs.
// Copyright (c) 2022
// Author : Bruno Capuano
// Create Time : 2022 July
// Change Log :
//
// The MIT License (MIT)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
@description('Define the project name or prefix for all objects.')
@minLength(1)
@maxLength(11)
param demoName string = 'elbruno'
@description('The datacenter to use for the deployment.')
param location string = resourceGroup().location
// Azure Function configuration
@description('The language worker runtime to load in the function app.')
@allowed([
'node'
'dotnet'
'java'
'python'
])
param runtime string = 'python'
var functionAppName = demoName
var hostingPlanName = demoName
var functionWorkerRuntime = runtime
// Azure Function Creation
resource hostingPlan 'Microsoft.Web/serverfarms@2021-03-01' = {
name: hostingPlanName
location: location
sku: {
name: 'Y1'
tier: 'Dynamic'
}
properties: {}
}
resource functionApp 'Microsoft.Web/sites@2021-03-01' = {
name: functionAppName
location: location
kind: 'functionapp'
identity: {
type: 'SystemAssigned'
}
properties: {
serverFarmId: hostingPlan.id
siteConfig: {
appSettings: [
{
name: 'WEBSITE_CONTENTSHARE'
value: toLower(functionAppName)
}
{
name: 'FUNCTIONS_EXTENSION_VERSION'
value: '~2'
}
{
name: 'WEBSITE_NODE_DEFAULT_VERSION'
value: '~10'
}
{
name: 'FUNCTIONS_WORKER_RUNTIME'
value: functionWorkerRuntime
}
]
ftpsState: 'FtpsOnly'
minTlsVersion: '1.2'
}
httpsOnly: true
}
}

I hope this helps !

Happy coding!

Greetings

El Bruno

More posts in my blog ElBruno.com.


Leave a comment

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: