Criar e gerenciar aplicativos de função no plano Flex Consumption

Este artigo mostra como criar aplicativos de função hospedados no plano Flex Consumption no Azure Functions. Ele também mostra como gerenciar determinados recursos de um aplicativo hospedado no plano Flex Consumption.

Os recursos do aplicativo de função são específicos do idioma. Certifique-se de escolher sua linguagem de desenvolvimento de código preferida no início do artigo.

Importante

O plano Flex Consumption está atualmente em pré-visualização.

Pré-requisitos

Criar um aplicativo Flex Consumption

Esta seção mostra como criar um aplicativo de função no plano Flex Consumption usando a CLI do Azure, o portal do Azure ou o Visual Studio Code. Para obter um exemplo de criação de um aplicativo em um plano Flex Consumption usando modelos Bicep/ARM, consulte o repositório Flex Consumption.

Você pode ignorar esta seção se optar por criar e implantar seu aplicativo usando o Maven.

Para suportar seu código de função, você precisa criar três recursos:

  • Um grupo de recursos, que é um contêiner lógico para recursos relacionados.
  • Uma conta de armazenamento, que é usada para manter o estado e outras informações sobre suas funções.
  • Um aplicativo de função no plano Flex Consumption, que fornece o ambiente para executar seu código de função. Um aplicativo de função mapeia para seu projeto de função local e permite agrupar funções como uma unidade lógica para facilitar o gerenciamento, a implantação e o compartilhamento de recursos no plano Flex Consumption.
  1. Se ainda não o fez, inicie sessão no Azure:

    az login
    

    O az login comando inicia sessão na sua conta do Azure.

  2. Use o az functionapp list-flexconsumption-locations comando para revisar a lista de regiões que atualmente oferecem suporte ao Flex Consumption.

    az functionapp list-flexconsumption-locations --output table
    
  1. Crie um grupo de recursos em uma das regiões atualmente suportadas:

    az group create --name <RESOURCE_GROUP> --location <REGION>
    

    No comando acima, substitua <RESOURCE_GROUP> por um valor exclusivo na sua assinatura e <REGION> por uma das regiões atualmente suportadas. O comando az group create cria um grupo de recursos.

  2. Crie uma conta de armazenamento de uso geral em seu grupo de recursos e região:

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group <RESOURCE_GROUP> --sku Standard_LRS --allow-blob-public-access false
    

    No exemplo anterior, substitua <STORAGE_NAME> por um nome apropriado para você e exclusivo no Armazenamento do Azure. Os nomes devem conter de três a 24 caracteres, números e letras minúsculas apenas. Standard_LRS especifica uma conta de uso geral, que é suportada pelo Functions. O comando az storage account create cria a conta de armazenamento.

    Importante

    A conta de armazenamento é usada para armazenar dados importantes do aplicativo, às vezes incluindo o próprio código do aplicativo. Você deve limitar o acesso de outros aplicativos e usuários à conta de armazenamento.

  3. Crie o aplicativo de função no Azure:

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime dotnet-isolated --runtime-version 8.0 
    

    Atualmente, não há suporte para aplicativos C# executados em processo quando executados em um plano Flex Consumption.

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime java --runtime-version 17 
    

    Para aplicativos Java, o Java 11 também é suportado atualmente.

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime node --runtime-version 20 
    
    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime python --runtime-version 3.11 
    

    Para aplicativos Python, o Python 3.10 também é suportado atualmente.

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime powershell --runtime-version 7.4 
    

    Neste exemplo, substitua ambos <RESOURCE_GROUP> e <STORAGE_NAME> pelo grupo de recursos e o nome da conta usada na etapa anterior, respectivamente. Substitua <APP_NAME> também por um nome globalmente exclusivo apropriado para você. O <APP_NAME> também é o domínio padrão do servidor de nomes de domínio (DNS) para o aplicativo de função. O az functionapp create comando cria o aplicativo de função no Azure.

    Este comando cria um aplicativo funcional em execução no plano Flex Consumption. A versão específica do language runtime usada é uma que é suportada atualmente na visualização.

    Como você criou o aplicativo sem especificar instâncias sempre prontas, seu aplicativo só incorre em custos ao executar ativamente funções. O comando também cria uma instância associada do Azure Application Insights no mesmo grupo de recursos, com a qual você pode monitorar seu aplicativo de função e exibir logs. Para obter mais informações, consulte Monitorar o Azure Functions.

    
    

Implantar seu projeto de código

Você pode ignorar esta seção se optar por criar e implantar seu aplicativo usando o Maven.

Você pode optar por implantar seu código de projeto em um aplicativo de função existente usando várias ferramentas:

Importante

