Implementación en Azure Functions con Azure Developer CLI

Azure Developer CLI (azd) admite implementaciones de código y contenedores en Azure Functions. Usa el host dedicado function en azure.yaml para ambos modos:

  • Implementación de código empaqueta el código de función compilado como archivo zip y lo carga en Function App.
  • La implementación de contenedores compila o resuelve una imagen de contenedor, la publica en Azure Container Registry (ACR) cuando sea necesario y actualiza la aplicación de funciones para ejecutar la imagen.

Azure Functions y Azure App Service usan el Microsoft.Web/sites proveedor de recursos y sus flujos de implementación de contenedores comparten algunos mecanismos internos. Sin embargo, no están en el mismo host de azd. Functions usan host: function, tiene un comportamiento de compilación remota y empaquetado específico de Functions y no usa el flujo de trabajo de ranura de implementación de App Service.

Elegir un modo de implementación

azd selecciona el modo de implementación a partir de la configuración del servicio:

Configuración Modo de implementación
Una fuente project con un language compatible que no sea Docker y sin docker.path Despliegue de código
language: docker Despliegue de contenedores
Un valor docker.path con un idioma de origen Despliegue de contenedores
Un image precompilado Despliegue de contenedores

La aplicación de funciones aprovisionada debe usar el mismo modo que la configuración del servicio. Si la aplicación de funciones está configurada para contenedores, pero azure.yaml selecciona la implementación de código o viceversa, azd deploy se detiene antes de cargar e informa de la falta de coincidencia.

Implementar el código de función

Configure un servicio de funciones basado en código con un proyecto de origen, lenguaje admitido y host: function:

services:
  api:
    project: ./src/api
    language: ts
    host: function

Durante azd deploy, azd compila el proyecto, aplica .funcignore exclusiones, crea un archivo ZIP y carga el paquete a través de la API de implementación de Azure Functions.

Bicep o Terraform deben aprovisionar una aplicación de funciones basada en código y etiquetarla con azd-service-name establecido con el nombre del servicio, a menos que identifique el recurso mediante resourceName en azure.yaml. Configure el plan de hospedaje, el entorno de ejecución, el almacenamiento, las identidades, las redes y la configuración de la aplicación a través de la infraestructura como código.

Configurar compilaciones remotas para implementaciones de código

La propiedad de servicio remoteBuild de nivel superior solo se aplica a las Function Apps basadas en código en el plan Flex Consumption. Controla si Azure Functions usa Oryx para compilar el paquete cargado:

services:
  api:
    project: ./src/api
    language: python
    host: function
    remoteBuild: true

Al omitir remoteBuild en Flex Consumption, azd selecciona un valor predeterminado en función del idioma y el contenido del paquete:

Language Comportamiento predeterminado
JavaScript o TypeScript Usa la compilación remota cuando .funcignore excluye node_modules, o cuando no existe ningún archivo .funcignore. De lo contrario, usa el paquete generado localmente.
Python Usa la compilación remota.
Go Compila localmente. Go Function Apps no admiten la compilación remota.
Otros idiomas admitidos Usa el paquete compilado localmente.

Para JavaScript y TypeScript, un valor configurado explícitamente remoteBuild debe coincidir con .funcignore cuando exista ese archivo. Establezca remoteBuild: true cuando .funcignore excluya node_modules. Se establece remoteBuild: false cuando .funcignore incluye node_modules en el paquete.

No establezca la propiedad de nivel remoteBuild superior para planes que no sean Flex. Para habilitar una compilación de Oryx en otro plan compatible, configure ENABLE_ORYX_BUILD=true y SCM_DO_BUILD_DURING_DEPLOYMENT=true como configuración de Function App en la infraestructura.

Implementar una función en contenedores

Para un proyecto de origen con un Dockerfile, establezca language: dockero mantenga el idioma de origen y especifique docker.path.

En el ejemplo siguiente se usa un proyecto de TypeScript con un Dockerfile:

services:
  api:
    project: ./src/api
    language: ts
    host: function
    docker:
      path: ./Dockerfile

También puede implementar una imagen precompilada sin un proyecto local:

services:
  api:
    host: function
    image: myregistry.azurecr.io/functions/api:1.0

Para una imagen precompilada, omita language o establézcala en docker. No combine image con project.

