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.
Pré-requisitos
Uma conta do Azure com uma assinatura ativa. Se ainda não tem uma, crie uma conta gratuita.
CLI do Azure: usada para criar e gerenciar recursos no Azure. Ao usar a CLI do Azure em seu computador local, use a versão 2.60.0 ou uma versão posterior. Você também pode usar o Azure Cloud Shell, que tem a versão correta da CLI do Azure.
Visual Studio Code: usado para criar e desenvolver aplicativos, criar recursos do Azure e implantar projetos de código no Azure. Ao usar o Visual Studio Code, instale também a extensão do Azure Functions mas recente. Você também pode instalar o pacote de extensão de Ferramentas do Azure.
Embora não seja necessário criar um aplicativo de plano de Consumo Flex, você precisa de um projeto de código para poder implantar e validar um novo aplicativo de funções. Conclua a primeira parte de um desses artigos de início rápido, em que você cria um projeto de código com uma função disparada por HTTP:
- Criar um projeto do Azure Functions da linha de comando
- Criar um projeto do Azure Functions usando o Visual Studio Code
Para criar um aplicativo em um novo plano de Consumo Flex durante uma implantação do Maven, você deve criar seu projeto de aplicativo local e atualizar o arquivo pom.xml do projeto. Para obter mais informações, consulte Criar um aplicativo de Consumo Java Flex usando o Maven
Retorne a este artigo depois de criar e executar o projeto local, mas antes de ser solicitado a criar recursos do Azure. Você cria o aplicativo de funções e outros recursos do Azure na próxima seção.
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.
Se você ainda não tiver feito isso, entre no Azure:
az login
O comando
az login
conecta você à conta do Azure.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
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.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.
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 comandoaz 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.
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.
Na paleta de comandos, insira e, em seguida, selecione Azure Functions: Implantar no Aplicativo de Funções.
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.
Após sua implantação ser concluída, escolha Ver o resultado para ver os resultados da criação e da implantação, incluindo os recursos do Azure que você criou. Se você deixou passar a notificação, selecione o ícone de sino no canto inferior direito para vê-la novamente.
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.
Crie um projeto de código Java concluindo a primeira parte de um destes artigos de início rápido:
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>
para1.34.0
.Na seção
<plugin>.<configuration>
doazure-functions-maven-plugin
, adicione ou descompacte o elemento<pricingTier>
da seguinte maneira:<pricingTier>Flex Consumption</pricingTier>
(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.
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.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.
Importante
Atualmente, o plano de consumo flex não dá suporte a sub-redes com nomes que contêm caracteres de sublinhado (_
).
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
.
Criar a rede virtual e a sub-rede, caso ainda não tenha feito isso.
Conclua as etapas 1 a 4 em Criar um aplicativo de Consumo Flex para criar os recursos exigidos pelo seu aplicativo.
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/<RESOURCE_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:
- Consumo Flexível: HTTP para Hubs de Eventos usando a integração VNET
- Consumo Flex: disparado do Barramento de Serviço usando Integração VNET
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_ACCOUNT_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_ACCOUNT_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
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 execução. Há três grupos especiais, como no dimensionamento por função:
http
- todas as funções disparadas por HTTP no aplicativo são dimensionadas juntas em suas próprias instâncias.durable
- todas as funções disparadas por duráveis (Orquestração, Atividade, Entidade) no aplicativo são dimensionadas juntas em suas próprias instâncias.blob
- todas as funções disparadas por blob (Grade de Eventos) no aplicativo são dimensionadas juntas em suas próprias instâncias.
Use http
, durable
ou blob
como o nome da configuração do par de valores 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 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 function: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
Para exibir a lista de regiões que atualmente dão suporte a planos de Consumo Flex:
Se você ainda não tiver feito isso, entre no Azure:
az login
O comando
az login
conecta você à conta do Azure.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.