Compartilhar via


Criar e gerenciar aplicativos de funções no plano de Consumo Flex

Este artigo mostra como criar aplicativos de funções hospedados no do plano de Consumo Flex do no Azure Functions. Ele também mostra como gerenciar determinados recursos de um aplicativo hospedado do plano de Consumo Flex.

Os recursos do aplicativo de funções são específicos da linguagem. Escolha sua linguagem de desenvolvimento de código preferencial no início do artigo.

Importante

O plano de Consumo Flex está atualmente em versão preliminar.

Pré-requisitos

Criar um aplicativo de Consumo Flex

Esta seção mostra como criar um aplicativo de funções no plano de Consumo Flex 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 de consumo flex usando modelos Bicep/ARM, consulte o repositório de Consumo Flex.

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

Para dar suporte ao 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ções no plano de Consumo Flex, que fornece o ambiente para executar seu código de função. Um aplicativo de funções é mapeado 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 de Consumo Flex.
  1. Se você ainda não tiver feito isso, entre no Azure:

    az login
    

    O comando az login conecta você à conta do Azure.

  2. Use o comando az functionapp list-flexconsumption-locations para examinar a lista de regiões que atualmente dão suporte ao Consumo Flex.

    az functionapp list-flexconsumption-locations --output table
    
  1. Crie um grupo de recursos em uma das regiões com suporte no momento:

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

    No comando acima, substitua <RESOURCE_GROUP> por um valor exclusivo em sua assinatura e <REGION> por uma das regiões com suporte no momento. O comando az group create cria um grupo de recursos.

  2. Crie uma conta de armazenamento para uso geral no grupo de recursos e na 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 que seja apropriado para você e exclusivo no Armazenamento do Azure. Os nomes devem conter de 3 a 24 caracteres e podem conter somente números e letras minúsculas. Standard_LRS especifica uma conta de uso geral, que é compatível com o 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. Criar o aplicativo de funções 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 
    

    aplicativos C# que executam em processo não têm suporte no momento durante a execução em um plano de Consumo Flex.

    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 tem suporte no momento.

    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 tem suporte no momento.

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

    Esse comando cria um aplicativo de funções em execução no plano de Consumo Flex. A versão de runtime de idioma específica usada é uma que atualmente tem suporte na versão prévia.

    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 o qual será possível monitorar o aplicativo de funções e exibir os logs. Para saber mais, consulte Monitorar 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 o código do projeto em um aplicativo de funções existente usando várias ferramentas:

Importante

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

  1. Na paleta de comandos, pesquise e execute o comando Azure Functions: Deploy to Function App....

  2. Selecione o aplicativo de funções 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 do aplicativo de funções.

  3. Após a conclusão da implantação, escolha Exibir Saída para ver a criação e os resultados 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 tela da janela Exibir saída.

Criar e implantar seu aplicativo usando o Maven

Você pode usar o Maven para criar um aplicativo de funções hospedado por Consumo Flex e 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ções no plano de Consumo Flex:

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

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

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

    • <instanceSize> – define o tamanho de memória da instância para o aplicativo de funções. O valor padrão é 2048.
    • <maximumInstances> – define o valor mais alto para a contagem máxima de instâncias do aplicativo de funções.
    • <alwaysReadyInstances> - define o contagens de instâncias sempre prontas com elementos filho para grupos de gatilhos 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 se suas funções são executadas ou não. Para mais informações, consulte Faturamento.
  4. Antes de implantar, entre em sua assinatura do Azure usando a CLI do Azure.

    az login
    

    O comando az login conecta você à conta do Azure.

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

    mvn azure-functions:deploy
    

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

Habilitar a integração de rede virtual

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

Para habilitar a rede virtual ao criar seu aplicativo:

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

  1. Criar a rede virtual e a sub-rede, caso ainda não tenha feito isso.

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

  3. Execute o comando az functionapp create, incluindo os parâmetros --vnet 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 valor <VNET_RESOURCE_ID> é a ID do recurso da 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, filtradas por <RESOURCE_GROUP>: az network vnet list --resource-group <RESOURCE_GROUP> --output tsv --query "[]".id.

Para obter exemplos de ponta a ponta de como criar aplicativos no Consumo Flex 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 az functionapp vnet-integration add para habilitar a integração de rede virtual a um aplicativo de funções existente:

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

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

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