A implantação em um aplicativo de função existente sempre substitui o conteúdo desse aplicativo no Azure.

  1. Na paleta de comandos, insira e selecione Azure Functions: Deploy to Function App.

  2. Selecione o aplicativo de função que você acabou de criar. Quando solicitado sobre a substituição de implantações anteriores, selecione Implantar para implantar seu código de função no novo recurso de aplicativo de função.

  3. Quando a implantação estiver concluída, selecione Exibir Saída para exibir os resultados da criação e da implantação, incluindo os recursos do Azure que você criou. Se você perder a notificação, selecione o ícone de sino no canto inferior direito para vê-lo novamente.

    Captura de ecrã da janela Ver Saída.

Crie e implante seu aplicativo usando o Maven

Você pode usar o Maven para criar um aplicativo de função hospedado do Flex Consumption e os recursos necessários durante a implantação, modificando o arquivo pom.xml.

  1. Crie um projeto de código Java concluindo a primeira parte de um destes artigos de início rápido:

  2. Em seu projeto de código Java, abra o arquivo pom.xml e faça estas alterações para criar seu aplicativo de função no plano Flex Consumption:

    • Altere o valor de <properties>.<azure.functions.maven.plugin.version> para 1.34.0.

    • <plugin>.<configuration> Na seção do azure-functions-maven-plugin, adicione ou descomente o <pricingTier> elemento da seguinte maneira:

      <pricingTier>Flex Consumption</pricingTier>
      
  3. (Opcional) Personalize o plano Flex Consumption em sua implantação do Maven incluindo também estes elementos na <plugin>.<configuration> seção: .

    • <instanceSize>- Define o tamanho da memória da instância para o aplicativo de função. O valor predefinido é 2048.
    • <maximumInstances> - Define o valor mais alto para a contagem máxima de instâncias do aplicativo de função.
    • <alwaysReadyInstances>- define as contagens de instâncias sempre prontas com elementos filho para grupos de gatilho HTTP (<http>), grupos de funções duráveis (<durable>) e outros gatilhos específicos (<my_function>). Quando você define qualquer contagem de instâncias maior que zero, você é cobrado por essas instâncias, independentemente de suas funções serem executadas ou não. Para obter mais informações, consulte Faturamento.
  4. Antes de implantar, entre em sua assinatura do Azure usando a CLI do Azure.

    az login
    

    O az login comando inicia sessão na sua conta do Azure.

  5. Use o comando a seguir para implantar seu projeto de código em um novo aplicativo de função no Flex Consumption.

    mvn azure-functions:deploy
    

    O Maven usa as configurações no modelo pom.xml para criar seu aplicativo de função em um plano de Consumo Flex no Azure, juntamente com os outros recursos necessários. Caso esses recursos já existam, o código é implantado em seu aplicativo de função, substituindo qualquer código existente.

Habilite a integração de rede virtual

Você pode habilitar a integração de rede virtual para seu aplicativo em um plano Flex Consumption. Os exemplos nesta seção pressupõem que você já criou uma rede virtual com sub-rede em sua conta. Você pode habilitar a integração de rede virtual ao criar seu aplicativo ou posteriormente.

Importante

Atualmente, o plano Flex Consumption não suporta sub-redes com nomes que contenham caracteres de sublinhado (_).

Para habilitar a rede virtual ao criar seu aplicativo:

Você pode habilitar a integração de rede virtual executando o az functionapp create comando e incluindo os --vnet parâmetros e --subnet .

  1. Crie a rede virtual e a sub-rede, se ainda não o tiver feito.

  2. Conclua as etapas de 1 a 4 em Criar um aplicativo Flex Consumption para criar os recursos exigidos pelo seu aplicativo.

  3. Execute o az functionapp create comando, incluindo os --vnet parâmetros e --subnet , como neste exemplo:

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime <RUNTIME_NAME> --runtime-version <RUNTIME_VERSION> --vnet <VNET_RESOURCE_ID> --subnet <SUBNET_NAME>
    

    O <VNET_RESOURCE_ID> valor é o ID do recurso para a rede virtual, que está no formato: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCER_GROUP>/providers/Microsoft.Network/virtualNetworks/<VNET_NAME>. Você pode usar esse comando para obter uma lista de IDs de rede virtual, filtrada por <RESOURCE_GROUP>: az network vnet list --resource-group <RESOURCE_GROUP> --output tsv --query "[]".id.

Para obter exemplos completos de como criar aplicativos no Flex Consumption com integração de rede virtual, consulte estes recursos:

Para modificar ou excluir a integração de rede virtual em um aplicativo existente:

Use o comando para habilitar a integração de az functionapp vnet-integration add rede virtual com um aplicativo de função existente:

az functionapp vnet-integration add --resource-group <RESOURCE_GROUP> --name <APP_NAME> --vnet <VNET_RESOURCE_ID> --subnet <SUBNET_NAME>

Use o comando para desabilitar a az functionapp vnet-integration remove integração de rede virtual em seu aplicativo:

az functionapp vnet-integration remove --resource-group <RESOURCE_GROUP> --name <APP_NAME>

Use o az functionapp vnet-integration list comando para listar as integrações de rede virtual atuais para seu aplicativo:

az functionapp vnet-integration list --resource-group <RESOURCE_GROUP> --name <APP_NAME>

Ao escolher uma sub-rede, estas considerações se aplicam:

  • A sub-rede escolhida já não pode ser usada para outros fins, como com pontos finais privados ou pontos finais de serviço ou ser delegada para qualquer outro plano ou serviço de alojamento.
  • Você pode compartilhar a mesma sub-rede com mais de um aplicativo em execução em um plano Flex Consumption. Como os recursos de rede são compartilhados entre todos os aplicativos, um aplicativo de função pode afetar o desempenho de outros na mesma sub-rede.
  • Num plano de Consumo Flexível, uma aplicação de funções individual pode utilizar até 40 endereços IP, mesmo se for dimensionada para lá de 40 instâncias. Embora esta regra prática seja útil para estimar o tamanho da sub-rede de que precisa, não é rigorosamente aplicada.

Configurar definições da implementação

No plano Flex Consumption, o pacote de implantação que contém o código do seu aplicativo é mantido em um contêiner de Armazenamento de Blob do Azure. Por padrão, as implantações usam a mesma conta de armazenamento (AzureWebJobsStorage) e o mesmo valor da cadeia de conexão usados pelo tempo de execução do Functions para manter seu aplicativo. A cadeia de conexão é armazenada na configuração do DEPLOYMENT_STORAGE_CONNECTION_STRING aplicativo. No entanto, você pode, em vez disso, designar um contêiner de blob em uma conta de armazenamento separada como a fonte de implantação do seu código. Você também pode alterar o método de autenticação usado para acessar o contêiner.

Uma fonte de implantação personalizada deve atender a estes critérios:

  • A conta de armazenamento já deve existir.
  • O contêiner a ser usado para implantações também deve existir.
  • Quando mais de um aplicativo usa a mesma conta de armazenamento, cada um deve ter seu próprio contêiner de implantação. O uso de um contêiner exclusivo para cada aplicativo impede que os pacotes de implantação sejam substituídos, o que aconteceria se os aplicativos compartilhassem o mesmo contêiner.

Ao configurar a autenticação de armazenamento de implantação, tenha estas considerações em mente:

  • Quando você usa uma cadeia de conexão para se conectar à conta de armazenamento de implantação, a configuração do aplicativo que contém a cadeia de conexão já deve existir.
  • Quando você usa uma identidade gerenciada atribuída pelo usuário, a identidade fornecida é vinculada ao aplicativo de função. A Storage Blob Data Contributor função com escopo para a conta de armazenamento de implantação também é atribuída à identidade.
  • Quando você usa uma identidade gerenciada atribuída ao sistema, uma identidade é criada quando uma identidade atribuída pelo sistema válida ainda não existe em seu aplicativo. Quando existe uma identidade atribuída pelo sistema, a Storage Blob Data Contributor função com escopo para a conta de armazenamento de implantação também é atribuída à identidade.

Para definir as configurações de implantação ao criar seu aplicativo de função no plano Flex Consumption:

Use o comando e forneça estas opções adicionais que personalizam o az functionapp create armazenamento de implantação:

Parâmetro Description
--deployment-storage-name O nome da conta de armazenamento de implantação.
--deployment-storage-container-name O nome do contêiner na conta para conter o pacote de implantação do seu aplicativo.
--deployment-storage-auth-type O tipo de autenticação a ser usado para se conectar à conta de armazenamento de implantação. Os valores aceites incluem StorageAccountConnectionString, UserAssignedIdentity, e SystemAssignedIdentity.
--deployment-storage-auth-value Ao usar StorageAccountConnectionStringo , esse parâmetro é definido como o nome da configuração do aplicativo que contém a cadeia de conexão para a conta de armazenamento de implantação. Ao usar UserAssignedIdentityo , esse parâmetro é definido como o nome da ID do recurso da identidade que você deseja usar.

Este exemplo cria um aplicativo de função no plano Flex Consumption com uma conta de armazenamento de implantação separada e uma identidade atribuída ao usuário:

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime dotnet-isolated --runtime-version 8.0 --flexconsumption-location "<REGION>" --deployment-storage-name <DEPLOYMENT_ACCCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME> --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value <MI_RESOURCE_ID>

Você também pode modificar a configuração de armazenamento de implantação para um aplicativo existente.

