Trabalhando com contêineres e Azure Functions

Este artigo demonstra o suporte que o Azure Functions fornece para trabalhar com aplicativos de função em contêiner em execução em um ambiente de Aplicativos de Contêiner do Azure. Para obter mais informações, consulte Aplicativos de contêiner do Azure hospedando o Azure Functions.

Este artigo demonstra o suporte que o Azure Functions fornece para trabalhar com aplicativos de função em execução em contêineres Linux.

Escolha o ambiente de hospedagem para seu aplicativo de função em contêiner na parte superior do artigo.

Se você quiser ir direto para dentro, o artigo a seguir mostra como criar sua primeira função em execução em um contêiner Linux e implantar a imagem de um registro de contêiner em um serviço de hospedagem do Azure com suporte:

Criando aplicativos de função em contêiner

O Functions facilita a implantação e execução de seus aplicativos funcionais como contêineres Linux, que você cria e mantém. O Functions mantém um conjunto de imagens base específicas do idioma que você pode usar ao criar aplicativos de função em contêiner.

Importante

Ao criar seus próprios contêineres, é necessário manter a imagem base do contêiner atualizada para a imagem base suportada mais recente. As imagens de base com suporte para o Azure Functions são específicas do idioma e são encontradas nos repositórios de imagem base do Azure Functions.

A equipa do Functions está empenhada em publicar atualizações mensais para estas imagens base. As atualizações regulares incluem as últimas atualizações de versões secundárias e correções de segurança para o tempo de execução e os idiomas do Functions. Você deve atualizar regularmente seu contêiner a partir da imagem base mais recente e reimplantar a versão atualizada do contêiner.

Para obter um exemplo completo de como criar o aplicativo de função em contêiner local a partir da linha de comando e publicar a imagem em um registro de contêiner, consulte Criar um aplicativo de função em um contêiner local.

Gerar o Dockerfile

As ferramentas de funções fornecem uma opção do Docker que gera um Dockerfile com seu projeto de código de funções. Você pode usar esse arquivo com o Docker para criar suas funções em um contêiner que deriva da imagem base correta (idioma e versão).

A maneira como você cria um Dockerfile depende de como você cria seu projeto.

  • Ao criar um projeto do Functions usando as Ferramentas Principais do Azure Functions, inclua a --docker opção ao executar o func init comando, como no exemplo a seguir:

    func init --docker
    
  • Você também pode adicionar um Dockerfile a um projeto existente usando a --docker-only opção quando executa o func init comando em uma pasta de projeto existente, como no exemplo a seguir:

    func init --docker-only
    

Para obter um exemplo completo, consulte Criar um aplicativo de função em um contêiner local.

Criar seu aplicativo de função em um contêiner

Com um Dockerfile gerado por funções em seu projeto de código, você pode usar o Docker para criar o aplicativo de função em contêiner em seu computador local. O comando a seguir docker build cria uma imagem de suas funções em contêiner do projeto no diretório local:

docker build --tag <DOCKER_ID>/<IMAGE_NAME>:v1.0.0 .

Para obter um exemplo de como criar o contêiner, consulte Criar a imagem do contêiner e verificar localmente.

Atualizar uma imagem no registo

Quando você faz alterações em seu projeto de código de funções ou precisa atualizar para a imagem base mais recente, você precisa reconstruir o contêiner localmente e publicar novamente a imagem atualizada no registro de contêiner escolhido. O comando a seguir reconstrói a imagem da pasta raiz com um número de versão atualizado e a envia para o registro:

az acr build --registry <REGISTRY_NAME> --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.1 .

Substitua <REGISTRY_NAME> pela instância do Registro de Contêiner e <LOGIN_SERVER> pelo nome do servidor de login.

Neste ponto, você precisa atualizar uma implantação existente para usar a nova imagem. Você pode atualizar o aplicativo de função para usar a nova imagem usando a CLI do Azure ou no portal do Azure:

az functionapp config container set --image <IMAGE_NAME> --registry-password <SECURE_PASSWORD>--registry-username <USER_NAME> --name <APP_NAME> --resource-group <RESOURCE_GROUP>

Neste exemplo, <IMAGE_NAME> é o nome completo da nova imagem com versão. Os registos privados exigem que forneça um nome de utilizador e uma palavra-passe. Armazene essas credenciais com segurança.

Você também deve considerar habilitar a implantação contínua.

Criar portal do Azure usando contêineres

Ao criar um aplicativo de função no portal do Azure, você pode optar por implantar o aplicativo de função a partir de uma imagem em um registro de contêiner. Para saber como criar um aplicativo de função em contêiner em um registro de contêiner, consulte Criar seu aplicativo de função em um contêiner.

As etapas a seguir criam e implantam um aplicativo de função em contêiner existente a partir de um registro de contêiner.

  1. A partir do menu do portal do Azure ou a partir da Home page, selecione Criar um recurso.

  2. Na página Novo, selecione Aplicativo de função de computação>.

  3. Em Selecione uma opção de hospedagem, escolha Plano Premium>Selecionar.

    Isso cria um aplicativo de função hospedado pelo Azure Functions no plano Premium, que dá suporte ao dimensionamento dinâmico. Você também pode optar por executar em um plano do Serviço de Aplicativo, mas nesse tipo de plano dedicado você deve gerenciar o dimensionamento do seu aplicativo de função.

  4. Na página Noções básicas, use as configurações do aplicativo de função conforme especificado na tabela a seguir:

    Definição Valor sugerido Description
    Subscrição a sua subscrição A assinatura na qual você cria seu aplicativo de função.
    Grupo de Recursos myResourceGroup Nome para o novo grupo de recursos no qual você cria seu aplicativo de função. Você deve criar um grupo de recursos porque há limitações conhecidas ao criar novos aplicativos de função em um grupo de recursos existente.
    Nome da Aplicação de Funções Nome exclusivo* Nome que identifica a sua aplicação Function App nova. Os carateres válidos são a-z (não sensível a maiúsculas e minúsculas), 0-9 e -.
    Deseja implantar código ou imagem de contêiner? Imagem de contentor Implante um aplicativo de função em contêiner a partir de um registro. Para criar um aplicativo de função no Registro, consulte Criar um aplicativo de função em um contêiner local.
    Região Região preferida Selecione uma região perto de você ou perto de outros serviços que suas funções possam acessar.
    Plano Linux Novo plano (padrão) Cria um novo plano Premium para hospedar seu aplicativo. Você também pode escolher um plano premium existente.
    Plano de preços Elástico Premium EP1 EP1 é o plano mais acessível. Você pode escolher um plano maior, se precisar.
    Redundância de zona Desativado Você não precisa desse recurso em um aplicativo que não seja de produção.

    *O nome do aplicativo deve ser globalmente exclusivo entre todos os aplicativos hospedados do Azure Functions.

  5. Aceite as opções padrão de criação de uma nova conta de armazenamento na guia Armazenamento e uma nova instância do Application Insight na guia Monitoramento . Você também pode optar por usar uma conta de armazenamento existente ou uma instância do Application Insights.

  6. Selecione Rever + criar para rever as seleções de configuração da aplicação.

  7. Na página Rever + criar, reveja as definições e, em seguida, selecione Criar para provisionar a aplicação de função utilizando uma imagem base predefinida.

  8. Depois que o recurso do aplicativo de função for criado, selecione Ir para o recurso e, na página do aplicativo de função, selecione Centro de implantação.

  9. No Centro de implantação, você pode conectar seu registro de contêiner como a origem da imagem. Você também pode habilitar as Ações do GitHub ou os Pipelines do Azure para uma implantação contínua mais robusta de atualizações para seu contêiner no Registro.

Criar portal do Azure usando contêineres

Ao criar um aplicativo de função hospedado em Aplicativos de Contêiner no portal do Azure, você pode optar por implantar seu aplicativo de função a partir de uma imagem em um registro de contêiner. Para saber como criar um aplicativo de função em contêiner em um registro de contêiner, consulte Criar seu aplicativo de função em um contêiner.

As etapas a seguir criam e implantam um aplicativo de função em contêiner existente a partir de um registro de contêiner.

  1. A partir do menu do portal do Azure ou a partir da Home page, selecione Criar um recurso.

  2. Na página Novo, selecione Aplicativo de função de computação>.

  3. Em Selecione uma opção de hospedagem, escolha Ambiente de aplicativos>de contêiner Selecionar.

  4. Na página Noções básicas, use as configurações do aplicativo de função conforme especificado na tabela a seguir:

    Definição Valor sugerido Description
    Subscrição a sua subscrição A assinatura na qual você cria seu aplicativo de função.
    Grupo de Recursos myResourceGroup Nome para o novo grupo de recursos no qual você cria seu aplicativo de função. Você deve criar um grupo de recursos porque há limitações conhecidas ao criar novos aplicativos de função em um grupo de recursos existente.
    Nome da Aplicação de Funções Nome exclusivo* Nome que identifica a sua aplicação Function App nova. Os carateres válidos são a-z (não sensível a maiúsculas e minúsculas), 0-9 e -.
    Região Região preferida Selecione uma região perto de você ou perto de outros serviços que suas funções possam acessar.

    *O nome do aplicativo deve ser exclusivo dentro do ambiente de Aplicativos de Contêiner do Azure.

  5. Ainda na página Noções básicas, aceite o novo ambiente sugerido para o ambiente de Aplicativos de Contêiner do Azure. Para minimizar custos, o novo ambiente padrão é criado em Consumo + Dedicado com o perfil de carga de trabalho padrão e sem redundância de zona. Para obter mais informações, consulte Aplicativos de contêiner do Azure hospedando o Azure Functions.

    Você também pode optar por usar um ambiente existente de Aplicativos de Contêiner. Para criar um ambiente personalizado, selecione Criar novo. Na página Criar Ambiente de Aplicativos de Contêiner, você pode adicionar perfis de carga de trabalho não padrão ou habilitar redundância de zona. Para saber mais sobre ambientes, consulte Ambientes de Aplicativos de Contêiner do Azure.

  6. Selecione a guia Implantação e desmarque Usar imagem de início rápido. Caso contrário, o aplicativo de função será implantado a partir da imagem base para o idioma do aplicativo de função.

  7. Escolha o seu tipo de imagem, pública ou privada. Escolha Privado se estiver a utilizar o Registo de Contentores do Azure ou outro registo privado. Forneça o nome da imagem , incluindo o prefixo do Registro. Se você estiver usando um registro privado, forneça as credenciais de autenticação do registro de imagem. A configuração Pública suporta apenas imagens armazenadas publicamente no Docker Hub.

  8. Em Alocação de recursos de contêiner, selecione o número desejado de núcleos de CPU e memória disponível. Se o seu ambiente tiver outros perfis de carga de trabalho adicionados, você poderá selecionar um perfil de carga de trabalho não padrão. As opções nesta página afetam o custo de hospedagem do seu aplicativo. Consulte a página de preços de Aplicativos de contêiner para estimar seus custos potenciais.

  9. Selecione Rever + criar para rever as seleções de configuração da aplicação.

  10. Na página Rever + criar, reveja as definições e, em seguida, selecione Criar para provisionar a função aplicação e implementar a imagem de contentor a partir do registo.

Trabalhar com imagens no Azure Functions

Quando o contêiner do aplicativo de função é implantado a partir de um registro, o Functions mantém informações sobre a imagem de origem.

Use os seguintes comandos para obter dados sobre a imagem ou alterar a imagem de implantação usada:

Perfis de carga de trabalho de aplicativos de contêiner

Os perfis de carga de trabalho são recursos dos Aplicativos de Contêiner que permitem controlar melhor seus recursos de implantação. O Azure Functions em Aplicativos de Contêiner do Azure também dá suporte a perfis de carga de trabalho. Para obter mais informações, consulte Perfis de carga de trabalho em Aplicativos de Contêiner do Azure.

Você também pode definir a quantidade de recursos de CPU e memória alocados para seu aplicativo.

Você pode criar e gerenciar perfis de carga de trabalho e alocações de recursos usando a CLI do Azure ou no portal do Azure.

Você habilita perfis de carga de trabalho ao criar seu ambiente de aplicativo de contêiner. Para obter um exemplo, consulte Criar um aplicativo de contêiner em um perfil.

Você pode adicionar, editar e excluir perfis em seu ambiente. Para obter um exemplo, consulte Adicionar perfis.

Ao criar um aplicativo de função em contêiner em um ambiente que tenha perfis de carga de trabalho habilitados, você também deve especificar o perfil no qual executar. Você especifica o perfil usando o --workload-profile-name parâmetro do az functionapp create comando, como neste exemplo:

az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime <LANGUAGE_STACK> --image <IMAGE_URI> --workload-profile-name <PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE> 

az functionapp create No comando, o --environment parâmetro especifica o ambiente Container Apps e o --image parâmetro especifica a imagem a ser usada para o aplicativo de função. Neste exemplo, substitua <STORAGE_NAME> pelo nome usado na seção anterior para a conta de armazenamento. Além disso, substitua <APP_NAME> por um nome globalmente exclusivo apropriado para você.

Para definir os recursos alocados ao seu aplicativo, substitua <CPU_COUNT> pelo número desejado de CPUs virtuais, com um mínimo de 0,5 até o máximo permitido pelo perfil. Para <MEMORY_SIZE>, escolha uma quantidade de memória dedicada de 1 GB até o máximo permitido pelo perfil.

Você pode usar o az functionapp container set comando para gerenciar os recursos alocados e o perfil de carga de trabalho usado pelo seu aplicativo.

az functionapp container set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --workload-profile-name  <PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE> 

Definições da aplicação

O Azure Functions permite que você trabalhe com configurações de aplicativos para aplicativos de função em contêineres da maneira padrão. Para obter mais informações, consulte Usar configurações do aplicativo.

Habilitar a implantação contínua no Azure

Quando você hospeda seu aplicativo de função em contêiner nos Aplicativos de Contêiner do Azure, há duas maneiras de configurar a implantação contínua a partir de um repositório de código-fonte:

No momento, você não pode implantar continuamente contêineres com base em alterações de imagem em um registro de contêiner. Em vez disso, você deve usar esses pipelines de implantação contínua baseados em código-fonte.

Habilitar a implantação contínua no Azure

Importante

Atualmente, a implantação baseada em Webhook não é suportada ao executar seu contêiner em um plano Elastic Premium. Se você precisar usar o método de implantação contínua descrito nesta seção, implante seu contêiner em um plano do Serviço de Aplicativo. Ao executar em um plano Elastic Premium, você precisa reiniciar manualmente seu aplicativo sempre que fizer atualizações no contêiner no repositório.

Você também pode configurar a implantação contínua a partir de um repositório de código-fonte usando o Azure Pipelines ou as Ações do GitHub.

Você pode habilitar o Azure Functions para atualizar automaticamente sua implantação de uma imagem sempre que atualizar a imagem no Registro.

  1. Use o seguinte comando para habilitar a implantação contínua e obter a URL do webhook:

    az functionapp deployment container config --enable-cd --query CI_CD_URL --output tsv --name <APP_NAME> --resource-group AzureFunctionsContainers-rg
    

    O az functionapp deployment container config comando permite a implantação contínua e retorna a URL do webhook de implantação. Você pode recuperar essa URL a qualquer momento usando o az functionapp deployment container show-cd-url comando.

    Como antes, substitua <APP_NAME> pelo nome do aplicativo de função.

  2. Copie a URL do webhook de implantação para a área de transferência.

  3. Abra o Docker Hub, faça login e selecione Repositórios na barra de navegação. Localize e selecione a imagem, selecione a guia Webhooks , especifique um nome Webhook, cole seu URL no URL do Webhook e selecione Criar.

    Captura de tela mostrando como adicionar o webhook na janela do Docker Hub.

  4. Com o conjunto de webhooks, o Azure Functions reimplanta sua imagem sempre que você a atualiza no Docker Hub.

Habilitar conexões SSH

O SSH permite a comunicação segura entre um contentor e um cliente. Com o SSH habilitado, você pode se conectar ao seu contêiner usando as Ferramentas Avançadas do Serviço de Aplicativo (Kudu). Para facilitar a conexão com seu contêiner usando SSH, o Azure Functions fornece uma imagem base que já tem o SSH habilitado. Você só precisa editar seu Dockerfile, reconstruir e reimplantar a imagem. Em seguida, você pode se conectar ao contêiner através das Ferramentas Avançadas (Kudu).

  1. No Dockerfile, acrescente a cadeia de caracteres -appservice à imagem base em sua FROM instrução, como no exemplo a seguir:

    FROM mcr.microsoft.com/azure-functions/node:4-node18-appservice
    

    Este exemplo usa a versão habilitada para SSH da imagem base do Node.js versão 18. Visite os repositórios de imagem base do Azure Functions para verificar se você está usando a versão mais recente da imagem base habilitada para SSH.

  2. Reconstrua a imagem usando o docker build comando, substitua o <DOCKER_ID> pelo ID da conta do Docker Hub, como no exemplo a seguir.

    docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
    
  3. Envie a imagem atualizada para o Docker Hub, o que deve levar consideravelmente menos tempo do que o primeiro push. Apenas os segmentos atualizados da imagem precisam ser carregados agora.

    docker push <DOCKER_ID>/azurefunctionsimage:v1.0.0
    
  4. O Azure Functions reimplanta automaticamente a imagem em seu aplicativo de funções; O processo ocorre em menos de um minuto.

  5. Em um navegador, abra https://<app_name>.scm.azurewebsites.net/ e substitua <app_name> pelo seu nome exclusivo. Este URL é o ponto de extremidade de Ferramentas Avançadas (Kudu) para seu contêiner de aplicativo de função.

  6. Entre na sua conta do Azure e selecione o SSH para estabelecer uma conexão com o contêiner. A conexão pode levar alguns momentos se o Azure ainda estiver atualizando a imagem do contêiner.

  7. Depois que uma conexão for estabelecida com seu contêiner, execute o top comando para exibir os processos em execução no momento.

    Captura de tela que mostra o comando superior do Linux em execução em uma sessão SSH.

Os artigos a seguir fornecem mais informações sobre como implantar e gerenciar contêineres: