Implementar no Funções do Azure com o Azure Developer CLI

Azure Developer CLI (azd) suporta implementação de código e implementações de contentores para Funções do Azure. Utilize o host dedicado function em azure.yaml para ambos os modos:

  • Implementação de código empacota o código da função compilado como um arquivo zip e carrega-o para a Function App.
  • A implementação de contentores constrói ou resolve uma imagem de contentor, publica-a no Azure Container Registry (ACR) quando necessário e atualiza a Function App para executar a imagem.

Funções do Azure e Serviço de Aplicações do Azure usam ambos o fornecedor de recursos Microsoft.Web/sites, e os seus fluxos de implementação de contentores partilham algumas mecânicas internas. No entanto, não são o mesmo azd host. O Functions utiliza host: function, tem um empacotamento específico das Funções e comportamento de compilação remota, e não utiliza o fluxo de trabalho do slot de implementação do App Service.

Escolha um modo de implantação

azd seleciona o modo de implementação a partir da configuração do serviço:

Configuration Modo de implantação
Uma fonte project com um não Docker suportado language e sem docker.path Implementação de código
language: docker Implantação de contêiner
Um docker.path valor com uma língua de origem Implantação de contêiner
Um modelo pré-construído image Implantação de contêiner

A Function App provisionada deve usar o mesmo modo da configuração do serviço. Se a Function App estiver configurada para containers mas azure.yaml selecionar deployment de código, ou o inverso, azd deploy para antes de carregar e reporta a incompatibilidade.

Implementar código da função

Configure um serviço de funções baseado em código com um projeto fonte, linguagem suportada e host: function:

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

Durante azd deploy, azd constrói o projeto, aplica .funcignore exclusões, cria um arquivo zip e carrega o pacote através da API de implantação do Funções do Azure.

O seu Bicep ou Terraform deve provisionar uma aplicação de funções baseada em código e marcá-la com azd-service-name definido para o nome do serviço, a menos que identifique o recurso usando resourceName em azure.yaml. Configure o plano de alojamento, tempo de execução, armazenamento, identidades, rede e definições da aplicação através da infraestrutura como código.

Configurar compilações remotas para implantações de código

A propriedade de serviço remoteBuild de topo aplica-se apenas a Function Apps baseadas em código no plano Flex Consumption. Controla se o Funções do Azure utiliza o Oryx para construir o pacote carregado:

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

Quando omite remoteBuild no Flex Consumption, azd seleciona um padrão com base na linguagem e no conteúdo do pacote:

Linguagem Comportamento padrão
JavaScript ou TypeScript Usa compilação remota quando .funcignore exclui node_modules, ou quando não existe ficheiro .funcignore . Caso contrário, usa o pacote criado localmente.
Python Utiliza compilação remota.
Go Compila localmente. As Function Apps do Go não suportam compilação remota.
Outras línguas suportadas Usa o pacote construído localmente.

Para JavaScript e TypeScript, um valor explicitamente configurado remoteBuild deve concordar com .funcignore quando esse ficheiro existe. Defina remoteBuild: true quando .funcignore exclui node_modules. Defina remoteBuild: false quando .funcignore inclui node_modules no pacote.

Não defina a propriedade de nível superior remoteBuild para planos que não sejam Flex. Para ativar uma build do Oryx noutro plano suportado, configure ENABLE_ORYX_BUILD=true e SCM_DO_BUILD_DURING_DEPLOYMENT=true como as definições da Function App na sua infraestrutura.

Implementar uma função containerizada

Para um projeto de origem com um Dockerfile, defina language: docker, ou mantenha a linguagem de origem e especifique docker.path.

O exemplo seguinte utiliza um projeto TypeScript com um Dockerfile:

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

Também pode implementar uma imagem pré-construída sem um projeto local:

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

Para uma imagem pré-construída, omita language ou defina-a para docker. Não combine image com project.

