Implantar no Azure Functions com a Azure Developer CLI

CLI do Desenvolvedor do Azure (azd) dá suporte a implantações de código e contêiner para Azure Functions. Use o host dedicado function em azure.yaml para ambos os modos:

  • A implantação de código empacota seu código da função compilado como um arquivo zip e o carrega no Function App.
  • A implantação de contêiner cria ou resolve uma imagem de contêiner, a publica no ACR (Registro de Contêiner do Azure) quando necessário e atualiza o Aplicativo de Funções para executar a imagem.

Azure Functions e Serviço de Aplicativo do Azure usam o Microsoft.Web/sites provedor de recursos e seus fluxos de implantação de contêiner compartilham algumas mecânicas internas. No entanto, eles não estão no mesmo host azd. O Functions usa host: function, tem o empacotamento específico do Functions e o comportamento de build remoto e não usa o fluxo de trabalho de slot de implantação do Serviço de Aplicativo.

Escolher um modo de implantação

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

Configuration Modo de implantação
Uma fonte project com um language não Docker compatível e sem docker.path Implementação de código
language: docker Implantação de contêiner
Um docker.path valor com um idioma de origem Implantação de contêiner
Um item predefinido image Implantação de contêiner

O Function App provisionado deve usar o mesmo modo que a configuração de serviço. Se o Aplicativo de Funções estiver configurado para contêineres, mas azure.yaml selecionar a implantação de código ou o inverso, azd deploy para antes de carregar e relata a incompatibilidade.

Implantar o código de função

Configure um serviço de função baseado em código com um projeto de origem, linguagem com suporte e host: function:

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

Durante azd deploy, azd compila o projeto, aplica exclusões de .funcignore, cria um arquivo zip e carrega o pacote por meio da API de implantação do Azure Functions.

Seu Bicep ou Terraform deve provisionar um Aplicativo de Funções baseado em código e marcá-lo com azd-service-name definido como o nome do serviço, a menos que você identifique o recurso usando resourceName em azure.yaml. Configure o plano de hospedagem, o runtime, o armazenamento, as identidades, a rede e as configurações do aplicativo por meio da infraestrutura como código.

Configurar builds remotos para implantações de código

A propriedade de nível superior remoteBuild aplica-se apenas a Aplicativos de funções baseados em código no plano Consumo Flexível. Ele controla se Azure Functions usa o Oryx para criar o pacote carregado:

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

Quando você omite remoteBuild no Consumo Flex, azd seleciona um padrão com base no idioma e no conteúdo do pacote:

Linguagem Comportamento padrão
JavaScript ou TypeScript Usa o build remoto quando .funcignore exclui node_modules, ou quando nenhum arquivo .funcignore existe. Caso contrário, usa o pacote criado localmente.
Python Usa o build remoto.
Go Compila localmente. Os Go Function Apps não dão suporte ao build remoto.
Outros idiomas suportados Usa o pacote criado localmente.

Para JavaScript e TypeScript, um valor explicitamente configurado remoteBuild deve corresponder a .funcignore quando esse arquivo existe. Definir remoteBuild: true quando .funcignore excluir node_modules. Defina remoteBuild: false quando .funcignore incluir node_modules no pacote.

Não defina a propriedade remoteBuild de nível superior para planos não Flex. Para habilitar um build oryx em outro plano com suporte, defina ENABLE_ORYX_BUILD=true e SCM_DO_BUILD_DURING_DEPLOYMENT=true como configurações do Aplicativo de Funções em sua infraestrutura.

Implantar uma função conteinerizada

Para um projeto de origem com um Dockerfile, defina language: dockerou mantenha o idioma de origem e especifique docker.path.

O exemplo a seguir usa um projeto TypeScript com um Dockerfile:

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

Você também pode implantar uma imagem predefinida sem um projeto local:

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

Para uma imagem predefinida, omita language ou defina-a como docker. Não combine image com project.