Durante una implementación de contenedor, azd:

  1. Construye la imagen local o remotamente, o resuelve la imagen precompilada configurada.
  2. Publica la imagen en la instancia de ACR configurada para el proyecto cuando se requiere la publicación.
  3. Actualiza el linuxFxVersion de aplicación de funciones a DOCKER|<image>.
  4. Se implementa en el sitio principal de aplicación de funciones.

La propiedad de servicio remoteBuild de nivel superior no se aplica a los contenedores. Para compilar una imagen de contenedor con ACR Tasks, use docker.remoteBuild:

services:
  api:
    project: ./src/api
    language: docker
    host: function
    docker:
      path: ./Dockerfile
      remoteBuild: true

Aprovisionar una Function App lista para contenedores

azd deploy actualiza la referencia de imagen, pero no convierte una aplicación de funciones basada en código en una aplicación de funciones basada en contenedores. La infraestructura debe aprovisionar un sitio compatible antes de la implementación.

Requirement Details
Aplicación de funciones Linux Aprovisione una aplicación de funciones de Linux en un plan Azure Functions Premium o Dedicado (App Service). Flex Consumption no admite contenedores personalizados. Este host: function flujo de trabajo tiene como destino Microsoft.Web/sites, no Azure Functions hospedado en Azure Container Apps.
Configuración del sitio del contenedor Establezca el tipo de sitio para incluir functionapp, linuxy container. Inicialice linuxFxVersion con un valor DOCKER\|<image>. Una imagen de marcador de posición es suficiente porque azd deploy la reemplaza.
Registro de contenedor Para las compilaciones de origen, aprovisione una instancia de ACR y exponga su servidor de inicio de sesión a través de la salida de la AZURE_CONTAINER_REGISTRY_ENDPOINT infraestructura o configure docker.registry para el servicio. Un precompilado image calificado con nombre completo se puede usar directamente sin un registro de publicación independiente.
Acceso al registro Conceda a la identidad que publica la imagen permiso para hacer push en el registro de destino cuando se requiera la publicación. De forma independiente, configure Function App para extraer la imagen implementada. En el caso de las imágenes de ACR privadas, conceda a la identidad administrada de Function App acceso de extracción y configure el sitio para usar credenciales de identidad administrada. Para otro registro privado, configure las credenciales de extracción adecuadas en la infraestructura.
Ajustes de la función Configura las opciones necesarias, como FUNCTIONS_EXTENSION_VERSION, FUNCTIONS_WORKER_RUNTIME y AzureWebJobsStorage, a través de Bicep o Terraform.
Detección de recursos Aplique una azd-service-name etiqueta cuyo valor coincida con el nombre del servicio en azure.yamlo establezca resourceName explícitamente.

La configuración de nivel de servicio env no se admite para el function host. En su lugar, defina la configuración de Function App en su infraestructura.

Describir las ranuras de implementación

azd siempre despliega un function servicio en el sitio principal de Function App. No detecta, solicita al usuario ni implementa en ranuras de Function App. La configuración de ranuras de App Service, como AZD_DEPLOY_{SERVICE}_SLOT_NAME , por ejemplo, no afecta a una implementación de Function App.

Si necesita un proceso de versión de Functions basado en ranuras, administre la ranura y la implementación fuera del flujo de trabajo integrado de host: function.

Comparar Functions y hosts de App Service

Functions y App Service comparten el Microsoft.Web/sites tipo de recurso, pero seleccione el host que coincida con la carga de trabajo:

Behavior function anfitrión appservice anfitrión
Carga de trabajo Azure Functions controladas por eventos Aplicaciones web y API
Despliegue de código Usa el flujo de implementación de zip de Azure Functions Usa el flujo de implementación de App Service
Despliegue de contenedores Actualiza la imagen de Function App después de validar que el sitio está basado en contenedores Actualiza la imagen de Web App después de validar que el sitio está preparado para contenedores
Compilación remota de código Admite la opción del nivel de servicio remoteBuild para Function Apps de Consumo flexible No usa la opción Functions remoteBuild
Espacios de despliegue Siempre se implementa en el sitio principal Admite el flujo de trabajo de ranuras azd de App Service.
Nivel de servicio env No se admite; usar la configuración de Function App en la infraestructura Configurar la configuración de la aplicación en la infraestructura