Zip-implementatie voor Azure Functions

In dit artikel wordt beschreven hoe u projectbestanden van uw functie-app implementeert in Azure vanuit een .zip (gecomprimeerd) bestand. U leert hoe u een push-implementatie uitvoert, zowel met behulp van Azure CLI als met behulp van de REST API's. Azure Functions Core Tools maakt ook gebruik van deze implementatie-API's bij het publiceren van een lokaal project naar Azure.

Zip-implementatie is ook een eenvoudige manier om uw functies uit te voeren vanuit het implementatiepakket. Zie Uw functies uitvoeren vanuit een pakketbestand in Azure voor meer informatie.

Azure Functions heeft het volledige scala aan continue implementatie- en integratieopties die worden geleverd door Azure-app Service. Zie Continue implementatie voor Azure Functions voor meer informatie.

Om de ontwikkeling te versnellen, is het misschien gemakkelijker om uw functie-app-projectbestanden rechtstreeks vanuit een .zip-bestand te implementeren. De .zip implementatie-API neemt de inhoud van een .zip bestand en extraheert de inhoud in de wwwroot map van uw functie-app. Deze .zip bestandsimplementatie maakt gebruik van dezelfde Kudu-service die continue implementaties op basis van integratie mogelijk maakt, waaronder:

  • Verwijdering van bestanden die zijn overgelaten uit eerdere implementaties.
  • Implementatieaanpassing, inclusief het uitvoeren van implementatiescripts.
  • Implementatielogboeken.
  • Functietriggers synchroniseren in een functie-app Verbruiksabonnement .

Zie de .zip-implementatiereferentie voor meer informatie.

Vereisten voor implementatie .zip bestanden

Het .zip-bestand dat u voor pushimplementatie gebruikt, moet alle bestanden bevatten die nodig zijn om uw functie uit te voeren.

Belangrijk

Wanneer u .zip implementatie gebruikt, worden alle bestanden uit een bestaande implementatie die niet in het .zip bestand worden gevonden, verwijderd uit uw functie-app.

De code voor alle functies in een specifieke functie-app bevindt zich in een hoofdprojectmap die een hostconfiguratiebestand bevat. Het bestand host.json bevat runtimespecifieke configuraties en bevindt zich in de hoofdmap van de functie-app. Een bin-map bevat pakketten en andere bibliotheekbestanden die de functie-app nodig heeft. Specifieke mapstructuren die voor de functie-app zijn vereist, zijn afhankelijk van de taal:

Alle functies in de functie-app moeten dezelfde taalstack delen.

Een functie-app bevat alle bestanden en mappen in de wwwroot map. Een .zip bestandsimplementatie bevat de inhoud van de wwwroot map, maar niet de map zelf. Wanneer u een C#-klassebibliotheekproject implementeert, moet u de gecompileerde bibliotheekbestanden en afhankelijkheden opnemen in een bin submap in uw .zip-pakket.

Wanneer u op een lokale computer ontwikkelt, kunt u handmatig een .zip bestand van de projectmap van de functie-app maken met behulp van ingebouwde .zip compressiefunctionaliteit of hulpprogramma's van derden.

Implementeren met behulp van Azure CLI

U kunt Azure CLI gebruiken om een push-implementatie te activeren. Push een .zip-bestand naar uw functie-app met behulp van de opdracht az functionapp deployment source config-zip . Als u deze opdracht wilt gebruiken, moet u Azure CLI versie 2.0.21 of hoger gebruiken. Als u wilt zien welke Versie van Azure CLI u gebruikt, kunt u de az --version opdracht gebruiken.

Vervang in de volgende opdracht de <zip_file_path> tijdelijke aanduiding door het pad naar de locatie van uw .zip-bestand. Vervang ook door <app_name> de unieke naam van uw functie-app en vervang deze door <resource_group> de naam van uw resourcegroep.

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

Met deze opdracht worden projectbestanden van het gedownloade .zip-bestand geïmplementeerd in uw functie-app in Azure. Vervolgens wordt de app opnieuw opgestart. Als u de lijst met implementaties voor deze functie-app wilt weergeven, moet u de REST API's gebruiken.

Wanneer u Azure CLI op uw lokale computer gebruikt, <zip_file_path> is het pad naar het .zip-bestand op uw computer. U kunt ook Azure CLI uitvoeren in Azure Cloud Shell. Wanneer u Cloud Shell gebruikt, moet u eerst uw implementatie-.zip-bestand uploaden naar het Azure Files-account dat is gekoppeld aan uw Cloud Shell. In dat geval <zip_file_path> is dit de opslaglocatie die door uw Cloud Shell-account wordt gebruikt. Zie Persistent-bestanden in Azure Cloud Shell voor meer informatie.

ZIP-bestand implementeren met REST API's

U kunt de REST API's van de implementatieservice gebruiken om het .zip-bestand in uw app in Azure te implementeren. Als u wilt implementeren, verzendt u een POST-aanvraag naar https://<app_name>.scm.azurewebsites.net/api/zipdeploy. De POST-aanvraag moet het .zip-bestand in de berichttekst bevatten. De implementatiereferenties voor uw app moet u opgegeven in de aanvraag met behulp van HTTP-basisverificatie. Zie de naslaginformatie .zip push-implementatie voor meer informatie.

Voor de HTTP BASIC-verificatie hebt u uw App Service-implementatiereferenties nodig. Zie Referenties op gebruikersniveau instellen en opnieuw instellen om te zien hoe u uw implementatiereferenties instelt.

Met cURL

In het volgende voorbeeld wordt het cURL-hulpprogramma gebruikt om een .zip-bestand te implementeren. Vervang de tijdelijke aanduidingen <deployment_user>, <zip_file_path>en <app_name>. Wanneer u hierom wordt gevraagd door cURL, typt u het wachtwoord.

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

Met deze aanvraag wordt push-implementatie geactiveerd vanuit het geüploade .zip-bestand. U kunt de huidige en eerdere implementaties bekijken met behulp van het https://<app_name>.scm.azurewebsites.net/api/deployments eindpunt, zoals wordt weergegeven in het volgende cURL-voorbeeld. <app_name> Vervang opnieuw door de naam van uw app en <deployment_user> door de gebruikersnaam van uw implementatiereferenties.

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

Asynchrone zip-implementatie

Tijdens de implementatie synchroon kunnen er fouten optreden met betrekking tot verbindingstime-outs. Voeg ?isAsync=true toe aan de URL om asynchroon te implementeren. U ontvangt een antwoord zodra het zip-bestand wordt geüpload met een Location header die verwijst naar de url van de pollable-implementatiestatus. Wanneer u de URL in de Location header peilt, ontvangt u een HTTP 202-antwoord (Geaccepteerd) terwijl het proces wordt uitgevoerd en een HTTP 200-antwoord (OK) wanneer het archief is uitgebreid en de implementatie is voltooid.

Microsoft Entra-verificatie

Een alternatief voor het gebruik van HTTP BASIC-verificatie voor de zip-implementatie is het gebruik van een Microsoft Entra-identiteit. Microsoft Entra-identiteit is mogelijk nodig als HTTP BASIC-verificatie is uitgeschakeld voor de SCM-site.

Een geldig Microsoft Entra-toegangstoken voor de gebruiker of service-principal die de implementatie uitvoert, is vereist. Een toegangstoken kan worden opgehaald met behulp van de azure CLI-opdracht az account get-access-token . Het toegangstoken wordt gebruikt in de verificatieheader van de HTTP POST-aanvraag.

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

Met PowerShell

In het volgende voorbeeld wordt gebruikgemaakt van Publish-AzWebapp om het .zip-bestand te uploaden. Vervang de tijdelijke aanduidingen <group-name>, <app-name>en <zip-file-path>.

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

Met deze aanvraag wordt push-implementatie geactiveerd vanuit het geüploade .zip-bestand.

Voer de volgende opdrachten uit om de huidige en eerdere implementaties te controleren. Vervang <deployment-user>de tijdelijke <deployment-password>aanduidingen en <app-name> de tijdelijke aanduidingen opnieuw.

$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

Implementeren met behulp van ARM-sjabloon

U kunt de ARM-sjabloonextensie ZipDeploy gebruiken om uw .zip-bestand naar uw functie-app te pushen.

Voorbeeld van ZIPDeploy ARM-sjabloon

Deze sjabloon bevat zowel een productie- als staging-site en implementeert op een of de andere site. Normaal gesproken gebruikt u deze sjabloon om te implementeren in de staging-site en vervolgens om te wisselen om uw nieuwe zip-pakket uit te voeren op de productiesite.

{
  "$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
      }
    }
  ]
}

Voor de eerste implementatie zou u rechtstreeks naar de productiesite implementeren. Zie Site-implementaties voor meer informatie.

Functies uitvoeren vanuit het implementatiepakket

U kunt er ook voor kiezen om uw functies rechtstreeks vanuit het implementatiepakketbestand uit te voeren. Met deze methode wordt de implementatiestap voor het kopiëren van bestanden van het pakket naar de wwwroot map van uw functie-app overgeslagen. In plaats daarvan wordt het pakketbestand gekoppeld door de Functions-runtime en wordt de inhoud van de wwwroot map alleen-lezen.

Zip-implementatie kan worden geïntegreerd met deze functie, die u kunt inschakelen door de instelling WEBSITE_RUN_FROM_PACKAGE van de functie-app in te stellen op een waarde van 1. Zie Uw functies uitvoeren vanuit een implementatiepakketbestand voor meer informatie.

Implementatieaanpassing

Bij het implementatieproces wordt ervan uitgegaan dat het .zip-bestand dat u pusht een kant-en-klare app bevat. Standaard worden er geen aanpassingen uitgevoerd. Als u dezelfde buildprocessen wilt inschakelen die u krijgt met continue integratie, voegt u het volgende toe aan uw toepassingsinstellingen:

SCM_DO_BUILD_DURING_DEPLOYMENT=true

Wanneer u .zip push-implementatie gebruikt, is deze instelling standaard onwaar . De standaardwaarde is waar voor continue integratie-implementaties. Als deze instelling is ingesteld op waar, worden uw implementatie-gerelateerde instellingen gebruikt tijdens de implementatie. U kunt deze instellingen configureren als app-instellingen of in een .deployment-configuratiebestand dat zich in de hoofdmap van uw .zip-bestand bevindt. Zie Opslagplaats- en implementatie-gerelateerde instellingen in de implementatieverwijzing voor meer informatie.

Uw functie-app-bestanden downloaden

Als u uw functies hebt gemaakt met behulp van de editor in Azure Portal, kunt u uw bestaande functie-app-project op een van de volgende manieren downloaden als een .zip-bestand:

  • Vanuit Azure Portal:

    1. Meld u aan bij Azure Portal en ga vervolgens naar uw functie-app.

    2. Selecteer App-inhoud downloaden op het tabblad Overzicht. Selecteer de downloadopties en selecteer Vervolgens Downloaden.

      Het functie-app-project downloaden

      Het gedownloade .zip-bestand heeft de juiste indeling om opnieuw te worden gepubliceerd naar uw functie-app met behulp van .zip push-implementatie. Het downloaden van de portal kan ook de bestanden toevoegen die nodig zijn om uw functie-app rechtstreeks in Visual Studio te openen.

  • REST API's gebruiken:

    Gebruik de volgende GET API voor implementatie om de bestanden van uw <function_app> project te downloaden:

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

    Inclusief /site/wwwroot/ zorgt u ervoor dat uw zip-bestand alleen de projectbestanden van de functie-app bevat en niet de hele site. Als u nog niet bent aangemeld bij Azure, wordt u gevraagd dit te doen.

U kunt ook een .zip-bestand downloaden vanuit een GitHub-opslagplaats. Wanneer u een GitHub-opslagplaats downloadt als een .zip-bestand, voegt GitHub een extra mapniveau toe voor de vertakking. Dit extra mapniveau betekent dat u het .zip bestand niet rechtstreeks kunt implementeren terwijl u het hebt gedownload vanuit GitHub. Als u een GitHub-opslagplaats gebruikt om uw functie-app te onderhouden, moet u continue integratie gebruiken om uw app te implementeren.

Volgende stappen