Durante uma implantação de contêiner, azd:

  1. Cria a imagem local ou remotamente, ou localiza a imagem predefinida configurada.
  2. Publica a imagem na instância do ACR configurada para o projeto quando a publicação é necessária.
  3. Atualiza o linuxFxVersion do Function App para DOCKER|<image>.
  4. Implanta no site principal do Function App.

A propriedade de serviço remoteBuild de nível superior não se aplica a contêineres. Para criar uma imagem de contêiner com tarefas do ACR, use docker.remoteBuild:

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

Criar um Function App habilitado para contêiner

azd deploy atualiza a referência de imagem, mas não converte um Aplicativo de Funções baseado em código em um aplicativo de funções baseado em contêiner. Sua infraestrutura deve provisionar um site compatível antes da implantação.

Requirement Details
Aplicativo de funções do Linux Provisione um Aplicativo de Funções do Linux em um plano Azure Functions Premium ou Dedicado (Serviço de Aplicativo). O Consumo Flex não dá suporte a contêineres personalizados. Esse host: function fluxo de trabalho destina-se a Microsoft.Web/sites, não às Azure Functions hospedadas no Aplicativos de Contêiner do Azure.
Configuração do site de contêineres Defina o tipo de site para incluir functionapp, linuxe container. Inicialize linuxFxVersion com um valor DOCKER\|<image>. Uma imagem de espaço reservado é suficiente porque azd deploy a substitui.
Registro de contêiner Para compilações de origem, provisione uma instância do ACR e exponha seu servidor de logon por meio da saída da infraestrutura AZURE_CONTAINER_REGISTRY_ENDPOINT ou configure docker.registry para o serviço. Um pré-construído image totalmente qualificado pode ser usado diretamente sem um registry de publicação separado.
Acesso ao Registro Conceda à identidade que publica a imagem a permissão para enviar por push para o registro de destino quando a publicação for necessária. Separadamente, configure o Function App para efetuar pull da imagem implantada. Para imagens privadas do ACR, conceda à identidade gerenciada do Aplicativo de Funções acesso de pull e configure o site para usar credenciais de identidade gerenciada. Para outro registro privado, configure as credenciais de pull apropriadas em sua infraestrutura.
Configurações de funções Defina as configurações necessárias, como FUNCTIONS_EXTENSION_VERSION, FUNCTIONS_WORKER_RUNTIMEe AzureWebJobsStorage por meio de Bicep ou Terraform.
Descoberta de recursos Aplique uma marca azd-service-name cujo valor corresponde ao nome do serviço em azure.yaml, ou defina resourceName explicitamente.

Não há suporte para configurações de nível env de serviço para o function host. Defina as configurações do Aplicativo de Funções em sua infraestrutura, em vez disso.

Entender os slots de implantação

azd sempre implanta um function serviço no site principal do Function App. Ele não descobre, solicita informações sobre nem implanta em slots do Function App. As configurações de slot do App Service, como AZD_DEPLOY_{SERVICE}_SLOT_NAME, não afetam uma implantação do Function App.

Se você precisar de um processo de versão do Functions baseado em slot, gerencie o slot e a implantação fora do fluxo de trabalho interno host: function .

Compare os hosts do Functions e de Serviço de Aplicativo

As funções e o Serviço de Aplicativo compartilham o Microsoft.Web/sites tipo de recurso, mas selecione o host que corresponde à carga de trabalho:

Behavior function host appservice host
Carga de Trabalho Azure Functions orientadas a eventos APIs e aplicativos Web
Implementação de código Usa o fluxo de implantação zip Azure Functions Usa o fluxo de implantação do App Service
Implantação de contêiner Atualiza a imagem do Function App depois de validar que o site é baseado em contêiner Atualiza a imagem do Aplicativo Web depois de validar que o site está pronto para contêineres
compilação remota de código Dá suporte à opção de nível de serviço remoteBuild para Flex Consumption Function Apps Não usa a opção Functions remoteBuild
Slots de implantação Sempre realiza a implantação no site principal Dá suporte ao fluxo de trabalho de slot do azd App Service
Nível de serviço env Sem suporte; usar as configurações do Function App na infraestrutura Configurar configurações do aplicativo na infraestrutura