Durante a implantação de um contentor, azd:

  1. Constrói a imagem local ou remotamente, ou resolve a imagem pré-construída configurada.
  2. Publica a imagem para a instância ACR configurada para o projeto quando a publicação for necessária.
  3. Atualiza a linuxFxVersion da Function App para DOCKER|<image>.
  4. Implementa-se no site principal da Function App.

A propriedade de serviço remoteBuild de topo não se aplica a contentores. Para construir uma imagem de contentor com ACR Tasks, use docker.remoteBuild:

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

Criar uma aplicação de funções pronta para contentores

azd deploy atualiza a referência da imagem, mas não converte uma Function App baseada em código numa Function App baseada em container. A sua infraestrutura deve provisionar um site compatível antes da implementação.

Requirement Details
Aplicação Function App do Linux Aprovisione uma aplicação Function do Linux num plano Funções do Azure Premium ou Dedicado (App Service). Flex Consumption não suporta contentores personalizados. Este host: function fluxo de trabalho destina-se Microsoft.Web/sites, não Funções do Azure alojado no Azure Container Apps.
Configuração do site do container Defina o tipo de site para incluir functionapp, linux, e container. Inicialize linuxFxVersion com um valor DOCKER\|<image>. Uma imagem provisória é suficiente porque azd deploy a substitui.
Registro de Contêineres Para builds de código-fonte, provisiona uma instância ACR e expõe o seu servidor de login através do output de infraestrutura AZURE_CONTAINER_REGISTRY_ENDPOINT, ou configura docker.registry para o serviço. Um pré-compilado image totalmente qualificado pode ser usado diretamente, sem necessidade de um registry de publicação separado.
Acesso ao registo Conceda à identidade que publica a imagem permissão para enviar para o registo de destino quando a publicação for necessária. Separadamente, configure a Function App para obter a imagem implementada. Para imagens privadas de ACR, conceda à identidade gerida da Function App permissões de extração e configure o site para usar credenciais de identidade gerida. Para outro registo privado, configure as credenciais de pull apropriadas na sua infraestrutura.
Definições de função Configure as definições necessárias como FUNCTIONS_EXTENSION_VERSION, FUNCTIONS_WORKER_RUNTIME, e AzureWebJobsStorage através do Bicep ou Terraform.
Descoberta de recursos Aplique uma azd-service-name etiqueta cujo valor corresponda ao nome do serviço em azure.yaml, ou defina resourceName explicitamente.

As definições de nível env de serviço não são suportadas no host function. Defina as definições da Function App na sua infraestrutura, em vez disso.

Compreender os slots de implantação

azd faz sempre a implementação de um function serviço no site principal da Function App. Não descobre, não solicita nem efetua a implementação para slots de Function App. Definições de slot de Serviço de Aplicações, como AZD_DEPLOY_{SERVICE}_SLOT_NAME, não afetam a implantação de uma Function App.

Se precisar de um processo de lançamento de Funções baseado em slots, gere o slot e a implantação fora do fluxo de trabalho incorporado host: function .

Comparar Functions e anfitriões do App Service

Funções e App Service partilham o tipo de recurso Microsoft.Web/sites, mas selecionam o anfitrião que corresponde à carga de trabalho:

Behavior function anfitrião appservice anfitrião
Carga de trabalho Event-driven Funções do Azure Aplicações web e APIs
Implementação de código Utiliza o fluxo de deployment zip do Funções do Azure Utiliza o fluxo de implementação do App Service
Implantação de contêiner Atualiza a imagem da Function App após validar que o site é baseado em contentores Atualiza a imagem da aplicação Web após validar que o site está pronto para contentores
Compilação remota de código Suporta a opção de nível remoteBuild de serviço para Function Apps de Consumo Flex Não usa a opção Functions remoteBuild
Espaços de implantação Instala sempre no site principal Suporta o azd fluxo de trabalho de slot do App Service
Nível de serviço env Não suportado; usar as definições da Function App na infraestrutura Configurar as definições da aplicação na infraestrutura