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. O suporte para hospedar contêineres de aplicativos de função em Aplicativos de Contêiner está atualmente em visualização. 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.

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

Com um Dockerfile gerado pelas Ferramentas Principais 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 a implantação para usar a nova imagem. O exemplo a seguir atualiza o aplicativo de função para usar a nova imagem:

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 Criando 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. 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.

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

  1. Em Opções e planos de hospedagem, escolha Funções Premium.

    Screenshot of the Basics tab in the Azure portal when creating a function app for hosting a container in a Functions Premium plan.

    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.

*O nome do aplicativo deve ser exclusivo dentro do ambiente de Aplicativos de Contêiner do Azure. Nem todas as regiões são suportadas na pré-visualização. Para obter mais informações, consulte Considerações sobre hospedagem de aplicativos de contêiner.

  1. Em Opções e planos de hospedagem, escolha Plano de Ambiente de Aplicativos de Contêiner do Azure.

    Portal create Basics tab for a containerized function app hosted in Azure Container Apps.

    Isso cria um novo recurso do Ambiente de Aplicativos de Contêiner do Azure para hospedar seu contêiner de aplicativo de função. Para obter mais informações, consulte Aplicativos de contêiner do Azure hospedando o Azure Functions.

    Por padrão, o ambiente é criado em um plano de consumo sem redundância de zona, para minimizar custos. Você também pode escolher um ambiente existente de Aplicativos de Contêiner. Para saber mais sobre ambientes, consulte Ambientes de Aplicativos de Contêiner do Azure.

  1. 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.
  1. Selecione a guia Implantação e desmarque Usar imagem de início rápido. Se você não fizer isso, o aplicativo de função será implantado a partir da imagem base para o idioma do aplicativo de função.

  2. 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.

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

  4. 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.

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

  2. 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.

  3. 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.

  4. 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.

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ê pode criar e gerenciar perfis de carga de trabalho 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. Para fazer isso, use 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ê.

Além disso, 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.

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

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ê 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.

    Screenshot showing how to add the webhook in your Docker Hub window.

  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.

    Screenshot that shows Linux top command running in an SSH session.

Próximos passos

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