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 de um arquivo de pacote no Azure. É a tecnologia de implantação padrão nos planos de hospedagem Consumo, Elastic Premium e Dedicado (Serviço de Aplicativo ). O plano Flex Consumption não suporta a implantação zip.
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.
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.
Requisitos de implantação .zip arquivo
O arquivo zip que você implanta deve conter todos os arquivos necessários para executar seu aplicativo de função. Você pode criar manualmente um arquivo zip a partir do conteúdo de uma pasta de projeto do Functions usando a funcionalidade de compactação de .zip interna ou ferramentas de terceiros.
O arquivo deve incluir o arquivo host.json na raiz da pasta extraída. A pilha de idiomas selecionada para o aplicativo de função cria requisitos adicionais:
- .NET (modelo de trabalho isolado)
- .NET (modelo em processo)
- Java
- JavaScript
- TypeScript
- PowerShell
- Python
Importante
Para idiomas que geram saída compilada para implantação, certifique-se de compactar o conteúdo da pasta de saída que você planeja publicar e não toda a pasta do projeto. Quando o Functions extrai o conteúdo do arquivo zip, o host.json
arquivo deve existir na raiz do pacote.
Um processo de implantação zip extrai os arquivos e pastas do arquivo zip no wwwroot
diretório. Se você incluir o diretório pai ao criar o arquivo, o sistema não encontrará os arquivos que espera ver no wwwroot
.
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:
Entre no portal do Azure e vá para seu aplicativo de função.
Na guia Visão geral, selecione Baixar conteúdo do aplicativo. Selecione as opções de download e, em seguida, selecione Download.
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.