Use o comando az functionapp vnet-integration list 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, essas considerações se aplicam:

  • A sub-rede escolhida ainda não pode ser usada para outras finalidades, como pontos de extremidade privados ou pontos de extremidade de serviço, ou ser delegada a qualquer outro plano ou serviço de hospedagem.
  • Você pode compartilhar a mesma sub-rede com mais de um aplicativo em execução em um plano de Consumo Flex. Como os recursos de rede são compartilhados em todos os aplicativos, um aplicativo de funções pode afetar o desempenho de outras pessoas na mesma sub-rede.
  • Em um plano de Consumo Flex, um único aplicativo de funções pode usar até 40 endereços IP, mesmo quando o aplicativo escala além de 40 instâncias. Embora essa regra geral seja útil ao estimar o tamanho da sub-rede necessária, ela não é estritamente imposta.

Definir configurações de implantação

No plano Consumo Flex, o pacote de implantação que contém o código do aplicativo é mantido em um contêiner do Armazenamento de Blobs 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 runtime do Functions para manter seu aplicativo. A cadeia de conexão é armazenada na configuração de aplicativo DEPLOYMENT_STORAGE_CONNECTION_STRING. No entanto, você pode designar um contêiner de blob em uma conta de armazenamento separada como a fonte de implantação do 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 esses critérios:

  • A conta de armazenamento já deve existir.
  • Também é necessário ter um contêiner que será usado para as implantações, e ele precisa estar vazio.
  • Quando mais de um aplicativo usa a mesma conta de armazenamento, cada um deve ter um contêiner de implantação próprio. O uso de um contêiner exclusivo para cada aplicativo impede que os pacotes de implantação sejam substituídos, o que ocorreria 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á precisa existir.
  • Quando você usa uma identidade gerenciada atribuída pelo usuário, a identidade fornecida é vinculada ao aplicativo de funções. A função Storage Blob Data Contributor com escopo para a conta de armazenamento de implantação também é atribuída à identidade.
  • Quando você usa uma identidade gerenciada atribuída pelo sistema, é criada uma identidade quando uma identidade atribuída pelo sistema válida ainda não existe no aplicativo. Quando há uma identidade atribuída pelo sistema, a função Storage Blob Data Contributor 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ções no plano Consumo Flex:

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

Parâmetro Descrição
--deployment-storage-name O nome da conta de armazenamento de implantação.
--deployment-storage-container-name O nome do contêiner da conta que conterá o pacote de implantação do aplicativo.
--deployment-storage-auth-type O tipo de autenticação a ser usado para se conectar à conta de armazenamento de implantação. Os valores aceitos incluem StorageAccountConnectionString, UserAssignedIdentity e SystemAssignedIdentity.
--deployment-storage-auth-value Quando StorageAccountConnectionString é usado, 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. Quando UserAssignedIdentity é usado, esse parâmetro é definido como o nome da ID do recurso da identidade que você deseja usar.

Este exemplo cria um aplicativo de funções no plano Consumo Flex com uma conta de armazenamento de implantação e uma identidade atribuída pelo usuário separadas:

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 comando az functionapp deployment config set 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 da instância usado pelo seu plano de Consumo Flex pode ser definido explicitamente quando você cria seu aplicativo. Para obter mais informações sobre tamanhos com suporte, consulte memória da instância.

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

Especifique o parâmetro --instance-memory no comando az functionapp create. 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 de memória da instância usada pelo aplicativo.

Este exemplo usa o comando az functionapp scale config set para alterar a configuração de tamanho de 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

Ao criar um aplicativo em um plano de Consumo Flex, você pode definir a contagem de instâncias sempre pronta para grupos específicos (gatilhos HTTP ou Duráveis) e gatilhos. Para funções individuais, use o formato function:<FUNCTION_NAME>=n.

Use o parâmetro --always-ready-instances com o comando az functionapp create para definir uma ou mais designações de instância sempre prontas. Este exemplo define a contagem de instâncias sempre pronta para todas as funções disparadas 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 pronta para todas as funções de gatilho duráveis para 3 e define a contagem de instâncias sempre pronta como 2 para uma função disparada 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 as contagens de designação de instância existentes.

Este exemplo usa o comando az functionapp scale config always-ready set para alterar a contagem de instâncias sempre pronta para o grupo de gatilhos HTTP 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 comando az functionapp scale config always-ready delete, 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 hello_world

Definir limites de simultaneidade HTTP

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

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

Use o comando az functionapp scale config set 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 será mantido apesar de quaisquer alterações na configuração de tamanho da instância do aplicativo.

Exibir regiões com suporte no momento

Durante a visualização, você só poderá executar no plano de Consumo Flex somente em regiões selecionadas. Para exibir a lista de regiões que atualmente dão suporte a planos de Consumo Flex:

  1. Se você ainda não tiver feito isso, entre no Azure:

    az login
    

    O comando az login conecta você à conta do Azure.

  2. Use o comando az functionapp list-flexconsumption-locations para examinar a lista de regiões que atualmente dão suporte ao Consumo Flex.

    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 atualmente sem suporte são filtradas para fora da lista de regiões.