Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 do idioma. 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.
- Para aplicativos Go, use CLI do Azure versão
2.87.0ou posterior. Executeaz versionpara verificar sua versão instalada.
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 loginO comando
az loginconecta você à sua conta do Azure.Use o comando
az functionapp list-flexconsumption-locationspara examinar a lista de regiões que atualmente suportam o Consumo Flex em ordem alfabética.az functionapp list-flexconsumption-locations --query "sort_by(@, &name)[].{Region:name}" -o table
Crie um grupo de recursos em uma das regiões atualmente com suporte listadas pelo comando na etapa anterior.
az group create --name <RESOURCE_GROUP> --location <REGION>No comando anterior, 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 falseNo 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, consistindo apenas em números e letras minúsculas.Standard_LRSespecifica uma conta de uso geral compatível com o Azure Functions de acordo com os requisitos da conta de armazenamento. 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.0aplicativos 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 17az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime node --runtime-version 20az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime python --runtime-version 3.11Para 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.4az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime go --runtime-version 1.0 --functions-version 4 az resource update --resource-group <RESOURCE_GROUP> --resource-type Microsoft.Web/sites --name <APP_NAME> --set properties.siteConfig.http20Enabled=falseO comando
az resource updatedesabilita o HTTP/2 no aplicativo de função, o que é necessário durante a versão prévia pública do Go.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 createcria o aplicativo de funções no Azure.O comando
az functionapp createcria um aplicativo de função executado no plano Flex Consumption.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 Aplicativo Azure 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
Para implantação, os aplicativos do plano de Consumo Flex usam um contêiner de armazenamento Blob para hospedar os arquivos de pacote .zip, que contêm o código do projeto e todas as bibliotecas necessárias para a execução do aplicativo. Para obter mais informações, consulte Implantação.
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:
A implantação em Go requer a Azure Functions Core Tools versão 4.12 ou posterior. Execute func --version para verificar sua versão instalada.
Você pode usar a CLI do Azure para carregar um arquivo de pacote de implantação no compartilhamento de implantação de um aplicativo de funções no Azure. Para fazer essa implantação, você deve produzir um arquivo de pacote .zip que pode ser executado quando o pacote é montado em seu aplicativo.
Esse arquivo de pacote deve conter todos os arquivos de saída de build e as bibliotecas referenciadas necessárias para a execução do projeto.
Para projetos com um grande número de bibliotecas, empacote a raiz do arquivo de projeto e solicite um build remoto.
Para projetos Python, empacote a raiz do arquivo de projeto e sempre solicite um build remote. O uso de um build remoto impede possíveis problemas que podem ocorrer quando você cria um projeto no Windows a ser implantado no Linux.
Para projetos go, use as Ferramentas Principais para criar um pacote de .zip pronto para execução localmente e, em seguida, implante esse pacote com o CLI do Azure. Não solicite um build remoto para pacotes Go criados por func pack.
Usando sua ferramenta de desenvolvimento preferencial, crie o projeto de código.
Crie um arquivo .zip que contenha a saída do diretório de build. Para obter mais informações, consulte a estrutura do Project.
Quando necessário, entre em sua conta Azure e selecione a assinatura ativa usando o comando
az login.az loginExecute o
az functionapp deployment source config-zipcomando para implantar o pacote de aplicativos localizado no relativo<FILE_PATH>.az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP>
Usando sua ferramenta de desenvolvimento preferencial, crie o projeto de código.
Crie um arquivo .zip que contenha a saída do diretório de build. Para obter mais informações, consulte Estrutura de pastas.
Quando necessário, entre em sua conta Azure e selecione a assinatura ativa usando o comando
az login.az loginExecute o
az functionapp deployment source config-zipcomando para implantar o pacote de aplicativos localizado no relativo<FILE_PATH>.az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP>
Crie um arquivo .zip que contenha o diretório raiz do projeto de código. Para obter mais informações, consulte Estrutura de pastas.
Quando necessário, entre em sua conta Azure e selecione a assinatura ativa usando o comando
az login.az loginExecute o
az functionapp deployment source config-zipcomando para implantar o pacote de aplicativos localizado no relativo<FILE_PATH>.az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP>
Crie um arquivo .zip que contenha o diretório raiz do projeto de código. Para obter mais informações, consulte Estrutura de pastas.
Quando necessário, entre em sua conta Azure e selecione a assinatura ativa usando o comando
az login.az loginExecute o
az functionapp deployment source config-zipcomando para implantar o pacote de aplicativos localizado no relativo<FILE_PATH>.az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP> --build-remote trueCertifique-se de definir
--build-remote truepara executar um build remoto.
Crie um arquivo .zip que contenha o diretório raiz do projeto de código. Para obter mais informações, consulte Estrutura de pastas.
Quando necessário, entre em sua conta Azure e selecione a assinatura ativa usando o comando
az login.az loginExecute o
az functionapp deployment source config-zipcomando para implantar o pacote de aplicativos localizado no relativo<FILE_PATH>.az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP> --build-remote trueCertifique-se de definir
--build-remote truepara executar um build remoto.
Na pasta do projeto raiz, execute este comando core tools para criar e empacotar seu projeto Go:
func packPor padrão, o arquivo .zip de saída tem o mesmo nome da pasta do projeto.
Quando necessário, entre em sua conta do Azure e selecione a assinatura ativa usando o
az logincomando.az loginExecute o
az functionapp deployment source config-zipcomando para implantar o pacote localizado em<ZIP_FILE_PATH>.az functionapp deployment source config-zip --resource-group <RESOURCE_GROUP> --name <APP_NAME> --src <ZIP_FILE_PATH>
Criar e implantar seu aplicativo usando o Maven
Você pode usar o Maven para criar um aplicativo de funções hospedado no Flex Consumption e os 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.xmle 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ê paga 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 Azure usando o CLI do Azure.
az loginO comando
az loginconecta você à sua 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:deployO Maven usa configurações no modelo
pom.xmlpara criar seu aplicativo de funções em um plano de Consumo Flex em 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.
Criar e implantar seu aplicativo Go
Os aplicativos de funções Go têm suporte apenas no plano de consumo flex. Para criar, executar e implantar um aplicativo de funções Go, consulte Criar uma função Go na linha de comando. Para obter detalhes de estrutura de projeto e implantação específicas do Go, consulte a referência do desenvolvedor Go.
Configurar a integração de rede virtual
Você pode habilitar a integração de rede virtual para seu aplicativo em um plano de Consumo Flex ao criar seu aplicativo ou em um momento posterior. Antes de habilitar a integração de rede virtual, examine o comportamento de rede e os requisitos de sub-rede específicos do Consumo Flex.
Como funciona a conectividade do Flex Consumption
As instâncias de Consumo Flexível não usam, cada uma, um endereço IP exclusivo da sub-rede com a qual você integra o aplicativo. Em vez disso, um pool de gateways de rede gerenciados pela plataforma (interno à infraestrutura do Flex Consumption) usa endereços IP da sub-rede para atender todos os aplicativos integrados a essa sub-rede. Essa arquitetura de multiplexação de IP é fundamentalmente diferente dos planos Premium, em que cada instância usa um endereço IP da sub-rede.
A diretriz de 40 IPs por aplicativo garante que haja endereços IP suficientes para o pool de gateways de plataforma e outros componentes de infraestrutura, mas não é um limite imposto. Planeje esse mínimo ao dimensionar sua sub-rede, mas entenda que o consumo real de IP normalmente é menor. A plataforma aloca dinamicamente IPs de gateway compartilhado à medida que os aplicativos integrados à sub-rede são escalados horizontalmente.
Dimensionamento e requisitos de sub-rede
Escolha uma sub-rede com tamanho adequado para seus aplicativos Flex Consumption. A tabela a seguir fornece diretrizes com base em seu cenário:
| Scenario | CIDR recomendado | IPs utilizáveis | Observações |
|---|---|---|---|
| Aplicativo Flex Único | /27 |
27 | Tamanho mínimo de sub-rede com suporte para um aplicativo |
| Vários aplicativos Flex em uma sub-rede | /26 |
59 | Recomendado ao hospedar vários aplicativos e para cargas de trabalho de alta escala (mais de 1.000 instâncias); fornece capacidade de gateway adequada |
Delegação de sub-rede
- Delegue a sub-rede para
Microsoft.App/environments. Essa delegação difere dos planos Premium e Dedicado, que usamMicrosoft.Web/serverFarms. -
Registre o provedor de recursos
Microsoft.Appna assinatura.
Restrições de uso de sub-rede
- A sub-rede ainda não pode ser usada para pontos de extremidade privados ou pontos de extremidade de serviço e não pode ser delegada a outros planos ou serviços de hospedagem.
- Você não pode compartilhar a mesma sub-rede entre um ambiente Aplicativos de Contêiner do Azure e um aplicativo de Consumo Flex.
- Os nomes de sub-rede não podem conter o caractere de sublinhado (
_). Isso é uma limitação atual do plano Flex Consumption.
Compartilhamento de sub-rede
- Você pode compartilhar a mesma sub-rede com mais de um aplicativo em execução em um plano de Consumo Flex. No entanto, 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. Considere a demanda agregada ao empacotar vários aplicativos em uma sub-rede pequena.
- A sub-rede e o aplicativo devem estar na mesma região.
Alocação e planejamento de IP
- Os aplicativos de Consumo Flex não atribuem um endereço IP exclusivo para cada instância. Em vez disso, um conjunto de gateways de rede usa endereços IP da sub-rede. A diretriz de reserva de 40 IPs por aplicativo ajuda a garantir que haja endereços IP suficientes para o pool de gateway e outros componentes de infraestrutura, mas o uso real normalmente é menor.
- Uma
/27sub-rede (27 IPs utilizáveis) é suficiente para um único aplicativo com suporte a até 1.000 instâncias devido à multiplexação de IP. Para múltiplos aplicativos ou cargas de trabalho em grande escala, use uma sub-rede/26para fornecer capacidade de gateway adequada. - Quando muitos aplicativos compartilham uma sub-rede e são escalados horizontalmente com tráfego de saída significativo, a taxa de transferência de saída de rede pode se tornar um gargalo, em vez de os endereços IP serem esgotados. Avalie o desempenho em sua escala de produção planejada.
Habilitar a integração de rede virtual ao criar o aplicativo
Os exemplos nesta seção pressupõem que sua conta já contém uma rede virtual e uma sub-rede.
Habilite a integração de rede virtual executando o comando az functionapp create e incluindo os parâmetros --vnet e --subnet. A sub-rede deve ser delegada para Microsoft.App/environments e deve ter pelo menos /27 de tamanho. Para obter mais informações, consulte o dimensionamento e os requisitos da Sub-rede.
Crie a rede virtual e a sub-rede, se você ainda não tiver uma.
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--vnete--subnet, como neste exemplo:az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime go --runtime-version 1.0 --functions-version 4 --vnet <VNET_RESOURCE_ID> --subnet <SUBNET_NAME> az resource update --resource-group <RESOURCE_GROUP> --resource-type Microsoft.Web/sites --name <APP_NAME> --set properties.siteConfig.http20Enabled=falseO comando
az resource updatedesabilita o HTTP/2 no aplicativo de função, o que é necessário durante a versão prévia pública do Go.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: HTTP para Hubs de Eventos usando a integração da rede virtual
- Consumo Flex: disparado do Barramento de Serviço usando a integração de rede virtual
Modificar ou remover a integração de rede virtual
Você pode adicionar, alterar ou remover a integração de rede virtual para 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>
Solucionar problemas de desempenho de rede
Quando um aplicativo Flex Consumption é integrado a uma sub-rede menor do que o recomendado, você pode enfrentar degradação no desempenho à medida que o aplicativo é escalado. Esse problema também pode acontecer se você integrar muitos aplicativos à mesma sub-rede quando eles são escalados horizontalmente e têm tráfego de saída significativo.
Sintomas de sub-redes subdimensionadas
Monitore esses sintomas, que indicam que a capacidade de saída em vez de endereços IP é o fator limitante:
- Aumento da latência em chamadas de saída para dependências
- Tempo limite de conexão para serviços externos
- Esses problemas aumentam à medida que o aplicativo escala, não na forma de uma queda repentina
Importante
A expansão em si não é bloqueada pelo tamanho da sub-rede. O aplicativo continua a adicionar instâncias mesmo que a sub-rede seja subdimensionada. Ocorre degradação do desempenho em vez de um limite rígido de escalabilidade.
Monitoramento e mitigação
- Application Insights com métricas de latência da dependências de saída: em que essa métrica fornece um sinal de aviso antecipado para sub-redes subdimensionadas.
- Teste de carga em escala de produção antes de se estabelecer no tamanho da sub-rede para validar se o dimensionamento da sub-rede pode lidar com a carga de trabalho esperada.
- Monitor com Azure Monitor: vá para Rede Virtual>Subnet em Azure Monitor para ver dados de alocação de IP por meio de consultas Azure Resource Graph e KQL.
-
Dimensione adequadamente a sua sub-rede de acordo com as diretrizes da seção anterior. Um
/27mínimo é fortemente recomendado; um/26é recomendado para vários aplicativos.
Observação
Use pelo menos uma /27 sub-rede para garantir a estabilidade adequada da plataforma. Sub-redes significativamente menores do que /27 podem apresentar problemas de criação de gateway sem mensagem de erro explícita.
Definir configurações de implantação
No plano Consumo Flex, um contêiner no Armazenamento de Blobs do Azure armazena o pacote de implantação com o código da sua aplicação. Por padrão, as implantações usam a mesma conta de armazenamento (AzureWebJobsStorage) e cadeia de conexão que o runtime do Functions usa para manter seu aplicativo. A configuração DEPLOYMENT_STORAGE_CONNECTION_STRING do aplicativo armazena a cadeia de conexão. No entanto, você pode designar um contêiner de blob em uma conta de armazenamento separada como a fonte de implantação para 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.
- 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 aplicativo 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 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:
- Como prática recomendada de segurança, use identidades gerenciadas ao se conectar a Armazenamento do Azure de seus aplicativos. Para mais informações, consulte as Conexões.
- 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, vincula a identidade fornecida ao aplicativo de funções. Você também atribui a função
Storage Blob Data Contributorem escopo da conta de armazenamento da implantação à identidade. - Quando você usa uma identidade gerenciada atribuída pelo sistema, cria uma identidade quando uma identidade atribuída pelo sistema válida ainda não existe em seu aplicativo. Quando há uma identidade atribuída pelo sistema, você atribui a função
Storage Blob Data Contributorem escopo da conta de armazenamento da implantação à identidade.
Para definir as configurações de implantação ao criar seu aplicativo de funções no plano Consumo Flex:
Use o az functionapp create comando e forneça estas opções extras 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 |
Ao usar StorageAccountConnectionString, defina esse parâmetro como o nome da configuração de aplicativo que contém a cadeia de conexão para a conta de armazenamento da implantação. Quando você configurar UserAssignedIdentity, configure este parâmetro com o nome do ID de recurso da identidade que 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-account <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 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_ACCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME>
Configurar a memória da instância
Defina o tamanho da memória da instância do seu plano Flex Consumption ao criar o aplicativo. Para obter mais informações sobre tamanhos com suporte, consulte tamanhos de 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 az functionapp scale config set comando para alterar a configuração de tamanho de memória da instância para 512 MB:
az functionapp scale config set --resource-group <resourceGroup> --name <APP_NAME> --instance-memory 512
Definir contagens de instâncias sempre prontas
Defina um número específico de 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 disparadas por HTTP no aplicativo são dimensionadas juntas em instâncias próprias. -
durable- todas as funções disparadas por Durável (Orquestração, Atividade, Entidade) no aplicativo são escaladas juntas em suas próprias instâncias. -
blob- todas as funções disparadas por blob (Grade de Eventos) no aplicativo são escaladas juntas em instâncias próprias.
Use http, durableou 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, configure o Always Ready para cada função individualmente usando o formato function:<FUNCTION_NAME>=n.
Para definir uma ou mais designações de instância sempre prontas, use o --always-ready-instances parâmetro com o az functionapp create comando. Este exemplo define a contagem de instâncias sempre pronta para todas as funções disparadas por HTTP como 10:
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --always-ready-instances http=10
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --runtime go --runtime-version 1.0 --functions-version 4 --flexconsumption-location <REGION> --always-ready-instances http=10
az resource update --resource-group <RESOURCE_GROUP> --resource-type Microsoft.Web/sites --name <APP_NAME> --set properties.siteConfig.http20Enabled=false
O comando az resource update desabilita o HTTP/2 no aplicativo de funções, o que é necessário durante a versão prévia pública do Go.
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-account <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --always-ready-instances durable=3 function:function5=2
Este exemplo define o número de instâncias sempre prontas como 2 para uma função acionada pelo Barramento de Serviço chamada function5:
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --runtime go --runtime-version 1.0 --functions-version 4 --flexconsumption-location <REGION> --always-ready-instances function:function5=2
az resource update --resource-group <RESOURCE_GROUP> --resource-type Microsoft.Web/sites --name <APP_NAME> --set properties.siteConfig.http20Enabled=false
O comando az resource update desabilita o HTTP/2 no aplicativo de função, o que é necessário durante a versão prévia pública do Go.
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
Se você não definir limites específicos, o sistema define os valores padrão de simultaneidade HTTP para aplicativos do plano Flex Consumption com base na configuração do tamanho da instância. Para obter mais informações, consulte Simultaneidade do gatilho HTTP.
Veja como você define os 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 um valor de simultaneidade HTTP, o aplicativo manterá esse valor, apesar de quaisquer alterações na configuração de tamanho da instância do aplicativo.
Definir a estratégia de atualização de site
O plano de Consumo Flexível dá suporte exclusivo a duas estratégias de atualização de site diferentes que controlam como seu aplicativo de funções lida com implantações de código e alterações de configuração. Por padrão, os aplicativos do plano Flex Consumption usam a estratégia Recreate, que encerra as funções que estão sendo executadas durante as implantações. Para habilitar implantações com zero tempo de inatividade, configure a estratégia RollingUpdate. Para obter mais informações, consulte Estratégias de Atualização de Site no Flex Consumption.
Observação
A configuração de estratégia de atualização de site está atualmente em versão prévia pública e só está disponível por meio de modelos Bicep ou ARM. Você não pode definir essa configuração usando o CLI do Azure, Azure portal ou Visual Studio Code.
O CLI do Azure atualmente não dá suporte à configuração de estratégia de atualização de site. Use modelos Bicep ou ARM, conforme descrito na Configurando estratégia de atualização de site.
Configurar certificados com site em escopo
O Flex Consumption apresenta certificados com escopo no site, um novo modelo em que os certificados TLS/SSL ficam restritos ao seu aplicativo de funções individual, em vez de serem compartilhados entre aplicativos no mesmo espaço da Web. A tabela a seguir mostra os tipos de certificado com suporte e como cada um deles é adicionado ao seu aplicativo de funções:
| Tipo de certificado | Como adicionar | Conta para |
|---|---|---|
| Certificado Gerenciado do Serviço de Aplicativo | Criado no portal para um domínio personalizado | Limite de certificado privado |
| Certificado do Serviço de Aplicativo | Comprado por meio de Azure e importado | Limite de certificado privado |
| Certificado importado do Key Vault | Importado de Azure Key Vault | Limite de certificado privado |
| Certificado privado carregado (.pfx) | Carregado como um arquivo PFX | Limite de certificado privado |
| Certificado público carregado (.cer) | Carregado como um arquivo CER | Limite de certificado público |
Considerações sobre certificados com escopo de site
- O suporte para usar certificados com site em escopo com aplicativos em execução em um plano Consumo Flexível está em versão preliminar no momento.
- Os aplicativos existentes criados antes de esse recurso ficar disponível atualmente não têm um caminho de migração para certificados. Para usar certificados com site em escopo, crie um novo aplicativo de função Consumo Flexível.
- O CLI do Azure ainda não oferece suporte ao gerenciamento de certificados com escopo de site. Enquanto isso, use os modelos Azure portal ou ARM/Bicep para gerenciar certificados.
- Cada aplicativo dá suporte a no máximo três certificados privados e três certificados públicos.
- Certificados privados devem ser exportados como um arquivo PFX protegido por senha que contenha todos os certificados intermediários e o certificado raiz na cadeia de certificados.
- Atualmente, não há suporte para criptografia E2E (ponta a ponta).
- Há suporte para certificados ECC (Criptografia de Curva Elíptica) quando carregados como um PFX.
- Como o Flex Consumption é executado em Linux, seu código deve carregar certificados a partir de caminhos de arquivo, em vez de carregá-los do repositório de certificados do Windows. Primeiro, siga as etapas em Tornar um certificado acessível ao seu código para carregar certificados no ambiente de runtime. Em seguida, para obter diretrizes sobre como ler arquivos de certificado do código do aplicativo, consulte Carrege certificados em contêineres do Linux/Windows.
Adicionar um certificado
Você pode adicionar certificados ao seu aplicativo de várias maneiras, dependendo do tipo de certificado. Adicione certificados gerenciados e Azure gratuitos diretamente no portal.
Selecione uma das abas a seguir para ver como adicionar um certificado gerenciado, privado (.pfx), público (.cer) ou gerenciado pelo Key Vault.
- Associar certificado gerenciado
- Carregar privado (.pfx)
- Importar do Key Vault
- Fazer upload do certificado público (.cer)
Para criar e associar um certificado gerenciado gratuito para um domínio personalizado:
No portal do Azure, acesse seu aplicativo de funções.
No menu à esquerda, expanda Configurações e selecione Domínios personalizados.
Selecione Adicionar domínio personalizado.
Em certificado TLS/SSL, selecione Certificado Gerenciado do Serviço de Aplicativo.
Em Tipo TLS/SSL, selecione SSL SNI.
Conclua a validação de domínio e selecione Adicionar.
O certificado gerenciado é criado e associado ao domínio personalizado automaticamente. Pode levar até 10 minutos para que o certificado seja emitido.
Tornar um certificado acessível ao seu código
Depois de adicionar um certificado, você deve torná-lo explicitamente acessível ao seu código de função.
No portal do Azure, acesse seu aplicativo de funções.
No menu à esquerda, expanda Configurações e selecione Certificados.
Selecione Traga seus próprios certificados (.pfx) ou certificados de chave pública (.cer).
Selecione ... (reticências) ao lado do certificado que você deseja tornar acessível e escolha Tornar acessível ao código do aplicativo.
Quando você habilita Acessível ao código do aplicativo, a plataforma carrega o certificado no ambiente de execução em todas as instâncias, na forma de um arquivo.
Os arquivos de certificado são nomeados por impressão digital e colocados nestes diretórios:
| Tipo de certificado | Caminho |
|---|---|
| Certificados públicos (.cer) | /var/ssl/certs |
| Certificados privados (.pfx) | /var/ssl/private |
Renovar ou atualizar um certificado
Certificados gerenciados gratuitos são renovados automaticamente pela plataforma. Para todos os outros certificados, a forma como você atualiza um certificado expirando depende da fonte do certificado:
Certificates importados do Key Vault: quando você renova um certificado no Key Vault, o trabalho em segundo plano da plataforma sincroniza automaticamente o certificado atualizado com seu aplicativo de funções dentro de 24 horas. A nova versão do certificado é carregada para todas as instâncias sem etapas manuais.
Certificados carregados: carregue o novo certificado e, em seguida, torne-o acessível ao código do aplicativo. Se o código fizer referência ao certificado por impressão digital, atualize as referências de impressão digital nas configurações de código ou 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, consulte:
Se você ainda não tiver feito isso, entre no Azure:
az loginO comando
az loginconecta você à sua conta do Azure.Use o comando
az functionapp list-flexconsumption-locationspara examinar a lista de regiões que atualmente suportam o Consumo Flex em ordem alfabética.az functionapp list-flexconsumption-locations --query "sort_by(@, &name)[].{Region:name}" -o table
Quando você cria um aplicativo no portal Azure ou usando Visual Studio Code, a lista de regiões exclui as regiões atualmente sem suporte.
Monitorar seu aplicativo no Azure
O Azure Monitor fornece estes conjuntos distintos de métricas para ajudá-lo a entender melhor como seu aplicativo de funções é executado no Azure:
- Métricas de plataforma: fornece insights de nível de infraestrutura
- Application Insights: fornece insights no nível do código, incluindo rastreamentos e logs de erros.
Se você habilitar o Application Insights em seu aplicativo, poderá:
- Acompanhar os tempos detalhados de execução e as dependências
- Monitorar o desempenho de função específica individual
- Analisar falhas e exceções
- Correlacionar métricas de plataforma com o comportamento do aplicativo usando consultas personalizadas
Para saber mais, consulte Monitorar Azure Functions.
Métricas com suporte
Execute este script para exibir todas as métricas da plataforma que estão disponíveis no momento para seu aplicativo:
appId=$(az functionapp show --name <APP_NAME> --resource-group <RESOURCE_GROUP> --query id -o tsv)
az monitor metrics list-definitions --resource $appId --query "[].{Name:name.localizedValue,Value:name.value}" -o table
Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> pelos nomes do seu grupo de recursos e do aplicativo de funções. Esse script obtém a ID de aplicativo totalmente qualificada e retorna as métricas de plataforma disponíveis em uma tabela.
Exibir métricas
Você pode examinar as métricas atuais no portal do Azure ou usando a CLI do Azure.
No portal do Azure, você também pode criar alertas de métricas e fixar gráficos e outros relatórios em dashboards no portal.
Use esse script para gerar um relatório das métricas atuais para seu aplicativo:
appId=$(az functionapp show --name <APP_NAME> --resource-group <RESOURCE_GROUP> --query id -o tsv)
echo -e "\nAlways-ready and on-demand execution counts..."
az monitor metrics list --resource $appId --metric "AlwaysReadyFunctionExecutionCount" --interval PT1H --output table
az monitor metrics list --resource $appId --metric "OnDemandFunctionExecutionCount" --interval PT1H --output table
echo -e "\nExecution units (MB-ms) in always-ready and on-demand execution counts..."
az monitor metrics list --resource $appId --metric "AlwaysReadyFunctionExecutionUnits" --interval PT1H --output table
az monitor metrics list --resource $appId --metric "OnDemandFunctionExecutionUnits" --interval PT1H --output table
echo -e "\nAlways-ready resource utilization..."
az monitor metrics list --resource $appId --metric "AlwaysReadyUnits" --interval PT1H --output table
echo -e "\nMemory utilization..."
az monitor metrics list --resource $appId --metric "AverageMemoryWorkingSet" --interval PT1H --output table
az monitor metrics list --resource $appId --metric "MemoryWorkingSet" --interval PT1H --output table
echo -e "\nInstance count and CPU utilization..."
az monitor metrics list --resource $appId --metric "InstanceCount" --interval PT1H --output table
az monitor metrics list --resource $appId --metric "CpuPercentage" --interval PT1H --output table
Para saber mais sobre as métricas do Azure Functions, consulte Monitorar o Azure Functions.
Exibir logs
Ao conectar seu aplicativo ao Application Insights, você pode analisar melhor o desempenho do aplicativo e solucionar problemas durante a execução. No recurso do Application Insights para seu aplicativo:
- Use o Desempenho para analisar os tempos de resposta e as dependências.
- Use falhas para identificar os erros que ocorrem após a migração.
- Crie consultas personalizadas em Logs para analisar o comportamento da função.
Por exemplo, use essa consulta para comparar as taxas de êxito por instância:
Use esta consulta para comparar as taxas de êxito por instância:
requests
| where timestamp > ago(7d)
| summarize successCount=countif(success == true), failureCount=countif(success == false) by bin(timestamp, 1h), cloud_RoleName
| render timechart
Use esta consulta para analisar o número de instâncias que estão processando ativamente sua função:
let _startTime = ago(20m); //Adjust start time as needed
let _endTime = now(); //Adjust end time as needed
let bins = 1s; //Adjust bin as needed - this will give per second results
requests
| where operation_Name == 'EventHubsTrigger' //Replace with the name of the function in the function app that you are analyzing
| where timestamp between(_startTime .. _endTime)
| make-series dcount(cloud_RoleInstance) default=0 on timestamp from _startTime to _endTime step bins
| render columnchart
Ver os custos
Como você pode ajustar seu aplicativo para ajustar o desempenho versus os custos operacionais, é importante acompanhar os custos associados à execução do aplicativo no plano de Consumo Flex.
Para exibir os custos atuais:
Na página do aplicativo de funções no portal do Azure, selecione o link do grupo de recursos.
Na página do grupo de recursos, selecione Gerenciamento de Custos>Análise de Custos.
Examine os custos atuais e a trajetória de custo do próprio aplicativo.
Opcionalmente, selecione Gerenciamento de Custos>Alertas e então + Adicionar para criar um novo alerta para o aplicativo.
Ajustar seu aplicativo
O plano de Consumo Flex fornece várias configurações que você pode ajustar para refinar o desempenho do seu aplicativo. O desempenho real e os custos podem variar de acordo com os padrões de carga de trabalho e a configuração específicos do aplicativo. Por exemplo, tamanhos de instância de memória mais altos podem melhorar o desempenho de operações com uso intensivo de memória, mas a um custo mais alto por período ativo.
Aqui estão alguns ajustes que você pode fazer para ajustar o desempenho versus o custo:
- Ajuste as configurações de simultaneidade para maximizar a taxa de transferência por instância.
- Escolha o tamanho de memória apropriado para sua carga de trabalho. Tamanhos de memória mais altos custam mais, mas podem melhorar o desempenho.