Zip deployment for Azure Functions (Implementação com ficheiro zip para as Funções do Azure)

Este artigo descreve como implantar seus arquivos de projeto de aplicativo de função no Azure a partir de um arquivo .zip (compactado). Você aprende a fazer uma implantação por push, usando a CLI do Azure e as APIs REST. As Ferramentas Principais do Azure Functions também usam essas APIs de implantação ao publicar um projeto local no Azure.

A implantação Zip também é uma maneira fácil de executar suas funções a partir do pacote de implantação. Para saber mais, consulte Executar suas funções a partir de um arquivo de pacote no Azure.

O Azure Functions tem a gama completa de opções de implantação contínua e integração fornecidas pelo Serviço de Aplicativo do Azure. Para obter mais informações, consulte Implantação contínua para o Azure Functions.

Para acelerar o desenvolvimento, você pode achar mais fácil implantar seus arquivos de projeto de aplicativo de função diretamente de um arquivo .zip. A API de implantação do .zip pega o conteúdo de um arquivo de .zip e extrai o conteúdo para a wwwroot pasta do seu aplicativo de função. Essa implantação de arquivo .zip usa o mesmo serviço Kudu que alimenta implantações contínuas baseadas em integração, incluindo:

  • Exclusão de arquivos que sobraram de implantações anteriores.
  • Personalização da implantação, incluindo a execução de scripts de implantação.
  • Logs de implantação.
  • Acionadores de função de sincronização em um aplicativo de função Plano de consumo.

Para obter mais informações, consulte a .zip referência de implantação.

Requisitos de implantação .zip arquivo

O arquivo .zip que você usa para implantação por push deve conter todos os arquivos necessários para executar sua função.

Importante

Quando você usa .zip implantação, todos os arquivos de uma implantação existente que não são encontrados no arquivo .zip são excluídos do seu aplicativo de função.

O código para todas as funções em um aplicativo de função específico está localizado em uma pasta de projeto raiz que contém um arquivo de configuração do host. O arquivo host.json contém configurações específicas de tempo de execução e está na pasta raiz do aplicativo de função. Uma pasta bin contém pacotes e outros arquivos de biblioteca que o aplicativo de função requer. As estruturas de pastas específicas exigidas pelo aplicativo de função dependem do idioma:

Todas as funções no aplicativo de função devem compartilhar a mesma pilha de idiomas.

Um aplicativo de função inclui todos os arquivos e pastas no wwwroot diretório. Uma implantação de arquivo .zip inclui o conteúdo do wwwroot diretório, mas não o diretório em si. Ao implantar um projeto de biblioteca de classes C#, você deve incluir os arquivos de biblioteca compilados e dependências em uma bin subpasta em seu pacote .zip.

Ao desenvolver em um computador local, você pode criar manualmente um arquivo de .zip da pasta do projeto do aplicativo de função usando a funcionalidade de compactação de .zip interna ou ferramentas de terceiros.

Implementar com a CLI do Azure

Você pode usar a CLI do Azure para disparar uma implantação por push. Envie por push um arquivo .zip para seu aplicativo de função usando o comando az functionapp deployment source config-zip . Para utilizar este comando, tem de utilizar a versão 2.0.21 ou posterior da CLI do Azure. Para ver a versão da CLI do Azure que está a utilizar, utilize o comando az --version.

No comando a seguir, substitua o espaço reservado <zip_file_path> pelo caminho para o local do arquivo .zip. Além disso, substitua <app_name> pelo nome exclusivo do seu aplicativo de função e substitua <resource_group> pelo nome do seu grupo de recursos.

az functionapp deployment source config-zip -g <resource_group> -n \
<app_name> --src <zip_file_path>

Este comando implanta arquivos de projeto do arquivo de .zip baixado em seu aplicativo de função no Azure. Em seguida, ele reinicia o aplicativo. Para exibir a lista de implantações para este aplicativo de função, você deve usar as APIs REST.

Quando você estiver usando a CLI do Azure em seu computador local, <zip_file_path> é o caminho para o arquivo .zip em seu computador. Você também pode executar a CLI do Azure no Azure Cloud Shell. Ao usar o Cloud Shell, você deve primeiro carregar seu arquivo de .zip de implantação para a conta do Azure Files associada ao seu Cloud Shell. Nesse caso, <zip_file_path> é o local de armazenamento que sua conta do Cloud Shell usa. Para obter mais informações, consulte Persistir arquivos no Azure Cloud Shell.

Implantar arquivo ZIP com APIs REST

Você pode usar as APIs REST do serviço de implantação para implantar o arquivo .zip em seu aplicativo no Azure. Para implantar, envie uma solicitação POST para https://<app_name>.scm.azurewebsites.net/api/zipdeploy. A solicitação POST deve conter o arquivo .zip no corpo da mensagem. As credenciais de implementação para a sua aplicação são fornecidas no pedido através da autenticação básica HTTP. Para obter mais informações, consulte a .zip referência de implantação por push.

Para a autenticação HTTP BASIC, você precisa de suas credenciais de implantação do Serviço de Aplicativo. Para ver como definir suas credenciais de implantação, consulte Definir e redefinir credenciais no nível do usuário.

Com cURL

O exemplo a seguir usa a ferramenta cURL para implantar um arquivo .zip. Substitua os espaços reservados <deployment_user>, <zip_file_path>e <app_name>. Quando solicitado por cURL, digite a senha.

curl -X POST -u <deployment_user> --data-binary "@<zip_file_path>" https://<app_name>.scm.azurewebsites.net/api/zipdeploy

Essa solicitação aciona a implantação por push a partir do arquivo de .zip carregado. Você pode revisar as implantações atuais e passadas usando o ponto de https://<app_name>.scm.azurewebsites.net/api/deployments extremidade, conforme mostrado no exemplo de cURL a seguir. Novamente, substitua <app_name> pelo nome do seu aplicativo e <deployment_user> pelo nome de usuário de suas credenciais de implantação.

curl -u <deployment_user> https://<app_name>.scm.azurewebsites.net/api/deployments

Implantação de zip assíncrono

Ao implantar de forma síncrona, você pode receber erros relacionados a tempos limite de conexão. Adicione ?isAsync=true à URL para implantar de forma assíncrona. Você receberá uma resposta assim que o arquivo zip for carregado com um Location cabeçalho apontando para a URL de status de implantação sondável. Ao sondar a URL fornecida no Location cabeçalho, você receberá uma resposta HTTP 202 (Aceito) enquanto o processo estiver em andamento e uma resposta HTTP 200 (OK) assim que o arquivo tiver sido expandido e a implantação concluída com êxito.

Autenticação do Microsoft Entra

Uma alternativa ao uso da autenticação HTTP BASIC para a implantação zip é usar uma identidade do Microsoft Entra. A identidade do Microsoft Entra pode ser necessária se a autenticação HTTP BASIC estiver desabilitada para o site do SCM.

Será necessário um token de acesso válido do Microsoft Entra para o usuário ou entidade de serviço que executa a implantação. Um token de acesso pode ser recuperado usando o comando da CLI do az account get-access-token Azure. O token de acesso será usado no cabeçalho Authentication da solicitação HTTP POST.

curl -X POST \
    --data-binary "@<zip_file_path>" \
    -H "Authorization: Bearer <access_token>" \
    "https://<app_name>.scm.azurewebsites.net/api/zipdeploy"

Com o PowerShell

O exemplo a seguir usa Publish-AzWebapp carregar o arquivo .zip. Substitua os espaços reservados <group-name>, <app-name>e <zip-file-path>.

Publish-AzWebapp -ResourceGroupName <group-name> -Name <app-name> -ArchivePath <zip-file-path>

Essa solicitação aciona a implantação por push a partir do arquivo de .zip carregado.

Para revisar as implantações atuais e passadas, execute os seguintes comandos. Novamente, substitua os <deployment-user>espaços reservados , <deployment-password>e <app-name> .

$username = "<deployment-user>"
$password = "<deployment-password>"
$apiUrl = "https://<app-name>.scm.azurewebsites.net/api/deployments"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))
$userAgent = "powershell/1.0"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method GET

Implantar usando o modelo ARM

Você pode usar a extensão de modelo ZipDeploy ARM para enviar seu arquivo .zip para seu aplicativo de função.

Exemplo de modelo ARM ZipDeploy

Este modelo inclui um slot de produção e de preparo e implanta em um ou outro. Normalmente, você usaria esse modelo para implantar no slot de preparo e, em seguida, trocar para executar seu novo pacote zip no slot de produção.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "appServiceName": {
      "type": "string"
    },
    "deployToProduction": {
      "type": "bool",
      "defaultValue": false
    },
    "slot": {
      "type": "string",
      "defaultValue": "staging"
    },
    "packageUri": {
      "type": "secureString"
    }
  },
  "resources": [
    {
      "condition": "[parameters('deployToProduction')]",
      "type": "Microsoft.Web/sites/extensions",
      "apiVersion": "2021-02-01",
      "name": "[format('{0}/ZipDeploy', parameters('appServiceName'))]",
      "properties": {
        "packageUri": "[parameters('packageUri')]",
        "appOffline": true
      }
    },
    {
      "condition": "[not(parameters('deployToProduction'))]",
      "type": "Microsoft.Web/sites/slots/extensions",
      "apiVersion": "2021-02-01",
      "name": "[format('{0}/{1}/ZipDeploy', parameters('appServiceName'), parameters('slot'))]",
      "properties": {
        "packageUri": "[parameters('packageUri')]",
        "appOffline": true
      }
    }
  ]
}

Para a implantação inicial, você implantaria diretamente no slot de produção. Para obter mais informações, consulte Implantações de slots.

Executar funções a partir do pacote de implantação

Você também pode optar por executar suas funções diretamente do arquivo do pacote de implantação. Esse método ignora a etapa de implantação de copiar arquivos do pacote para o wwwroot diretório do seu aplicativo de função. Em vez disso, o arquivo de pacote é montado pelo tempo de execução do Functions e o conteúdo do wwwroot diretório se torna somente leitura.

A implantação Zip integra-se a esse recurso, que você pode habilitar definindo a configuração WEBSITE_RUN_FROM_PACKAGE do aplicativo de função com um valor de 1. Para obter mais informações, consulte Executar suas funções a partir de um arquivo de pacote de implantação.

Personalização da implantação

O processo de implantação pressupõe que o arquivo .zip enviado por push contém um aplicativo pronto para ser executado. Por padrão, nenhuma personalização é executada. Para habilitar os mesmos processos de compilação que você obtém com a integração contínua, adicione o seguinte às configurações do aplicativo:

SCM_DO_BUILD_DURING_DEPLOYMENT=true

Quando você usa .zip implantação por push, essa configuração é falsa por padrão. O padrão é verdadeiro para implantações de integração contínua. Quando definidas como true, suas configurações relacionadas à implantação são usadas durante a implantação. Você pode definir essas configurações como configurações do aplicativo ou em um arquivo de configuração .deployment localizado na raiz do arquivo .zip. Para obter mais informações, consulte Configurações relacionadas ao repositório e à implantação na referência de implantação.

Baixe seus arquivos de aplicativo de função

Se você criou suas funções usando o editor no portal do Azure, poderá baixar seu projeto de aplicativo de função existente como um arquivo de .zip de uma destas maneiras:

  • No portal do Azure:

    1. Entre no portal do Azure e vá para seu aplicativo de função.

    2. Na guia Visão geral, selecione Baixar conteúdo do aplicativo. Selecione as opções de download e, em seguida, selecione Download.

      Baixe o projeto do aplicativo de função

      O arquivo de .zip baixado está no formato correto para ser republicado em seu aplicativo de função usando .zip implantação por push. O download do portal também pode adicionar os arquivos necessários para abrir seu aplicativo de função diretamente no Visual Studio.

  • Usando APIs REST:

    Use a seguinte API GET de implantação para baixar os arquivos do seu <function_app> projeto:

    https://<function_app>.scm.azurewebsites.net/api/zip/site/wwwroot/
    

    Incluir /site/wwwroot/ garante que seu arquivo zip inclua apenas os arquivos de projeto do aplicativo de função e não o site inteiro. Se ainda não tiver iniciado sessão no Azure, ser-lhe-á pedido que o faça.

Você também pode baixar um arquivo .zip de um repositório GitHub. Quando você baixa um repositório GitHub como um arquivo .zip, o GitHub adiciona um nível de pasta extra para a ramificação. Esse nível de pasta extra significa que você não pode implantar o arquivo .zip diretamente ao baixá-lo do GitHub. Se você estiver usando um repositório GitHub para manter seu aplicativo funcional, deverá usar a integração contínua para implantar seu aplicativo.

Próximos passos