Inicio rápido: Creación e implementación de recursos de Azure Functions mediante Bicep

En este artículo se describen los pasos que deberá seguir para crear una aplicación de funciones y los recursos relacionados con esta en Azure mediante el uso de Azure Functions y Bicep. Esa aplicación de funciones le proporcionará un contexto de ejecución para las ejecuciones del código de las funciones que cree.

Este inicio rápido supone un pequeño costo en su cuenta de Azure.

Bicep es un lenguaje específico de dominio (DSL) que usa una sintaxis declarativa para implementar recursos de Azure. Brinda sintaxis concisa, seguridad de tipos confiable y compatibilidad con la reutilización de código. Bicep ofrece la mejor experiencia de creación para sus soluciones de infraestructura como código en Azure.

Después de crear la aplicación de funciones, podrá implementar el código de sus proyectos de Azure Functions en ella.

Requisitos previos

Cuenta de Azure

Antes de empezar, debe tener una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.

Revisión del archivo de Bicep

El archivo de Bicep usado en este inicio rápido forma parte de las plantillas de inicio rápido de Azure.

@description('The name of the function app that you wish to create.')
param appName string = 'fnapp${uniqueString(resourceGroup().id)}'

@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

@description('The language worker runtime to load in the function app.')
@allowed([
  'node'
  'dotnet'
  'java'
])
param runtime string = 'node'

var functionAppName = appName
var hostingPlanName = appName
var applicationInsightsName = appName
var storageAccountName = '${uniqueString(resourceGroup().id)}azfunctions'
var functionWorkerRuntime = runtime

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-05-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'Storage'
  properties: {
    supportsHttpsTrafficOnly: true
    defaultToOAuthAuthentication: true
  }
}

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: '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: 'FUNCTIONS_EXTENSION_VERSION'
          value: '~4'
        }
        {
          name: 'WEBSITE_NODE_DEFAULT_VERSION'
          value: '~14'
        }
        {
          name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
          value: applicationInsights.properties.InstrumentationKey
        }
        {
          name: 'FUNCTIONS_WORKER_RUNTIME'
          value: functionWorkerRuntime
        }
      ]
      ftpsState: 'FtpsOnly'
      minTlsVersion: '1.2'
    }
    httpsOnly: true
  }
}

resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
  name: applicationInsightsName
  location: appInsightsLocation
  kind: 'web'
  properties: {
    Application_Type: 'web'
    Request_Source: 'rest'
  }
}

Los siguientes cuatro recursos de Azure se han creado mediante este archivo de Bicep:

Importante

La cuenta de almacenamiento se usa para almacenar datos importantes de la aplicación, a veces incluido el propio código de la aplicación. Debe limitar el acceso desde otras aplicaciones y usuarios a la cuenta de almacenamiento.

Implementación del archivo de Bicep

  1. Guarde el archivo de Bicep como main.bicep en el equipo local.

  2. Implemente el archivo de Bicep mediante la CLI de Azure o Azure PowerShell.

    az group create --name exampleRG --location eastus
    az deployment group create --resource-group exampleRG --template-file main.bicep --parameters appInsightsLocation=<app-location>
    

    Nota

    Reemplace <app-location> por la región de Application Insights, que suele ser la misma que el grupo de recursos.

    Una vez finalizada la implementación, debería mostrarse un mensaje indicando que la implementación se realizó correctamente.

Validación de la implementación

Use la CLI de Azure o Azure PowerShell para validar la implementación.

az resource list --resource-group exampleRG

Visite la página principal de la aplicación de funciones

  1. Use la salida del paso de validación anterior para recuperar el nombre único creado para la aplicación de funciones.

  2. Abra un explorador y escriba la siguiente dirección URL: <https://< nombreAplicación.azurewebsites.net>. Asegúrese de reemplazar <\nombreAplicación> por el nombre único creado para la aplicación de funciones.

    Al visitar la dirección URL, debería ver una página similar a la siguiente:

    Function app welcome page

Limpieza de recursos

Si continúa con el paso siguiente y agrega un enlace de salida de la cola de Azure Storage, conserve todos los recursos intactos, ya que va a crear a partir de lo que ya ha hecho.

Si no va a volver a necesitar los recursos, use la CLI de Azure, PowerShell o Azure Portal para eliminar el grupo de recursos y sus recursos.

az group delete --name exampleRG

Pasos siguientes

Ahora que ha creado los recursos de la aplicación de funciones en Azure, podrá implementar el código en la aplicación existente mediante el uso de una de las siguientes herramientas: