Trabalhar com contêineres e o Azure Functions

Este artigo demonstra o suporte que o Azure Functions oferece para trabalhar com os aplicativos de função nos contêineres executados em um ambiente do Aplicativos de Contêiner do Azure. Para obter mais informações, consulte Aplicativos de Contêiner do Azure que hospedam o Azure Functions.

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

Escolha o ambiente de hospedagem para seu aplicativo de funções em contêineres na parte superior do artigo.

Se você quiser entrar diretamente, o artigo a seguir mostra como criar sua primeira função em execução em um contêiner do 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ções em contêineres

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

Importante

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

A equipe do Functions está comprometida em publicar atualizações mensais para essas imagens base. As atualizações regularem incluem as atualizações de versão secundária mais recentes e as correções de segurança para linguagens e runtime do Functions. Você deve atualizar regularmente o 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ções em contêineres local a partir da linha de comando e publicar a imagem em um registro de contêiner, consulte Criar um aplicativo de funções em um contêiner local.

Gerar o Dockerfile

As ferramentas do Functions 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 (linguagem e versão).

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

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

    func init --docker
    
  • Você também pode adicionar um Dockerfile a um projeto existente usando a opção --docker-only ao executar o comando func init 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ções em um contêiner local.

Criar seu aplicativo de funções em um contêiner

Com um Dockerfile gerado pelo Functions em seu projeto de código, você pode usar o Docker para criar o aplicativo de funções em contêineres no computador local. O comando docker build a seguir cria uma imagem de suas funções em contêineres a partir 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 de contêiner e verificar localmente.

Atualizar uma imagem no Registro

Ao fazer alterações no projeto de código de funções ou precisar atualizar a imagem base mais recente, será necessário recompilar o contêiner localmente e republicar a imagem atualizada no registro de contêiner escolhido. O comando a seguir recompila a imagem a partir da pasta raiz com um número de versão atualizado e o envia por push 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 logon.

Neste ponto, você precisará atualizar uma implantação existente para usar a nova imagem. Você poderá atualizar o aplicativo de funções 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 a versão. Os registros privados exigem que você forneça um nome de usuário e uma senha. Armazene essas credenciais com segurança.

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

Criar usando contêineres no portal do Azure

Ao criar um aplicativo de funções no Portal do Azure, você pode optar por implantar o aplicativo de funções de uma imagem em um registro de contêiner. Para saber como criar um aplicativo de funções em contêiner em um registro de contêiner, veja Criar seu aplicativo de funções em um contêiner.

As etapas a seguir criam e implantam um aplicativo de funções em contêiner existente de um registro de contêiner.

  1. No menu do portal do Azure ou na Página inicial, selecione Criar um recurso.

  2. Na página Novo, selecione Computação>Aplicativo de Funções.

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

    Isso cria um aplicativo de funções hospedado pelo Azure Functions no plano Premium, que dá suporte à escala dinâmica. Você também pode optar por executar um plano do Serviço de Aplicativo, mas nesse tipo de plano dedicado é necessário gerenciar a escala do seu aplicativo de funções.

  4. Na página Informações básicas, use as configurações do aplicativo de funções conforme especificado na seguinte tabela:

    Configuração Valor sugerido Descrição
    Assinatura Sua assinatura A assinatura com a qual você cria seu aplicativo de funções.
    Grupo de Recursos myResourceGroup Nome do novo grupo de recursos no qual você cria o aplicativo de funções. Você deve criar um grupo de recursos porque há limitações conhecidas ao criar novos aplicativos de funções em um grupo de recursos existente.
    Nome do aplicativo de funções Nome exclusivo* Nome que identifica seu novo aplicativo de funções. Os caracteres válidos são a-z (não diferencia maiúsculas de minúsculas), 0-9 e -.
    Deseja implantar o código ou a imagem de contêiner? Imagem de contêiner Implantar um aplicativo de funções em contêineres a partir de um registro. Para criar um aplicativo de funções no registro, consulte Criar um aplicativo de funções em um contêiner local.
    Região Região preferencial Selecione uma região perto de você ou perto de outros serviços que suas funções podem acessar.
    Plano do 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 Elastic Premium EP1 EP1 é o plano mais acessível. Você pode escolher um plano maior se precisar.
    Redundância de Zona Desabilitadas Você não precisa desse recurso em um aplicativo de não produção.

    *O nome do aplicativo deve ser globalmente exclusivo entre todos os aplicativos hospedados no 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 Insights na guia Monitoramento. Você também pode optar por usar uma conta de armazenamento existente ou uma instância do Application Insights.

  6. Selecione Examinar + criar para examinar as seleções de configuração do aplicativo.

  7. Na página Examinar + criar, examine as configurações e, em seguida, selecione Criar para provisionar o aplicativo de funções usando uma imagem base padrão.

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

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

Criar usando contêineres no portal do Azure

Ao criar um aplicativo de função hospedado em Aplicativos de Contêiner no Portal do Azure, você poderá optar por implantar seu aplicativo de funções de uma imagem em um registro de contêiner. Para saber como criar um aplicativo de funções em contêiner em um registro de contêiner, veja Criar seu aplicativo de funções em um contêiner.

As etapas a seguir criam e implantam um aplicativo de funções em contêiner existente de um registro de contêiner.

  1. No menu do portal do Azure ou na Página inicial, selecione Criar um recurso.

  2. Na página Novo, selecione Computação>Aplicativo de Funções.

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

  4. Na página Informações básicas, use as configurações do aplicativo de funções conforme especificado na seguinte tabela:

    Configuração Valor sugerido Descrição
    Assinatura Sua assinatura A assinatura com a qual você cria seu aplicativo de funções.
    Grupo de Recursos myResourceGroup Nome do novo grupo de recursos no qual você cria o aplicativo de funções. Você deve criar um grupo de recursos porque há limitações conhecidas ao criar novos aplicativos de funções em um grupo de recursos existente.
    Nome do aplicativo de funções Nome exclusivo* Nome que identifica seu novo aplicativo de funções. Os caracteres válidos são a-z (não diferencia maiúsculas de minúsculas), 0-9 e -.
    Região Região preferencial Selecione uma região perto de você ou perto de outros serviços que suas funções podem acessar.

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

  5. Ainda na página Básico, aceite o novo ambiente sugerido para o ambiente de Aplicativos de Contêiner do Azure. Para minimizar os custos, o novo ambiente padrão é criado no 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 que hospedam o Azure Functions.

    Você também pode escolher usar um ambiente de Aplicativos de Contêiner existente. 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 a redundância de zona. Para saber mais sobre ambientes, consulte Ambientes dos 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ções será implantado a partir da imagem base para a linguagem do aplicativo de funções.

  7. Escolha seu Tipo de imagem, público ou privado. Escolha Privado se estiver usando o Registro de Contêiner do Azure ou algum outro registro 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 dá suporte apenas a imagens armazenadas publicamente no Hub do Docker.

  8. Em alocação de recursos de contêiner, selecione o número desejado de núcleos de CPU e a memória disponível. Se o 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 aplicativo. Consulte a página de preços de Aplicativos de Contêiner para estimar os custos potenciais.

  9. Selecione Examinar + criar para examinar as seleções de configuração do aplicativo.

  10. Na página Examinar + criar, examine suas configurações e selecione Criar para provisionar o aplicativo de funções e implantar sua imagem de contêiner no registro.

Trabalhar com imagens no Azure Functions

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

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

Perfis de carga de trabalho dos Aplicativos de Contêiner

Os perfis de carga de trabalho são um recurso dos Aplicativos de Contêiner que permitem controlar melhor os recursos de implantação. O Azure Functions nos Aplicativos de Contêiner do Azure também dá suporte a perfis de carga de trabalho. Para obter mais informações, confira Perfis de carga de trabalho nos 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 o 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ções em contêineres em um ambiente com perfis de carga de trabalho habilitados, especifique o perfil no qual executar. Especifique o perfil usando o parâmetro --workload-profile-name do comando az functionapp create, 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> 

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

Para definir os recursos alocados para 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 comando az functionapp container set para gerenciar os recursos alocados e o perfil de carga de trabalho usado pelo aplicativo.

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

Configurações do aplicativo

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

Habilitar a implantação contínua no Azure

Ao hospedar seu aplicativo de funções em contêineres nos Aplicativos de Contêiner do Azure, há duas maneiras de configurar a implantação contínua de um repositório de código-fonte:

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

Habilitar a implantação contínua no Azure

Importante

No momento, não há suporte para implantação baseada em webhook 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, em vez disso, 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 poderá configurar a implantação contínua de um repositório de código-fonte usando o Azure Pipelines ou o GitHub Actions.

Você pode habilitar o Azure Functions para atualizar automaticamente sua implantação de uma imagem sempre que você 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 comando az functionapp deployment container config 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 comando az functionapp deployment container show-cd-url.

    Como feito anteriormente, substitua <APP_NAME> pelo nome do aplicativo de funções.

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

  3. Abra o Docker Hub, entre e selecione Repositórios na barra de navegação. Localize e selecione a imagem, selecione a guia Webhooks, especifique um Nome do webhook, cole a URL em URL do Webhook e, em seguida, selecione Criar.

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

  4. Com o webhook definido, 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 contêiner e um cliente. Com o SSH habilitado, você pode se conectar ao contêiner usando as Ferramentas Avançadas do Serviço de Aplicativo (Kudu). Para facilitar a conexão com o contêiner usando SSH, o Azure Functions fornece uma imagem base que já tem o SSH habilitado. Você só precisa editar o Dockerfile e, em seguida, recompilar e reimplantar a imagem. Em seguida, você pode se conectar ao contêiner usando as Ferramentas Avançadas (Kudu).

  1. No Dockerfile, acrescente a cadeia de caracteres -appservice à imagem base na instrução FROM, 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. Acesse 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. Recompile a imagem usando o comando docker build e substitua <DOCKER_ID> pela ID da conta do Docker Hub, como no exemplo a seguir.

    docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
    
  3. Envie por push a imagem atualizada para o Docker Hub, o que deve levar bem menos tempo do que o primeiro push. Somente 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 leva menos de um minuto.

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

  6. Entre em sua conta do Azure e selecione SSH para estabelecer uma conexão com o contêiner. A conexão poderá levar algum tempo se o Azure ainda estiver atualizando a imagem de contêiner.

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

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

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