Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se proporcionan instrucciones paso a paso para migrar las aplicaciones de funciones existentes hospedadas en el plan de consumo de Azure Functions para usar en su lugar el plan de consumo flexible.
La forma en que migre la aplicación al plan flex Consumption depende de si la aplicación se ejecuta en Linux o en Windows. Asegúrese de seleccionar el sistema operativo en la parte superior del artículo.
Sugerencia
Azure Functions proporciona comandos de la CLI de Azure en az functionapp flex-migration que automatizan la mayoría de los pasos necesarios para mover su aplicación Linux del plan de Consumo al plan de Consumo Flexible. En este artículo se incluyen estos comandos, que actualmente solo se admiten para las aplicaciones que se ejecutan en Linux.
Al migrar las aplicaciones sin servidor existentes, las funciones pueden aprovechar estas ventajas del plan de consumo flexible:
- Rendimiento mejorado: las aplicaciones se benefician de la escalabilidad mejorada y las instancias listas para siempre para reducir los impactos en el arranque en frío.
- Controles mejorados: ajuste sus funciones con la configuración de escalado y concurrencia por función.
- Redes expandidas: la integración de red virtual y los puntos de conexión privados permiten ejecutar las funciones en redes públicas y privadas.
- Inversión futura en plataformas: como el plan de hospedaje sin servidor superior, las inversiones actuales y futuras se realizan primero en Flex Consumption para la estabilidad de la plataforma, el rendimiento y las características.
El plan de Consumo Flexible es la opción recomendada de hospedaje sin servidor para tus funciones a partir de ahora. Para obtener más información, consulte Ventajas del plan de consumo flexible. Para obtener una comparación detallada entre los planes de hospedaje, consulte Opciones de hospedaje de Azure Functions.
Consideraciones
Antes de iniciar una migración, tenga en cuenta estas consideraciones:
Si ejecuta aplicaciones de funciones de plan de consumo en regiones de Azure Government, revise esta guía ahora para prepararse para la migración hasta que Flex Consumption esté habilitado en Azure Government.
Debido a las diferencias significativas de configuración y comportamiento entre los dos planes, no se puede cambiar una aplicación de plan de consumo existente al plan de consumo flexible. En su lugar, el proceso de migración le lleva a crear una nueva aplicación del plan de Consumo Flexible que sea equivalente a su aplicación actual. Esta nueva aplicación se ejecuta en el mismo grupo de recursos y con las mismas dependencias que la aplicación actual.
Debe priorizar la migración de las aplicaciones que se ejecutan en un plan de consumo en Linux.
En este artículo se da por supuesto que tiene un conocimiento general de los conceptos y arquitecturas de Functions y que está familiarizado con las características de las aplicaciones que se van a migrar. Estos conceptos incluyen desencadenadores y enlaces, autenticación y personalización de red.
En este artículo se muestra cómo evaluar la aplicación actual e implementar la nueva aplicación de plan de consumo flexible mediante Azure Portal o la CLI de Azure. Si la implementación de la aplicación actual se define mediante infraestructura como código (IaC), normalmente puede seguir los mismos pasos. Puede realizar las mismas acciones directamente en sus plantillas de ARM o archivos de Bicep, teniendo en cuenta estas consideraciones específicas para los recursos:
- El plan de consumo flexible introdujo una nueva sección en el
Microsoft.Web/sitestipo de recurso llamadofunctionAppConfig, que contiene muchas de las configuraciones que eran ajustes de aplicación. Para más información, consulte Desuso de planes de Consumo flexible. - Puede encontrar los detalles de configuración de recursos de una aplicación de plan de consumo flexible en Automatización de la implementación de recursos para la aplicación de funciones en Azure Functions.
- Functions mantiene un conjunto de ejemplos de implementación canónicos del plan Consumo flexible para plantillas de ARM, archivos de Bicep y archivos de Terraform.
- El plan de consumo flexible introdujo una nueva sección en el
Prerrequisitos
Acceso a la suscripción de Azure que contiene una o varias aplicaciones de funciones que se van a migrar. La cuenta que se usa para ejecutar comandos de la CLI de Azure debe ser capaz de:
- Cree y administre aplicaciones de funciones y planes de hospedaje de App Service.
- Asignar roles a identidades administradas.
- Cree y administre cuentas de almacenamiento.
- Cree y administre recursos de Application Insights.
- Acceda a todos los recursos dependientes de la aplicación, como Azure Key Vault, Azure Service Bus o Azure Event Hubs.
La asignación a los roles Propietario o Colaborador del grupo de recursos generalmente proporciona permisos suficientes.
CLI de Azure, versión v2.77.0 o una versión posterior. Los scripts se prueban mediante la CLI de Azure en Azure Cloud Shell.
La extensión resource-graph , que puede instalar mediante el
az extension addcomando :az extension add --name resource-graphLa herramienta
jq, que se usa para trabajar con la salida JSON.
Identificación de las aplicaciones potenciales que se van a migrar
Siga estos pasos para crear una lista de las aplicaciones de funciones que necesita migrar. En esta lista, anote sus nombres, grupos de recursos, ubicaciones y pilas en tiempo de ejecución. A continuación, puede repetir los pasos descritos en esta guía para cada aplicación que decida migrar al plan de consumo flexible.
La forma en que se mantiene la información de la aplicación de funciones depende de si la aplicación se ejecuta en Linux o Windows.
Para las aplicaciones de consumo de Linux, use el nuevo az functionapp flex-migration list comando para identificar las aplicaciones que son aptas para la migración:
az functionapp flex-migration list
Este comando examina automáticamente la suscripción y devuelve dos matrices:
- eligible_apps: aplicaciones de consumo de Linux que se pueden migrar a Flex Consumption. Estas aplicaciones son compatibles con Flex Consumption.
- ineligible_apps: aplicaciones que no se pueden migrar, junto con las razones específicas por las que. Las razones de incompatibilidad deben revisarse y abordarse antes de continuar.
La salida incluye el nombre de la aplicación, el grupo de recursos, la ubicación y la pila en tiempo de ejecución de cada aplicación, junto con el estado de elegibilidad y la disponibilidad para la migración.
Use este az graph query comando para enumerar todas las aplicaciones de funciones de tu suscripción que se ejecutan en un Plan de Consumo.
az graph query -q "resources | where subscriptionId == '$(az account show --query id -o tsv)' \
| where type == 'microsoft.web/sites' | where ['kind'] == 'functionapp' | where properties.sku == 'Dynamic' \
| project name, location, resourceGroup" \
--query data --output table
Este comando genera una tabla con el nombre de la aplicación, la ubicación y el grupo de recursos para todas las aplicaciones de consumo que se ejecutan en Windows en la suscripción actual.
Se le pedirá que instale la extensión resource-graph, si aún no está instalada.
Evaluación de la aplicación existente
Antes de migrar al plan de consumo flexible, debe realizar estas comprobaciones para asegurarse de que la aplicación de funciones se pueda migrar correctamente:
Confirmación de la compatibilidad de regiones
Confirme que el plan de Flex Consumption actualmente está soportado en la misma región que la aplicación del plan de consumo que quiere migrar.
Confirmado: Cuando la salida del comando
az functionapp flex-migration listtiene su aplicación en la lista deeligible_apps, el plan de Consumo flexible es compatible en la misma región que usa la aplicación de Consumo para Linux actual. En este caso, puede continuar para Comprobar la compatibilidad de la pila de idiomas.
Acción necesaria: Cuando la salida del comando
az functionapp flex-migration listmuestra su aplicación en la lista deineligible_apps, ve un mensaje de error que indicaThe site '<name>' is not in a region supported in Flex Consumption. Please see the list regions supported in Flex Consumption by running az functionapp list-flexconsumption-locations. En este caso, el plan de Consumo flexible aún no se admite en la región utilizada por su aplicación de Consumo para Linux actual.
Use este az functionapp list-flexconsumption-locations comando para enumerar todas las regiones en las que esté disponible el plan de consumo flexible:
az functionapp list-flexconsumption-locations --query "sort_by(@, &name)[].{Region:name}" -o table
Este comando genera una tabla de regiones de Azure en las que actualmente se admite el plan de consumo flexible.
Si su región no está actualmente admitida y aún así decide migrar su aplicación de función, la aplicación debe ejecutarse en otra región donde se admita el Flex Consumption plan. Sin embargo, ejecutar la aplicación en una región diferente de otros servicios conectados puede introducir una latencia adicional. Asegúrese de que la nueva región puede cumplir los requisitos de rendimiento de la aplicación antes de completar la migración.
Comprobación de la compatibilidad de la pila de idiomas
Los planes de Flex Consumption aún no admiten todos los conjuntos de lenguajes de Functions. Esta tabla indica qué stacks de idiomas se admiten actualmente.
| Configuración de pila | Nombre de pila | Compatible |
|---|---|---|
dotnet-isolated |
.NET (modelo de trabajo aislado) | ✅ Sí |
node |
JavaScript/TypeScript | ✅ Sí |
java |
Java | ✅ Sí |
python |
Pitón | ✅ Sí |
powershell |
PowerShell | ✅ Sí |
dotnet |
.NET (modelo en proceso) | ❌ No |
custom |
Controladores personalizados | ✅ Sí |
Confirmado: Si el comando
az functionapp flex-migration listincluyó su aplicación en la lista deeligible_apps, su aplicación de Consumo para Linux ya está utilizando una pila de lenguaje compatible con el Consumo flexible y puede continuar para Verificar la compatibilidad de la versión de la pila.
Acción necesaria: Si el comando incluyó tu
az functionapp flex-migration listaplicación en laineligible_appslista con un mensaje de error que indicaRuntime '<name>' not supported for function apps on the Flex Consumption plan., tu aplicación Linux Consumption aún no está ejecutando un entorno de ejecución compatible con Flex Consumption.
Si la aplicación de funciones utiliza un entorno de ejecución no compatible:
- En el caso de las aplicaciones de C# que se ejecutan en proceso con el entorno de ejecución (
dotnet), primero debe migrar la aplicación a .NET aislada. Para obtener más información, consulte Migración de aplicaciones de C# desde el modelo en proceso al modelo de trabajo aislado.
Comprobación de la compatibilidad de la versión de la pila
Antes de migrar, debe asegurarse de que se admite la versión de la pila en tiempo de ejecución de su aplicación cuando se ejecuta en un plan de Consumo flexible en la región actual.
Confirmado: Si el comando
az functionapp flex-migration listincluyó su aplicación en la lista deeligible_apps, su aplicación de Consumo para Linux ya usa una versión de pila de lenguaje compatible con Consumo flexible y puede continuar para Verificar el uso de las ranuras de implementación.
Acción necesaria: Si el comando incluyó tu
az functionapp flex-migration listaplicación en laineligible_appslista con un mensaje de error que indicaInvalid version {0} for runtime {1} for function apps on the Flex Consumption plan. Supported versions for runtime {1} are {2}., tu aplicación Linux Consumption aún no está ejecutando un entorno de ejecución compatible con Flex Consumption.
Use este comando az functionapp list-flexconsumption-runtimes para comprobar la compatibilidad del plan de consumo flexible con la versión de la pila de idiomas en una región específica:
az functionapp list-flexconsumption-runtimes --location <REGION> --runtime <LANGUAGE_STACK> --query '[].{version:version}' -o tsv
En este ejemplo, reemplace por <REGION> la región actual y <LANGUAGE_STACK> por uno de estos valores:
| Pila de lenguajes | Importancia |
|---|---|
| C# (modelo de trabajador aislado) | dotnet-isolated |
| Java | java |
| JavaScript | node |
| PowerShell | powershell |
| Pitón | python |
| TypeScript | node |
Este comando muestra todas las versiones del stack de lenguaje especificado que son compatibles con el Flex Consumption plan en su región.
Si la aplicación de funciones utiliza una versión del entorno del lenguaje no compatible, primero debe actualizar el código de la aplicación a una versión compatible antes de migrar al plan de Flex Consumption.
Verificar el uso de espacios de implementación
Las aplicaciones del plan de consumo pueden tener un slot de implementación definido. Para obtener más información, consulte Ranuras de implementación de Azure Functions. Sin embargo, el plan de consumo flexible no admite actualmente ranuras de implementación. Antes de migrar, debe determinar si la aplicación tiene una ranura de implementación. Si es así, debe definir una estrategia para administrar la aplicación sin ranuras de implementación al ejecutarse en un plan de consumo flexible.
Confirmado: Cuando la aplicación actual tiene ranuras de implementación habilitadas, el
az functionapp flex-migration listcomando muestra la aplicación de funciones en laeligible_appslista sin una advertencia, continúe con Verificar el uso de certificados.
Acción necesaria: La aplicación actual tiene ranuras de implementación habilitadas, el
az functionapp flex-migration listcomando muestra la aplicación de funciones en laeligible_appslista, pero agrega una advertencia que indica lo siguiente:The site '<name>' has slots configured. This will not block migration, but please note that slots are not supported in Flex Consumption.
Use este az functionapp deployment slot list comando para enumerar las ranuras de implementación definidas en la aplicación de funciones:
az functionapp deployment slot list --name <APP_NAME> --resource-group <RESOURCE_GROUP> --output table
En este ejemplo, reemplace <RESOURCE_GROUP> y <APP_NAME> por el nombre del grupo de recursos y el nombre de la aplicación, respectivamente. Si el comando devuelve una entrada, la aplicación tiene habilitadas las ranuras de implementación.
Si la aplicación de funciones usa actualmente ranuras de implementación, actualmente no puede reproducir esta funcionalidad en el plan de consumo flexible. Antes de migrar, debe:
- Considere la posibilidad de rediseñar la aplicación para usar aplicaciones de funciones independientes. De este modo, puede desarrollar, probar e implementar el código de funciones en una segunda aplicación no de producción en lugar de usar slots.
- Migre cualquier código o función nueva desde el slot de implementación al slot principal (producción).
Comprobación del uso de certificados
Los certificados de seguridad de la capa de transporte (TLS), conocidos anteriormente como certificados de capa de sockets seguros (SSL), se usan para ayudar a proteger las conexiones a Internet. Los certificados TSL/SSL, que incluyen certificados administrados, certificados bring-your-own (BYOC) o certificados de clave pública, no son compatibles actualmente con el plan de consumo flexible.
Confirmado: Si el comando
az functionapp flex-migration listincluyó su aplicación en la lista deeligible_apps, su aplicación de Consumo para Linux ya no está usando certificados, y puede continuar para Verificar los desencadenadores de almacenamiento Blob.
Acción requerida: Si el comando incluyó tu aplicación en la lista
az functionapp flex-migration listcon un mensaje de error indicandoineligible_appsoThe site '<name>' is using TSL/SSL certificates. TSL/SSL certificates are not supported in Flex Consumption., tu aplicación de consumo de Linux aún no es compatible con Flex Consumption.
Use el az webapp config ssl list comando para enumerar los certificados TSL/SSL disponibles para la aplicación de funciones:
az webapp config ssl list --resource-group <RESOURCE_GROUP>
En este ejemplo, reemplace por <RESOURCE_GROUP> el nombre del grupo de recursos. Si este comando genera resultados, es probable que la aplicación use certificados.
Si la aplicación se basa actualmente en certificados TSL/SSL, no debe continuar con la migración hasta después de agregar compatibilidad con certificados al plan de consumo flexible.
Comprobación de los desencadenadores de Blob Storage
Actualmente, el plan de consumo flexible solo admite desencadenadores basados en eventos para Azure Blob Storage, que se definen con una configuración Source de EventGrid. Los desencadenadores de Blob Storage que usan el sondeo de contenedores y que usan una configuración dSource e LogsAndContainerScan no se admiten en Consumo flexible. Dado que el sondeo de contenedores es el valor predeterminado, debe determinar si alguno de los desencadenadores de Blob Storage usa la configuración de origen predeterminada LogsAndContainerScan. Para más información, consulte Desencadenador en un contenedor de blobs.
Confirmado: Si el comando
az functionapp flex-migration listincluyó su aplicación en la lista deeligible_apps, su aplicación de Consumo para Linux ya no está utilizando desencadenadores de almacenamiento de blobs conEventGridcomo origen. Puede seguir considerando los servicios dependientes.
Acción necesaria: Si el comando
az functionapp flex-migration listincluyó la aplicación en la lista deineligible_appscon un mensaje de error que indicaThe site '<name>' has blob storage trigger(s) that don't use Event Grid as the source: <list> Flex Consumption only supports Event Grid-based blob triggers. Please convert these triggers to use Event Grid or replace them with Event Grid triggers before migration., la aplicación de Consumo para Linux aún no es compatible con el Consumo flexible.
Use este comando [az functionapp function list] para determinar si la aplicación tiene desencadenadores de Blob Storage que no usan Event Grid como origen:
az functionapp function list --name <APP_NAME> --resource-group <RESOURCE_GROUP> \
--query "[?config.bindings[0].type=='blobTrigger' && config.bindings[0].source!='EventGrid'].{Function:name,TriggerType:config.bindings[0].type,Source:config.bindings[0].source}" \
--output table
En este ejemplo, reemplace <RESOURCE_GROUP> y <APP_NAME> por el nombre del grupo de recursos y el nombre de la aplicación, respectivamente. Si el comando devuelve filas, hay al menos un desencadenador mediante el sondeo de contenedor en la aplicación de funciones.
Si su aplicación tiene desencadenadores de Blob Storage que no tienen un origen de Event Grid, debe cambiar a un origen de Event Grid antes de migrar al plan de Consumo Flexible.
Los pasos básicos para cambiar un desencadenador de Blob Storage existente a un origen de Event Grid son:
Agregue o actualice la propiedad
sourceen la definición del desencadenador de Blob Storage aEventGridy vuelva a implementar la aplicación.Constrúyase la URL del punto de conexión en la aplicación de funciones que se utilizará para la suscripción de eventos.
Cree una suscripción de eventos en el contenedor de Blob Storage.
Para obtener más información, consulte Tutorial: Desencadenamiento de Azure Functions en contenedores de blobs mediante una suscripción de eventos.
Consideración de los servicios dependientes
Dado que Azure Functions es un servicio de computación, debe tener en cuenta el efecto de la migración en los datos y los servicios tanto ascendentes como descendentes de su aplicación.
Estrategias de protección de datos
Estas son algunas estrategias para proteger los datos ascendentes y descendentes durante la migración:
- Idempotency: asegúrese de que las funciones pueden procesar de forma segura el mismo mensaje varias veces sin efectos secundarios negativos. Para más información, consulte Diseño de Azure Functions para una entrada idéntica.
- Registro y supervisión: habilite el registro detallado en ambas aplicaciones durante la migración para realizar un seguimiento del procesamiento de mensajes. Para más información, consulte Supervisión de ejecuciones en Azure Functions.
- Control de puntos de control: para los desencadenadores de streaming, como el desencadenador de Event Hubs, implemente los comportamientos de punto de control correctos para realizar un seguimiento de la posición de procesamiento. Para más información, consulte Procesamiento de eventos confiables de Azure Functions.
- Procesamiento paralelo: considere la posibilidad de ejecutar temporalmente ambas aplicaciones en paralelo durante la transición. Asegúrese de supervisar y validar cuidadosamente cómo se procesan los datos desde el servicio ascendente. Para obtener más información, consulte Patrón activo-activo para funciones de desencadenador que no son HTTPS.
- Transición gradual: en el caso de los sistemas de gran volumen, considere la posibilidad de implementar una transición gradual mediante la redirección de partes del tráfico a la nueva aplicación. Puede administrar el enrutamiento de solicitudes ascendentes desde las aplicaciones mediante servicios como Azure API Management o Azure Application Gateway.
Mitigaciones por tipo de desencadenador
Debe planear estrategias de mitigación para proteger los datos de los desencadenantes específicos de funciones que pueda tener en su aplicación.
| Desencadenador | Riesgo para los datos | Estrategia |
|---|---|---|
| Azure Blob Storage | Alto | Cree un contenedor independiente para el desencadenador basado en eventos en la nueva aplicación. Con la nueva aplicación en ejecución, cambie los clientes para que usen el nuevo contenedor. Permitir que el contenedor original se procese completamente antes de detener la aplicación antigua. |
| Azure Cosmos DB | Alto | Cree un contenedor de concesión dedicado específicamente para la nueva aplicación. Establezca este nuevo contenedor de concesión como configuración leaseCollectionName en la nueva aplicación.Requiere que las funciones sean idempotentes o que pueda controlar los resultados del procesamiento duplicado de la fuente de cambios. Establezca la configuración StartFromBeginning en false en la nueva aplicación para evitar volver a procesar toda la fuente. |
| Azure Event Grid | Media | Vuelva a crear la misma suscripción de eventos en la nueva aplicación. Requiere que las funciones sean idempotentes o que puedas controlar los resultados del procesamiento de eventos duplicados. |
| Azure Event Hubs | Media | Cree un nuevo grupo de consumidores para usarlo en la nueva aplicación. Para más información, consulte Estrategias de migración para desencadenadores de Event Grid. |
| Azure Service Bus | Alto | Cree un tema o una cola nuevos para usarlos en la nueva aplicación. Actualice remitentes y clientes para usar el nuevo tema o cola. Después de que el tema original esté vacío, cierre la aplicación antigua. |
| Azure Storage Queue | Alto | Cree una nueva cola que sea utilizada por la nueva aplicación. Actualice los remitentes y clientes para usar la nueva cola. Después de que la cola original esté vacía, cierre la aplicación antigua. |
| HTTP | Bajo | Recuerde cambiar los clientes y otras aplicaciones o servicios para que tengan como destino los nuevos puntos de conexión HTTP después de la migración. |
| Temporizador | Bajo | Durante la migración, asegúrese de desplazar la programación del temporizador entre las dos aplicaciones para evitar ejecuciones simultáneas de ambas aplicaciones. Deshabilite el desencadenador de temporizador en la aplicación anterior después de que la nueva aplicación se ejecute correctamente. |
Inicio de la migración para Linux
El comando az functionapp flex-migration start recopila automáticamente la información de configuración de la aplicación y crea una nueva aplicación flex Consumption con las mismas configuraciones que la aplicación de origen. Use el comando como se muestra en este ejemplo:
az functionapp flex-migration start \
--source-name <SOURCE_APP_NAME> \
--source-resource-group <SOURCE_RESOURCE_GROUP> \
--name <NEW_APP_NAME> \
--resource-group <RESOURCE_GROUP>
En este ejemplo, reemplace estos marcadores de posición por los valores indicados:
| Marcador de posición | Importancia |
|---|---|
<SOURCE_APP_NAME> |
Nombre de la aplicación original. |
<SOURCE_RESOURCE_GROUP> |
Grupo de recursos de la aplicación original. |
<NEW_APP_NAME> |
Nombre de la nueva aplicación. |
<RESOURCE_GROUP> |
El grupo de recursos de la nueva aplicación. |
El az functionapp flex-migration start comando realiza estas tareas básicas:
- Evalúa la aplicación de origen por motivos de compatibilidad con el plan de hospedaje Flex Consumption.
- Crea una aplicación de funciones en el Plan Flex Consumption.
- Migra la mayoría de las configuraciones, como la configuración de la aplicación, las asignaciones de identidad, los montajes de almacenamiento, la configuración de CORS, los dominios personalizados y las restricciones de acceso.
Opciones de comando
El comando de migración admite varias opciones para personalizar la migración:
| Opción | Descripción |
|---|---|
--storage-account |
Especificación de una cuenta de almacenamiento diferente para la nueva aplicación |
--maximum-instance-count |
Establecer el número máximo de instancias para el escalado |
--skip-access-restrictions |
Omitir la migración de restricciones de acceso IP |
--skip-cors |
Omitir la migración de la configuración de CORS |
--skip-hostnames |
Omitir la migración de dominios personalizados |
--skip-managed-identities |
Omitir la migración de configuraciones de identidad administrada |
--skip-storage-mount |
Omitir la migración de configuraciones de montaje de almacenamiento |
Para obtener opciones de comando completas, use az functionapp flex-migration start --help.
Una vez que haya ejecutado
Tareas anteriores a la migración
Antes de continuar con la migración, debe recopilar información clave sobre los recursos y el uso de su aplicación del plan de consumo para ayudar a realizar una transición fluida a la ejecución en el plan de consumo flexible.
Debe completar estas tareas antes de migrar la aplicación para que se ejecute en un plan de consumo flexible:
Recopilación de la configuración de la aplicación
Si tiene previsto usar los mismos orígenes de desencadenador y enlaces y otras configuraciones de la configuración de la aplicación, primero debe tomar nota de la configuración actual de la aplicación en la aplicación plan de consumo existente.
Use este az functionapp config appsettings list comando para devolver un app_settings objeto que contenga la configuración de la aplicación existente como JSON:
app_settings=$(az functionapp config appsettings list --name `<APP_NAME>` --resource-group `<RESOURCE_GROUP>`)
echo $app_settings
En este ejemplo, reemplace <RESOURCE_GROUP> y <APP_NAME> por el nombre del grupo de recursos y el nombre de la aplicación, respectivamente.
Precaución
La configuración de la aplicación suele contener claves y otros secretos compartidos. Almacene siempre la configuración de las aplicaciones de forma segura, idealmente cifrada. Para mejorar la seguridad, debe usar la autenticación de Microsoft Entra ID con identidades administradas en la nueva aplicación de plan de Consumo Flexible en lugar de utilizar secretos compartidos.
Recopilación de configuraciones de aplicación
Hay otras configuraciones de la aplicación que no se encuentran en los ajustes de la aplicación. También debe capturar estas configuraciones de la aplicación existente para que pueda asegurarse de volver a crearlas correctamente en la nueva aplicación.
Revise esta configuración. Si alguno de ellos existe en la aplicación actual, debe decidir si también se deben volver a crear en la nueva aplicación de plan de consumo flexible:
| Configuración | Configuración | Comentario |
|---|---|---|
| Configuración de CORS | cors |
Determina cualquier configuración existente de uso compartido de recursos entre orígenes (CORS), que los clientes podrían necesitar. |
| Dominios personalizados | Si su aplicación está usando actualmente un dominio distinto de *.azurewebsites.net, necesitaría reemplazar esta asignación de dominio personalizada con una asignación a su nueva aplicación. |
|
| Versión de HTTP | http20Enabled |
Determina si la aplicación requiere HTTP 2.0. |
| Solo HTTPS | httpsOnly |
Determina si se requiere TSL/SSL para acceder a la aplicación. |
| Certificados de cliente entrantes | clientCertEnabledclientCertModeclientCertExclusionPaths |
Establece los requisitos de las solicitudes de cliente que usan certificados para la autenticación. |
| Límite máximo de escalabilidad horizontal | WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT |
Establece el límite en instancias escaladas horizontalmente. El valor máximo predeterminado es 200. Este valor se encuentra en la configuración de la aplicación, pero en una aplicación de plan de consumo flexible, se agrega como una configuración de sitio (maximumInstanceCount). |
| Versión mínima de TLS de entrada | minTlsVersion |
Establece una versión mínima de TLS requerida por la aplicación. |
| Cifrado TLS de entrada mínimo | minTlsCipherSuite |
Establece un requisito mínimo de cifrado TLS para la aplicación. |
| Recursos compartidos de Azure Files montados | azureStorageAccounts |
Determina si existen recursos compartidos de archivos montados explícitamente en la aplicación (solo Linux). |
| Credenciales de publicación de autenticación básica de SCM | scm.allow |
Determina si el scm sitio de publicación está habilitado. Aunque no se recomienda para la seguridad, algunos métodos de publicación lo requieren. |
Use este script para obtener las configuraciones de aplicación pertinentes de la aplicación existente:
# Set the app and resource group names
appName=<APP_NAME>
rgName=<RESOURCE_GROUP>
echo "Getting commonly used site settings..."
az functionapp config show --name $appName --resource-group $rgName \
--query "{http20Enabled:http20Enabled, httpsOnly:httpsOnly, minTlsVersion:minTlsVersion, \
minTlsCipherSuite:minTlsCipherSuite, clientCertEnabled:clientCertEnabled, \
clientCertMode:clientCertMode, clientCertExclusionPaths:clientCertExclusionPaths}"
echo "Checking for SCM basic publishing credentials policies..."
az resource show --resource-group $rgName --name scm --namespace Microsoft.Web \
--resource-type basicPublishingCredentialsPolicies --parent sites/$appName --query properties
echo "Checking for the maximum scale-out limit configuration..."
az functionapp config appsettings list --name $appName --resource-group $rgName \
--query "[?name=='WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT'].value" -o tsv
echo "Checking for any file share mount configurations..."
az webapp config storage-account list --name $appName --resource-group $rgName
echo "Checking for any custom domains..."
az functionapp config hostname list --webapp-name $appName --resource-group $rgName --query "[?contains(name, 'azurewebsites.net')==\`false\`]" --output table
echo "Checking for any CORS settings..."
az functionapp cors show --name $appName --resource-group $rgName
En este ejemplo, reemplace <RESOURCE_GROUP> y <APP_NAME> por el nombre del grupo de recursos y el nombre de la aplicación, respectivamente. Si alguna de las configuraciones del sitio o comprobaciones devuelven valores no nulos, tome nota de ellos.
Identificación de identidades administradas y acceso basado en roles
Antes de migrar, debe documentar si la aplicación se basa en la identidad administrada asignada por el sistema o en cualquier identidad administrada asignada por el usuario. También debe determinar los permisos de control de acceso basado en rol (RBAC) concedidos a estas identidades. Debe recrear la identidad administrada asignada por el sistema y las asignaciones de roles en su nueva aplicación. Debería poder reutilizar las identidades administradas asignadas por el usuario en la nueva aplicación.
Este script comprueba la identidad administrada asignada por el sistema y las identidades administradas asignadas por el usuario asociadas a la aplicación:
appName=<APP_NAME>
rgName=<RESOURCE_GROUP>
echo "Checking for a system-assigned managed identity..."
systemUserId=$(az functionapp identity show --name $appName --resource-group $rgName --query "principalId" -o tsv)
if [[ -n "$systemUserId" ]]; then
echo "System-assigned identity principal ID: $systemUserId"
echo "Checking for role assignments..."
az role assignment list --assignee $systemUserId --all
else
echo "No system-assigned identity found."
fi
echo "Checking for user-assigned managed identities..."
userIdentities=$(az functionapp identity show --name $appName --resource-group $rgName --query 'userAssignedIdentities' -o json)
if [[ "$userIdentities" != "{}" && "$userIdentities" != "null" ]]; then
echo "$userIdentities" | jq -c 'to_entries[]' | while read -r identity; do
echo "User-assigned identity name: $(echo "$identity" | jq -r '.key' | sed 's|.*/userAssignedIdentities/||')"
echo "Checking for role assignments..."
az role assignment list --assignee $(echo "$identity" | jq -r '.value.principalId') --all --output json
echo
done
else
echo "No user-assigned identities found."
fi
En este ejemplo, reemplace <RESOURCE_GROUP> y <APP_NAME> por el nombre del grupo de recursos y el nombre de la aplicación, respectivamente. Anote todas las identidades y sus asignaciones de roles.
Identificación de la configuración de autenticación integrada
Antes de migrar a Flex Consumption, debe recopilar información sobre las configuraciones de autenticación integradas. Si desea que la aplicación use los mismos comportamientos de autenticación de cliente, debe volver a crearlos en la nueva aplicación. Para más información, consulte Autenticación y autorización en Azure Functions.
Preste especial atención a los URI de redireccionamiento, las redirecciones externas permitidas y la configuración de tokens para garantizar una transición sin problemas para los usuarios autenticados.
Use este az webapp auth show comando para determinar si la autenticación integrada está configurada en la aplicación de funciones:
az webapp auth show --name <APP_NAME> --resource-group <RESOURCE_GROUP>
En este ejemplo, reemplace <RESOURCE_GROUP> y <APP_NAME> por el nombre del grupo de recursos y el nombre de la aplicación, respectivamente. Revise la salida para determinar si la autenticación está habilitada y qué proveedores de identidades están configurados.
Debe volver a crear esta configuración en la nueva aplicación después de la migración para que los clientes puedan mantener el acceso mediante su proveedor preferido.
Revisión de las restricciones de acceso de entrada
Es posible establecer restricciones de acceso entrantes en las aplicaciones de un plan de consumo. Es posible que quiera mantener estas restricciones en la nueva aplicación. Para cada restricción definida, asegúrese de capturar estas propiedades:
- Direcciones IP o intervalos CIDR
- Valores de prioridad
- Tipo de acción (Permitir/Denegar)
- Nombres de las reglas
Este az functionapp config access-restriction show comando devuelve una lista de las restricciones de acceso basadas en IP existentes:
az functionapp config access-restriction show --name <APP_NAME> --resource-group <RESOURCE_GROUP>
En este ejemplo, reemplace <RESOURCE_GROUP> y <APP_NAME> por el nombre del grupo de recursos y el nombre de la aplicación, respectivamente.
Al ejecutarse en el plan de consumo flexible, puede volver a crear estas restricciones basadas en IP de entrada. Puede proteger aún más la aplicación implementando otras restricciones de red, como la integración de red virtual y los puntos de conexión privados entrantes. Para obtener más información, consulte Integración de la red virtual.
Obtención del paquete de implementación de código
Para poder volver a implementar la aplicación, debe tener los archivos de origen del proyecto o el paquete de implementación. Idealmente, los archivos del proyecto se mantienen en el control de código fuente para que pueda volver a implementar fácilmente el código de función en la nueva aplicación. Si tiene los archivos de código fuente, puede omitir esta sección y continuar con Capture performance benchmarks (opcional) (Captura de pruebas comparativas de rendimiento [opcional]).
Si ya no tiene acceso a los archivos de origen del proyecto, puede descargar el paquete de implementación actual de la aplicación plan de consumo existente en Azure. La ubicación del paquete de implementación depende de si se ejecuta en Linux o Windows.
Las aplicaciones del plan de consumo en Linux mantienen el archivo de paquete ZIP de implementación en una de estas ubicaciones:
Un contenedor de Azure Blob Storage denominado
scm-releasesen la cuenta de almacenamiento de host predeterminada (AzureWebJobsStorage). Este contenedor es el origen de implementación predeterminado para una aplicación de plan de consumo en Linux.Si la aplicación tiene una configuración de
WEBSITE_RUN_FROM_PACKAGEque es una dirección URL, el paquete se encuentra en una ubicación accesible externamente que se mantiene. Un paquete externo debe hospedarse en un contenedor de Blob Storage con acceso restringido. Para obtener más información, consulte Dirección URL del paquete externo.
Sugerencia
Si su cuenta de almacenamiento está restringida únicamente al acceso mediante identidad administrada, es posible que deba conceder a su cuenta de Azure acceso de lectura al contenedor de almacenamiento agregándola al rol Storage Blob Data Reader.
El paquete de implementación se comprime con el squashfs formato . Para ver lo que hay dentro del paquete, debe usar herramientas que puedan descomprimir este formato.
Siga estos pasos para descargar el paquete de implementación de la aplicación actual:
Use este
az functionapp config appsettings listcomando para obtener la configuración de laWEBSITE_RUN_FROM_PACKAGEaplicación, si está presente:az functionapp config appsettings list --name <APP_NAME> --resource-group <RESOURCE_GROUP> \ --query "[?name=='WEBSITE_RUN_FROM_PACKAGE'].value" -o tsvEn este ejemplo, reemplace
<RESOURCE_GROUP>y<APP_NAME>por el nombre del grupo de recursos y el nombre de la aplicación, respectivamente. Si este comando devuelve una dirección URL, puede descargar el archivo del paquete de implementación desde esa ubicación remota y pasar a la sección siguiente.Si el
WEBSITE_RUN_FROM_PACKAGEvalor es1o nada, use este script para obtener el paquete de implementación de la aplicación existente:appName=<APP_NAME> rgName=<RESOURCE_GROUP> echo "Getting the storage account connection string from app settings..." storageConnection=$(az functionapp config appsettings list --name $appName --resource-group $rgName \ --query "[?name=='AzureWebJobsStorage'].value" -o tsv) echo "Getting the package name..." packageName=$(az storage blob list --connection-string $storageConnection --container-name scm-releases \ --query "[0].name" -o tsv) echo "Download the package? $packageName? (Y to proceed, any other key to exit)" read -r answer if [[ "$answer" == "Y" || "$answer" == "y" ]]; then echo "Proceeding with download..." az storage blob download --connection-string $storageConnection --container-name scm-releases \ --name $packageName --file $packageName else echo "Exiting script." exit 0 fiDe nuevo, reemplace
<RESOURCE_GROUP>y<APP_NAME>por el nombre del grupo de recursos y el nombre de la aplicación. El paquete .zip archivo se descarga en el directorio desde el que ejecutó el comando.
La ubicación de los archivos de origen del proyecto depende de la configuración de la WEBSITE_RUN_FROM_PACKAGE aplicación como se indica a continuación:
WEBSITE_RUN_FROM_PACKAGE valor |
Ubicación del archivo de origen |
|---|---|
1 |
Los archivos se encuentran en un paquete ZIP que se almacena en el recurso compartido de archivos de Azure de la cuenta de almacenamiento definido por la configuración WEBSITE_CONTENTAZUREFILECONNECTIONSTRING. El nombre del recurso compartido de archivos se define mediante la configuración WEBSITE_CONTENTSHARE. |
| Dirección URL de un punto de conexión | Los archivos se encuentran en un paquete ZIP en una ubicación accesible externamente que se mantiene. Un paquete externo debe hospedarse en un contenedor de Blob Storage con acceso restringido. Para obtener más información, consulte Dirección URL del paquete externo. |
Use este
az functionapp config appsettings listcomando para obtener la configuración de laWEBSITE_RUN_FROM_PACKAGEaplicación, si está presente:az functionapp config appsettings list --name <APP_NAME> --resource-group <RESOURCE_GROUP> \ --query "[?name=='WEBSITE_RUN_FROM_PACKAGE'].value" -o tsvEn este ejemplo, reemplace
<RESOURCE_GROUP>y<APP_NAME>por el nombre del grupo de recursos y el nombre de la aplicación, respectivamente. Si este comando devuelve una dirección URL, puede descargar el archivo del paquete de implementación desde esa ubicación remota y pasar a la sección siguiente.Si el
WEBSITE_RUN_FROM_PACKAGEvalor es1o nada, use este script para obtener el paquete de implementación de la aplicación existente:appName=<APP_NAME> rgName=<RESOURCE_GROUP> echo "Getting the storage account connection string and file share from app settings..." json=$(az functionapp config appsettings list --name $appName --resource-group $rgName \ --query "[?name=='WEBSITE_CONTENTAZUREFILECONNECTIONSTRING' || name=='WEBSITE_CONTENTSHARE'].value" -o json) storageConnection=$(echo "$json" | jq -r '.[0]') fileShare=$(echo "$json" | jq -r '.[1]') echo "Getting the package name..." packageName=$(az storage file list --share-name $fileShare --connection-string $storageConnection \ --path "data/SitePackages" --query "[?ends_with(name, '.zip')] | sort_by(@, &properties.lastModified)[-1].name" \ -o tsv) echo "Download the package? $packageName? (Y to proceed, any other key to exit)" read -r answer if [[ "$answer" == "Y" || "$answer" == "y" ]]; then echo "Proceeding with download..." az storage file download --connection-string $storageConnection --share-name $fileShare \ --path "data/SitePackages/$packageName" else echo "Exiting script." exit 0 fiDe nuevo, reemplace
<RESOURCE_GROUP>y<APP_NAME>por el nombre del grupo de recursos y el nombre de la aplicación. El paquete .zip archivo se descarga en el directorio desde el que ejecutó el comando.
Captura de pruebas comparativas de rendimiento (opcional)
Si planea validar la mejora del rendimiento en la aplicación en función de la migración al plan de consumo flexible, debe capturar (opcionalmente) las pruebas comparativas de rendimiento del plan actual. A continuación, puedes compararlos con los mismos puntos de referencia de la aplicación que se ejecutan en un plan de consumo flexible para la comparación.
Sugerencia
Compare siempre el rendimiento en condiciones similares, como la hora del día, el día de la semana y la carga del cliente. Intente ejecutar las dos pruebas comparativas lo más cerca posible.
Estos son algunos puntos de referencia que se deben tener en cuenta para las pruebas de rendimiento estructuradas:
| Prueba comparativa sugerida | Comentario |
|---|---|
| Arranque en frío | Mida el tiempo de la primera solicitud a la primera respuesta después de un período de inactividad. |
| Rendimiento | Mida el número máximo de solicitudes por segundo mediante herramientas de pruebas de carga para determinar cómo la aplicación controla las solicitudes simultáneas. |
| Latencia | Realice un seguimiento de los tiempos de respuesta de P50, P95 y P99 bajo varias condiciones de carga. Puede supervisar estas métricas en Application Insights. |
Puede usar esta consulta de Kusto para revisar los tiempos de respuesta de latencia sugeridos en Application Insights:
requests
| where timestamp > ago(1d)
| summarize percentiles(duration, 50, 95, 99) by bin(timestamp, 1h)
| render timechart
Pasos de migración
La migración de las funciones desde una aplicación plan de consumo a una aplicación de plan de consumo flexible sigue estos pasos principales:
Comprobación de la aplicación Flex Consumption creada y configurada
Después de ejecutar el comando az functionapp flex-migration start , debe comprobar que la nueva aplicación Flex Consumption se creó correctamente y se configuró correctamente. Estos son algunos pasos para validar los resultados de la migración:
Compruebe que la nueva aplicación existe y que se está ejecutando:
az functionapp show --name <NEW_APP_NAME> --resource-group <RESOURCE_GROUP> \ --query "{name:name, kind:kind, sku:properties.sku}" --output tableRevise la configuración de la aplicación migrada:
az functionapp config appsettings list --name <NEW_APP_NAME> --resource-group <RESOURCE_GROUP> \ --output tableCompare esta configuración con la aplicación de origen para asegurarse de que se transfirieron las configuraciones críticas.
Compruebe la configuración de identidad administrada:
az functionapp identity show --name <NEW_APP_NAME> --resource-group <RESOURCE_GROUP>Compruebe que se han migrado los dominios personalizados:
az functionapp config hostname list --webapp-name <NEW_APP_NAME> --resource-group <RESOURCE_GROUP> \ --output table
Revisión del resumen de la migración
El comando de migración automatizada debe haber transferido la mayoría de las configuraciones. Sin embargo, debe comprobar manualmente que estos elementos no se migraron y es posible que deban configurarse manualmente:
- Certificados: todavía no se admiten certificados TSL/SSL en Flex Consumption
- Ranuras de implementación: no compatibles con Flex Consumption
- Configuración de autenticación integrada: deben volver a configurarse manualmente.
- Configuración de CORS: puede necesitar comprobación manual en función de la configuración.
Si falta alguna configuración crítica o es incorrecta, puede configurarlas manualmente siguiendo los pasos descritos en las secciones del proceso de migración de Windows de este artículo.
- Revisión final del plan
- Creación de una aplicación en el plan de consumo flexible
- Aplicación de la configuración de la aplicación migrada en la nueva aplicación
- Aplicación de otras configuraciones de aplicaciones
- Configuración de la escala y la simultaneidad
- Configurar los dominios personalizados y el acceso a CORS
- Configuración de identidades administradas y asignación de roles
- Configurar restricciones de acceso de red
- Habilitación de la supervisión
- Configuración de la autenticación integrada
- Despliega el código de tu aplicación en la nueva aplicación de consumo flexible
Revisión final del plan
Antes de continuar con el proceso de migración, dedique un momento a realizar estos últimos pasos preparatorios:
Revise toda la información recopilada: revise todas las notas, los detalles de la configuración y los ajustes de la aplicación que documentó en las secciones de evaluación y premigración anteriores. Si algo no está claro, vuelva a ejecutar los comandos de la CLI de Azure o obtenga la información del portal.
Definir el plan de migración: en función de los resultados, cree una lista de comprobación para la migración que resalte:
- Cualquier configuración que necesite atención especial
- Desencadenadores y enlaces u otras dependencias que podrían verse afectados durante la migración
- Estrategia de pruebas para la validación posterior a la migración
- Plan de reversión si hay problemas inesperados
Planeamiento del tiempo de inactividad: tenga en cuenta cuándo detener la aplicación de funciones original para evitar la pérdida de datos y el procesamiento duplicado de eventos, y cómo podría afectar a los usuarios o a los sistemas de bajada. En algunos casos, es posible que tenga que deshabilitar funciones específicas antes de detener toda la aplicación.
Una revisión final cuidadosa ayuda a garantizar un proceso de migración más suave y minimiza el riesgo de pasar por alto configuraciones importantes.
Creación de una aplicación en el plan de consumo flexible
Hay varias maneras de crear una aplicación de función en el plan de consumo flexible junto con otros recursos de Azure necesarios:
| Create Option (Opción de creación) | Artículos de referencia |
|---|---|
| CLI de Azure | Creación de una aplicación de consumo flexible |
| Portal de Azure | Creación de una aplicación de funciones en Azure Portal |
| Infraestructura como código |
Plantilla de ARM azd Bíceps Terraform |
| Visual Studio Code | Implementación de Visual Studio Code |
| Visual Studio | Implementación de Visual Studio |
Sugerencia
Cuando sea posible, debe usar microsoft Entra ID para la autenticación en lugar de las cadenas de conexión, que contienen claves compartidas. El uso de identidades administradas es un procedimiento recomendado que mejora la seguridad mediante la eliminación de la necesidad de almacenar secretos compartidos directamente en la configuración de la aplicación. Si la aplicación original usó cadenas de conexión, el plan de consumo flexible está diseñado para admitir identidades administradas. La mayoría de estos vínculos muestran cómo habilitar identidades administradas en la aplicación de funciones.
Aplicación de la configuración de la aplicación migrada en la nueva aplicación
Antes de implementar su código, debe configurar la nueva aplicación con las configuraciones correspondientes del plan de Consumo Flex de su aplicación de funciones original.
Importante
No todas las configuraciones de la aplicación plan de consumo se admiten al ejecutarse en un plan de consumo flexible. Para más información, consulte Desuso de planes de Consumo flexible.
Ejecute este script que realice estas tareas:
- Obtiene la configuración de la aplicación anterior, omitiendo la configuración que no se aplica en un plan de consumo flexible o que ya existe en la nueva aplicación.
- Escribe la configuración recopilada localmente en un archivo temporal.
- Aplica la configuración del archivo a la nueva aplicación.
- Elimina el archivo temporal.
sourceAppName=<SOURCE_APP_NAME>
destAppName=<DESTINATION_APP_NAME>
rgName=<RESOURCE_GROUP>
echo "Getting app settings from the old app..."
app_settings=$(az functionapp config appsettings list --name $sourceAppName --resource-group $rgName)
# Filter out settings that don't apply to Flex Consumption apps or that will already have been created
filtered_settings=$(echo "$app_settings" | jq 'map(select(
(.name | ascii_downcase) != "website_use_placeholder_dotnetisolated" and
(.name | ascii_downcase | startswith("azurewebjobsstorage") | not) and
(.name | ascii_downcase) != "website_mount_enabled" and
(.name | ascii_downcase) != "enable_oryx_build" and
(.name | ascii_downcase) != "functions_extension_version" and
(.name | ascii_downcase) != "functions_worker_runtime" and
(.name | ascii_downcase) != "functions_worker_runtime_version" and
(.name | ascii_downcase) != "functions_max_http_concurrency" and
(.name | ascii_downcase) != "functions_worker_process_count" and
(.name | ascii_downcase) != "functions_worker_dynamic_concurrency_enabled" and
(.name | ascii_downcase) != "scm_do_build_during_deployment" and
(.name | ascii_downcase) != "website_contentazurefileconnectionstring" and
(.name | ascii_downcase) != "website_contentovervnet" and
(.name | ascii_downcase) != "website_contentshare" and
(.name | ascii_downcase) != "website_dns_server" and
(.name | ascii_downcase) != "website_max_dynamic_application_scale_out" and
(.name | ascii_downcase) != "website_node_default_version" and
(.name | ascii_downcase) != "website_run_from_package" and
(.name | ascii_downcase) != "website_skip_contentshare_validation" and
(.name | ascii_downcase) != "website_vnet_route_all" and
(.name | ascii_downcase) != "applicationinsights_connection_string"
))')
echo "Settings to migrate..."
echo "$filtered_settings"
echo "Writing settings to a local a local file (app_settings_filtered.json)..."
echo "$filtered_settings" > app_settings_filtered.json
echo "Applying settings to the new app..."
output=$(az functionapp config appsettings set --name $destAppName --resource-group $rgName --settings @app_settings_filtered.json)
echo "Deleting the temporary settings file..."
rm -rf app_settings_filtered.json
echo "Current app settings in the new app..."
az functionapp config appsettings list --name $destAppName --resource-group $rgName
En este ejemplo, reemplace <RESOURCE_GROUP>, <SOURCE_APP_NAME>y <DEST_APP_NAME> por el nombre del grupo de recursos y los nombres antiguos de una aplicación nueva, respectivamente. Este script supone que ambas aplicaciones están en el mismo grupo de recursos.
Aplicación de otras configuraciones de aplicaciones
Busque la lista de otras configuraciones de aplicación de la aplicación antigua que recopiló durante la migración previa y también establézcalas en la nueva aplicación.
En este script, establezca el valor para cualquier parámetro de configuración en la aplicación original y comente los comandos de cualquier configuración no establecida (null):
appName=<APP_NAME>
rgName=<RESOURCE_GROUP>
http20Setting=<YOUR_HTTP_20_SETTING>
minTlsVersion=<YOUR_TLS_VERSION>
minTlsCipher=<YOUR_TLS_CIPHER>
httpsOnly=<YOUR_HTTPS_ONLY_SETTING>
certEnabled=<CLIENT_CERT_ENABLED>
certMode=<YOUR_CLIENT_CERT_MODE>
certExPaths=<CERT_EXCLUSION_PATHS>
scmAllowBasicAuth=<ALLOW_SCM_BASIC_AUTH>
# Apply HTTP version and minimum TLS settings
az functionapp config set --name $appName --resource-group $rgName --http20-enabled $http20Setting
az functionapp config set --name $appName --resource-group $rgName --min-tls-version $minTlsVersion
# Apply the HTTPS-only setting
az functionapp update --name $appName --resource-group $rgName --set HttpsOnly=$httpsOnly
# Apply incoming client cert settings
az functionapp update --name $appName --resource-group $rgName --set clientCertEnabled=$certEnabled
az functionapp update --name $appName --resource-group $rgName --set clientCertMode=$certMode
az functionapp update --name $appName --resource-group $rgName --set clientCertExclusionPaths=$certExPaths
# Apply the TLS cipher suite setting
az functionapp update --name $appName --resource-group $rgName --set minTlsCipherSuite=$minTlsCipher
# Apply the allow scm basic auth configuration
az resource update --resource-group $rgName --name scm --namespace Microsoft.Web --resource-type basicPublishingCredentialsPolicies \
--parent sites/$appName --set properties.allow=$scmAllowBasicAuth
En este ejemplo, reemplace <RESOURCE_GROUP> y <APP_NAME> por los nombres de aplicación de función y del grupo de recursos, respectivamente. Además, reemplace los marcadores de posición en las definiciones de variables de cualquier configuración existente que quiera volver a crear en la nueva aplicación, y convierta en comentario cualquier configuración null.
Configuración de la escala y la simultaneidad
El plan de consumo flexible implementa el escalado por función, donde cada función dentro de la aplicación puede escalar de forma independiente en función de su carga de trabajo. El escalado también está más estrictamente relacionado con la configuración de simultaneidad, que se usa para tomar decisiones de escalado basadas en las ejecuciones simultáneas actuales. Para obtener más información, consulte los temas Escalado por función y Simultaneidad en el artículo sobre el Plan de consumo flexible.
Considere primero la configuración de simultaneidad si desea que la nueva aplicación se escale de forma similar a la aplicación original. Establecer valores de simultaneidad más altos puede dar lugar a que se creen menos instancias para controlar la misma carga.
Si tenía un límite de escalado horizontal personalizado establecido en la aplicación original, también puede aplicarlo a la nueva aplicación. De lo contrario, puede ir directamente a la sección siguiente.
El número máximo de instancias predeterminado es 100 y debe establecerse en un valor de 40 o superior.
Use este comando az functionapp scale config set para establecer el escalado horizontal máximo.
az functionapp scale config set --name <APP_NAME> --resource-group <RESOURCE_GROUP> \
--maximum-instance-count <MAX_SCALE_SETTING>
En este ejemplo, reemplace <RESOURCE_GROUP> y <APP_NAME> por los nombres de aplicación de función y del grupo de recursos, respectivamente. Reemplace <MAX_SCALE_SETTING> con el valor máximo de escala que está estableciendo.
Configurar los dominios personalizados y el acceso a CORS
Si la aplicación original tenía dominios personalizados enlazados o cualquier configuración de CORS definida, vuelva a crearlos en la nueva aplicación. Para más información sobre los dominios personalizados, consulte Configuración de un dominio personalizado existente en Azure App Service.
Use este
az functionapp config hostname addcomando para volver a enlazar las asignaciones de dominio personalizadas a la aplicación:az functionapp config hostname add --name <APP_NAME> --resource-group <RESOURCE_GROUP> \ --hostname <CUSTOM_DOMAIN>En este ejemplo, reemplace
<RESOURCE_GROUP>y<APP_NAME>por los nombres de aplicación de función y del grupo de recursos, respectivamente. Reemplace por<CUSTOM_DOMAIN>el nombre de dominio personalizado.Use este
az functionapp cors addcomando para reemplazar cualquier configuración de CORS:az functionapp cors add --name <APP_NAME> --resource-group <RESOURCE_GROUP> \ --allowed-origins <ALLOWED_ORIGIN_1> <ALLOWED_ORIGIN_2> <ALLOWED_ORIGIN_N>En este ejemplo, reemplace
<RESOURCE_GROUP>y<APP_NAME>por los nombres de aplicación de función y del grupo de recursos, respectivamente. Reemplace<ALLOWED_ORIGIN_*>por los orígenes permitidos.
Configuración de identidades administradas y asignación de roles
La forma en que configure identidades administradas en la nueva aplicación depende del tipo de identidad administrada:
| Tipo de identidad administrada | Creación de la identidad | Asignaciones de roles |
|---|---|---|
| Asignada por el usuario | Opcional | Puede seguir usando las mismas identidades administradas asignadas por el usuario con la nueva aplicación. Debe reasignar estas identidades a la aplicación Flex Consumption y comprobar que todavía tienen las asignaciones de roles correctas en los servicios remotos. Si decide crear nuevas identidades para la nueva aplicación, debe asignar los mismos roles que las identidades existentes. |
| Asignado por el sistema | Sí | Dado que cada aplicación de funciones tiene su propia identidad administrada asignada por el sistema, debe habilitar la identidad administrada asignada por el sistema en la nueva aplicación y reasignar los mismos roles que en la aplicación original. |
Volver a crear correctamente las asignaciones de roles es clave para garantizar que la aplicación de funciones tenga el mismo acceso a los recursos de Azure después de la migración.
Sugerencia
Si la aplicación original usó cadenas de conexión u otros secretos compartidos para la autenticación, esta es una gran oportunidad para mejorar la seguridad de la aplicación cambiando al uso de la autenticación de Id. de Microsoft Entra con identidades administradas. Para más información, consulte Tutorial: Creación de una aplicación de funciones que se conecta a servicios de Azure mediante identidades en lugar de secretos.
Use este
az functionapp identity assigncomando para habilitar la identidad administrada asignada por el sistema en la nueva aplicación:az functionapp identity assign --name <APP_NAME> --resource-group <RESOURCE_GROUP>En este ejemplo, reemplace
<RESOURCE_GROUP>y<APP_NAME>por los nombres de aplicación de función y del grupo de recursos, respectivamente.Use este script para obtener el ID principal de la identidad asignada por el sistema y agregarlo a los roles requeridos.
# Get the principal ID of the system identity principalId=$(az functionapp identity show --name <APP_NAME> --resource-group <RESOURCE_GROUP> \ --query principalId -o tsv) # Assign a role in a specific resource (scope) to the system identity az role assignment create --assignee $principalId --role "<ROLE_NAME>" --scope "<RESOURCE_ID>"En este ejemplo, reemplace
<RESOURCE_GROUP>y<APP_NAME>por los nombres de aplicación de función y del grupo de recursos, respectivamente. Reemplace<ROLE_NAME>y<RESOURCE_ID>por el nombre del rol y el recurso específico que capturó de la aplicación original.Repita los comandos anteriores para cada rol requerido por la nueva aplicación.
Configurar restricciones de acceso de red
Si la aplicación original tenía alguna restricción de acceso entrante basada en IP, puede volver a crear cualquiera de las mismas reglas de acceso entrante que quiera mantener en la nueva aplicación.
Sugerencia
El plan flex Consumption es totalmente compatible con la integración de red virtual. Por este motivo, también tiene la opción de usar puntos de conexión privados entrantes después de la migración. Para obtener más información, consulte Puntos de conexión privados.
Use este az functionapp config access-restriction add comando para cada restricción de acceso IP que quiera replicar en la nueva aplicación:
az functionapp config access-restriction add --name <APP_NAME> --resource-group <RESOURCE_GROUP> \
--rule-name <RULE_NAME> --action Deny --ip-address <IP_ADDRESS> --priority <PRIORITY>
En este ejemplo, reemplace estos marcadores de posición por los valores de la aplicación original:
| Marcador de posición | Importancia |
|---|---|
<APP_NAME> |
Nombre de la aplicación de funciones. |
<RESOURCE_GROUP> |
El grupo de recursos. |
<RULE_NAME> |
Nombre amigable de la regla de IP. |
<Priority> |
Prioridad para la exclusión. |
<IP_Address> |
Dirección IP que se va a excluir. |
Ejecute este comando para cada restricción de IP documentada de la aplicación original.
Habilitación de la supervisión
Antes de iniciar la nueva aplicación en el plan de consumo flexible, asegúrese de que Application Insights está habilitado. Tener Configurado Application Insights le ayuda a solucionar cualquier problema que pueda producirse durante la implementación y el inicio del código.
Implemente una estrategia de supervisión completa que abarque las métricas, los registros y los costos de la aplicación. Mediante este tipo de estrategia, puede validar el éxito de la migración, identificar cualquier problema rápidamente y optimizar el rendimiento y el costo de la nueva aplicación.
Si tiene previsto comparar esta nueva aplicación con la aplicación actual, asegúrese de que el esquema también recopila los puntos de referencia necesarios para la comparación. Para obtener más información, consulte Configuración de la supervisión.
Configurar la autenticación integrada
Si la aplicación original usó la autenticación de cliente integrada (a veces llamada Easy Auth), debe volver a crearla en la nueva aplicación. Si planea reutilizar el mismo registro de cliente, asegúrese de establecer los puntos de conexión autenticados de la nueva aplicación en el proveedor de autenticación.
En función de la información recopilada anteriormente, use el az webapp auth update comando para volver a crear cada registro de autenticación integrado requerido por la aplicación.
Despliegue del código de su aplicación en la nueva aplicación Flex Consumption
Con tu nueva aplicación de plan de consumo flexible completamente configurada basada en la configuración de la aplicación original, es el momento de desplegar el código a los recursos de la nueva aplicación en Azure.
Precaución
Después de una implementación correcta, los desencadenadores de la nueva aplicación comienzan inmediatamente a procesar datos de los servicios conectados. Para minimizar los datos duplicados y evitar la pérdida de datos al iniciar la nueva aplicación y apagar la aplicación original, debe revisar las estrategias que definió en mitigaciones por tipo de desencadenador.
Functions proporciona varias maneras de implementar el código, ya sea desde el proyecto de código o como un paquete de implementación listo para ejecutarse.
Sugerencia
Si el código del proyecto se mantiene en un repositorio de código fuente, ahora es el momento perfecto para configurar una canalización de implementación continua. La implementación continua le permite implementar automáticamente las actualizaciones de aplicaciones en función de los cambios en un repositorio conectado.
Debe actualizar los flujos de trabajo de implementación existentes para implementar el código fuente en la nueva aplicación:
- Compilación e implementación mediante Azure Pipelines
- Compilación e implementación mediante Acciones de GitHub
También puede crear un nuevo flujo de trabajo de implementación continua para la nueva aplicación. Para más información, consulte Implementación continua para Azure Functions.
Pasos posteriores a la migración
Después de una migración correcta, debe realizar estas tareas de seguimiento:
Comprobación de la funcionalidad básica
Compruebe que la nueva aplicación se está ejecutando en un plan de consumo flexible:
Use este
az functionapp showcomando para ver los detalles sobre el plan de hospedaje.az functionapp show --name <APP_NAME> --resource-group <RESOURCE_GROUP> --query "serverFarmId"En este ejemplo, reemplace
<RESOURCE_GROUP>y<APP_NAME>por los nombres de aplicación de función y del grupo de recursos, respectivamente.Use un cliente HTTP para llamar al menos a un punto de conexión de desencadenador HTTP en la nueva aplicación para asegurarse de que responde según lo previsto.
Captura de pruebas comparativas de rendimiento
Con la nueva aplicación en ejecución, puede ejecutar las mismas pruebas comparativas de rendimiento que recopiló de la aplicación original, como:
| Prueba comparativa sugerida | Comentario |
|---|---|
| Arranque en frío | Mida el tiempo de la primera solicitud a la primera respuesta después de un período de inactividad. |
| Rendimiento | Mida el número máximo de solicitudes por segundo mediante herramientas de pruebas de carga para determinar cómo la aplicación controla las solicitudes simultáneas. |
| Latencia | Realice un seguimiento de los tiempos de respuesta de P50, P95 y P99 bajo varias condiciones de carga. Puede supervisar estas métricas en Application Insights. |
Puede usar esta consulta de Kusto para revisar los tiempos de respuesta de latencia sugeridos en Application Insights:
requests
| where timestamp > ago(1d)
| summarize percentiles(duration, 50, 95, 99) by bin(timestamp, 1h)
| render timechart
Nota:
Las métricas del plan de consumo flexible difieren de las métricas del plan de consumo. Al comparar el rendimiento antes y después de la migración, tenga en cuenta que debe usar diferentes métricas para realizar un seguimiento de características de rendimiento similares. Para obtener más información, consulte Configuración de la supervisión.
Creación de paneles personalizados
Las métricas de Azure Monitor y Application Insights le permiten crear paneles en Azure Portal que muestran gráficos tanto de métricas de plataforma como de registros y análisis en tiempo de ejecución.
Considere la posibilidad de configurar paneles y alertas en las métricas clave de Azure Portal. Para más información, consulte Supervisión de la aplicación en Azure.
Refinar la configuración del plan
Las mejoras de rendimiento reales y las implicaciones de costos de la migración pueden variar en función de las cargas de trabajo y la configuración específicas de la aplicación. El plan flex Consumption proporciona varias opciones de configuración que puedes ajustar para refinar el rendimiento de la aplicación. Es posible que desee realizar ajustes para que coincidan más estrechamente con el comportamiento de la aplicación original o equilibrar el costo frente al rendimiento. Para obtener más información, consulta Ajustar la aplicación en el artículo Consumo flexible.
Quitar la aplicación original (opcional)
Después de probar exhaustivamente la nueva aplicación de función Flex Consumption y validar que todo funciona según lo previsto, es posible que quiera limpiar los recursos para evitar costos innecesarios. Aunque es probable que los desencadenadores de la aplicación original ya estén deshabilitados, es posible que espere unos días o incluso semanas antes de quitar completamente la aplicación original. Este retraso, que depende de los patrones de uso de la aplicación, se asegura de que todos los escenarios, incluidos los poco frecuentes, se prueben correctamente. Solo después de que esté satisfecho con los resultados de la migración, debe continuar con la eliminación de la aplicación de funciones original.
Importante
Esta acción elimina la aplicación de funciones original. El plan de consumo permanece intacto si otras aplicaciones la usan. Antes de continuar, asegúrese de haber migrado correctamente todas las funcionalidades a la nueva aplicación Flex Consumption, compruebe que no se dirige ningún tráfico a la aplicación original y realice una copia de seguridad de los registros, la configuración o los datos pertinentes que puedan ser necesarios para referencia.
Use el az functionapp delete comando para eliminar la aplicación de funciones original:
az functionapp delete --name <ORIGINAL_APP_NAME> --resource-group <RESOURCE_GROUP>
En este ejemplo, reemplace <RESOURCE_GROUP> y <APP_NAME> por los nombres de aplicación de función y del grupo de recursos, respectivamente.
Estrategias de solución de problemas y recuperación
A pesar de la planeación cuidadosa, pueden producirse problemas de migración. A continuación se muestra cómo controlar posibles problemas durante la migración:
| Cuestión | Solución |
|---|---|
| Problemas de rendimiento de arranque en frío | • Revisar la configuración de simultaneidad • Comprobar si faltan dependencias |
| Faltan enlaces | • Verificar paquetes de extensiones • Actualizar configuraciones de enlace |
| Errores de permisos | • Comprobar las asignaciones de identidad y los permisos de rol |
| Problemas de conectividad de red | • Validar las restricciones de acceso y la configuración de red |
| Falta información sobre la aplicación | • Volver a crear la conexión de Application Insights |
| No se puede iniciar la aplicación | Consulte Pasos generales de solución de problemas. |
| Los desencadenadores no procesan eventos | Consulte Pasos generales de solución de problemas. |
Si experimenta problemas para migrar una aplicación de producción, quizá quiera revertir la migración a la aplicación original mientras resuelve el problema.
Pasos generales para solucionar problemas
Siga estos pasos para los casos en los que la nueva aplicación no se inicia o los desencadenadores de función no procesan eventos:
En la página de la nueva aplicación de Azure Portal, seleccione Diagnosticar y resolver problemas en el panel izquierdo de la página de la aplicación. Seleccione Disponibilidad y rendimiento y revise el detector de errores de informe o la aplicación de funciones. Para más información, consulte Introducción al diagnóstico de Azure Functions.
En la página de la aplicación, seleccione Supervisión>Application Insights>Ver datos de Application Insights y luego seleccione Investigar>fallos y compruebe si hay eventos de fallo.
Seleccione Registros de supervisión> y ejecute esta consulta de Kusto para comprobar si hay errores en estas tablas:
traces | where severityLevel == 3 | where cloud_RoleName == "<APP_NAME>" | where timestamp > ago(1d) | project timestamp, message, operation_Name, customDimensions | order by timestamp descEn estas consultas, reemplace por
<APP_NAME>el nombre de la nueva aplicación. Estas consultas comprueban si hay errores en el último día (where timestamp > ago(1d)).De nuevo en la página de la aplicación, seleccione Configuración Variables> deentorno y compruebe que todas las configuraciones críticas de la aplicación se han transferido correctamente. Busque cualquier configuración en desuso que pueda haber sido migrada incorrectamente o cualquier error tipográfico o cadenas de conexión incorrectas. Compruebe la conexión de almacenamiento de host predeterminada.
Seleccione Configuración>Identidad y compruebe que existen las identidades esperadas y que se han asignado a los roles correctos.
En su código, verifique que todas las configuraciones de vinculación sean correctas, prestando especial atención a los nombres de las cadenas de conexión, a las colas de almacenamiento, a los nombres de los contenedores y a la configuración del grupo de consumidores en los desencadenadores de Event Hubs.
Pasos de reversión para aplicaciones de producción críticas
Si no puede solucionar problemas correctamente, es posible que quiera volver a usar la aplicación original mientras sigue solucionando problemas.
Si la aplicación original se detuvo, reiníciela:
Use este
az functionapp startcomando para reiniciar la aplicación de funciones original:az functionapp delete --name <ORIGINAL_APP_NAME> --resource-group <RESOURCE_GROUP>Si ha creado nuevas colas, temas o contenedores, asegúrese de que los clientes se redirigen de nuevo a los recursos originales.
Si ha modificado DNS o dominios personalizados, revierta estos cambios para que apunten a la aplicación original.
Proporcionar comentarios
Si tiene problemas con la migración mediante este artículo o quiere proporcionar otros comentarios sobre esta guía, use uno de estos métodos para obtener ayuda o proporcionar sus comentarios:
-
Obtener ayuda en Microsoft Q&A
-Creación de un problema en el repositorio de Azure Functions
-
Proporcionar comentarios sobre el producto
-
Creación de una incidencia de soporte técnico