Creating Azure Function App with .NET 8 - Bicep Example

Creating Azure Function App with .NET 8 - Bicep Example

Kontext Kontext 0 2839 4.26 index 9/4/2023

Code description

.NET 8 preview 7 is now supported for Azure Functions Linux consumption plan when creating dotnet-isolated function app. This code snippet shows you how to create a Function App using .NET 8. The key part is to change linuxFxVersion  to 'DOTNET-ISOLATED|8.0'.

Code snippet

    @description('The name of the Azure Function app.')
    param functionAppName string = 'func-${uniqueString(resourceGroup().id)}-dotnet8'
    
    @description('Storage Account type')
    @allowed([
      'Standard_LRS'
      'Standard_GRS'
      'Standard_RAGRS'
    ])
    param storageAccountType string = 'Standard_LRS'
    
    @description('Location for all resources.')
    param location string = resourceGroup().location
    
    @description('Location for Application Insights')
    param appInsightsLocation string = resourceGroup().location
    
    
    @description('Required for Linux app to represent runtime stack in the format of \'runtime|runtimeVersion\'. For example: \'python|3.10\'')
    param linuxFxVersion string = 'DOTNET-ISOLATED|8.0'
    
    @description('The zip content url.')
    param packageUri string
    
    var hostingPlanName = functionAppName
    var applicationInsightsName = functionAppName
    var storageAccountName = '${uniqueString(resourceGroup().id)}azfunctionsdotnet8'
    
    // Storage account for function package
    resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
      name: storageAccountName
      location: location
      sku: {
        name: storageAccountType
      }
      kind: 'Storage'
    }
    
    resource hostingPlan 'Microsoft.Web/serverfarms@2022-09-01' = {
      name: hostingPlanName
      location: location
      sku: {
        name: 'Y1'
        tier: 'Dynamic'
        size: 'Y1'
        family: 'Y'
      }
      properties: {
        // For creating Linux plans, the reserved property must be set to true.
        reserved: true
      }
    }
    
    // application insights
    resource applicationInsight 'Microsoft.Insights/components@2020-02-02' = {
      name: applicationInsightsName
      location: appInsightsLocation
      properties: {
        Application_Type: 'web'
      }
      kind: 'web'
    }
    
    resource functionApp 'Microsoft.Web/sites@2022-09-01' = {
      name: functionAppName
      location: location
      kind: 'functionapp,linux'
      properties: {
        reserved: true
        serverFarmId: hostingPlan.id
        siteConfig: {
          linuxFxVersion: linuxFxVersion
          appSettings: [
            {
              name: 'FUNCTIONS_EXTENSION_VERSION'
              value: '~4'
            }
            {
              name: 'FUNCTIONS_WORKER_RUNTIME'
              value: 'dotnet-isolated'
            }
            {
              name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
              value: reference(resourceId('Microsoft.Insights/components', functionAppName), '2020-02-02').InstrumentationKey
            }
            {
              name: 'AzureWebJobsStorage'
              value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
            }
            {
              name: 'WEBSITE_CONTENTAZUREFILECONNECTIONSTRING'
              value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
            }
            {
              name: 'WEBSITE_CONTENTSHARE'
              value: toLower(functionAppName)
            }
            {
              name: 'WEBSITE_RUN_FROM_PACKAGE'
              value: packageUri
            }
          ]
        }
      }
      dependsOn: [
        applicationInsight
      ]
    }
    
azure azure-bicep azure-functions devops linux

Join the Discussion

View or add your thoughts below

Comments