Use o az functionapp deployment config set comando para modificar a configuração de armazenamento de implantação:

az functionapp deployment config set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --deployment-storage-name <DEPLOYMENT_ACCCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME>

Configurar a memória da instância

O tamanho da memória de instância usado pelo seu plano Flex Consumption pode ser definido explicitamente quando você cria seu aplicativo. Para obter mais informações sobre tamanhos suportados, consulte Memória de instância.

Para definir um tamanho de memória de instância diferente do padrão ao criar seu aplicativo:

Especifique o --instance-memory parâmetro em seu az functionapp create comando. Este exemplo cria um aplicativo C# com um tamanho de instância de 4096:

az functionapp create --instance-memory 4096 --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime dotnet-isolated --runtime-version 8.0

A qualquer momento, você pode alterar a configuração de tamanho da memória da instância usada pelo seu aplicativo.

Este exemplo usa o az functionapp scale config set comando para alterar a configuração de tamanho da memória da instância para 4.096 MB:

az functionapp scale config set --resource-group <resourceGroup> --name <APP_NAME> --instance-memory 4096

Definir contagens de instâncias sempre prontas

Você pode definir várias instâncias sempre prontas para os grupos de dimensionamento por função ou funções individuais, para manter suas funções carregadas e prontas para serem executadas. Existem três grupos especiais, como no dimensionamento por função:

  • http - todas as funções acionadas por HTTP no aplicativo são dimensionadas em suas próprias instâncias.
  • durable - todas as funções acionadas duráveis (orquestração, atividade, entidade) no aplicativo são dimensionadas em suas próprias instâncias.
  • blob - todas as funções acionadas de blob (Event Grid) no aplicativo são dimensionadas em suas próprias instâncias.

Use http, durable ou blob como o nome para a configuração de par de valor de nome para configurar contagens sempre prontas para esses grupos. Para todas as outras funções no aplicativo, você precisa configurar sempre pronto para cada função individual usando o formato function:<FUNCTION_NAME>=n.

Use o --always-ready-instances parâmetro com o az functionapp create comando para definir uma ou mais designações de instância sempre prontas. Este exemplo define a contagem de instâncias sempre prontas para todas as funções acionadas por HTTP como 5:

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --always-ready-instances http=10

Este exemplo define a contagem de instâncias sempre prontas para todas as funções de gatilho Durable como 3 e define a contagem de instâncias sempre prontas como 2 para uma função acionada do barramento de serviço chamada function5:

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --always-ready-instances durable=3 function:function5=2

Você também pode modificar instâncias sempre prontas em um aplicativo existente adicionando ou removendo designações de instância ou alterando contagens de designações de instâncias existentes.

Este exemplo usa o az functionapp scale config always-ready set comando para alterar a contagem de instâncias sempre prontas para o grupo de gatilhos HTTP para 10:

az functionapp scale config always-ready set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --settings http=10

Para remover instâncias sempre prontas, use o az functionapp scale config always-ready delete comando, como neste exemplo que remove todas as instâncias sempre prontas do grupo de gatilhos HTTP e também de uma função chamada hello_world:

az functionapp scale config always-ready delete --resource-group <RESOURCE_GROUP> --name <APP_NAME> --setting-names http function:hello_world

Definir limites de simultaneidade HTTP

A menos que você defina limites específicos, os padrões de simultaneidade HTTP para aplicativos do plano Flex Consumption são determinados com base na configuração de tamanho da instância. Para obter mais informações, consulte Simultaneidade de gatilho HTTP.

Veja como você pode definir limites de simultaneidade HTTP para um aplicativo existente:

Use o az functionapp scale config set comando para definir limites de simultaneidade HTTP específicos para seu aplicativo, independentemente do tamanho da instância.

az functionapp scale config set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --trigger-type http --trigger-settings perInstanceConcurrency=10

Este exemplo define o nível de simultaneidade do gatilho HTTP como 10. Depois de definir especificamente um valor de simultaneidade HTTP, esse valor é mantido apesar de quaisquer alterações na configuração de tamanho da instância do seu aplicativo.

Ver regiões atualmente suportadas

Durante a visualização, você só poderá executar no plano Flex Consumption apenas em regiões selecionadas. Para visualizar a lista de regiões que atualmente suportam os planos Flex Consumption:

  1. Se ainda não o fez, inicie sessão no Azure:

    az login
    

    O az login comando inicia sessão na sua conta do Azure.

  2. Use o az functionapp list-flexconsumption-locations comando para revisar a lista de regiões que atualmente oferecem suporte ao Flex Consumption.

    az functionapp list-flexconsumption-locations --output table
    

Quando você cria um aplicativo no portal do Azure ou usando o Visual Studio Code, as regiões sem suporte no momento são filtradas para fora da lista de regiões.