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:
- Microsoft.Storage/storageAccounts: permite crear una cuenta de Azure Storage como requiere Functions.
- Microsoft.Web/serverfarms: permite crear un plan de hospedaje de consumo sin servidor para la aplicación de funciones.
- Microsoft.Web/sites: permite la creación de una aplicación de funciones.
- microsoft.insights/components: permite la creación de una instancia de Application Insights para la supervisión.
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
Guarde el archivo de Bicep como main.bicep en el equipo local.
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
Use la salida del paso de validación anterior para recuperar el nombre único creado para la aplicación de funciones.
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:
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: