Implementeren naar Azure App Service-implementatiesites met Azure Developer CLI

Azure Developer CLI (azd) ondersteunt Azure App Service-implementatiesites voor apps die worden gehost in App Service. U kunt sites in uw infrastructuur definiëren, code implementeren naar een specifieke site en sites wisselen wanneer u klaar bent om een release te promoten.

Gebruik deze aanpak voor staging, blauw-groene implementaties, rooktesten en rollbacks zonder aangepaste implementatiescripts toe te voegen.

Vereiste voorwaarden

  • Een azd project dat een service implementeert in Azure App Service.
  • Infrastructuur als code waarmee uw App Service-resources in Bicep worden gedefinieerd.
  • Een App Service-plan op de Standard-laag ofS1 hoger. gratis, gedeelde en basic-lagen bieden geen ondersteuning voor implementatieslots.

Een implementatieslot definiëren in Bicep

Definieer uw productiesite zoals gebruikelijk en voeg vervolgens een Microsoft.Web/sites/slots resource toe voor elke slot waarop u zich wilt azd richten.

resource appServicePlan 'Microsoft.Web/serverfarms@2021-03-01' = {
  name: 'my-appservice-plan'
  location: resourceGroup().location
  sku: {
    name: 'S1'
    tier: 'Standard'
  }
}

resource webApp 'Microsoft.Web/sites@2021-03-01' = {
  name: 'my-appservice'
  location: resourceGroup().location
  kind: 'app'
  properties: {
    serverFarmId: appServicePlan.id
  }
}

resource stagingSlot 'Microsoft.Web/sites/slots@2021-03-01' = {
  name: '${webApp.name}/staging'
  location: webApp.location
  properties: {}
}

Als u Azure Verified Modules (AVM) gebruikt, definieert u de web-app en implementatieslotmodules in dezelfde implementatie en geeft u de naam van de app door aan de slotmodule.

Implementeren naar een slot met azd

Uitvoeren azd up of azd provision en azd deploy zoals gebruikelijk.

azd up

Bij de eerste uitrol rolt azd uit naar de productiesite en eventuele slots die in uw infrastructuur zijn gedefinieerd. Met deze eerste implementatie wordt dezelfde basislijn in de hoofd-app en elke site vastgelegd.

Na de eerste implementatie wijzigt azd deploy de manier waarop de doellocatie voor implementatie wordt geselecteerd wanneer er slots bestaan. azd blijft niet rechtstreeks implementeren in de productie-app wanneer er slots beschikbaar zijn. In plaats daarvan implementeert u in een slot, valideert u de release en wisselt u deze vervolgens naar productie.

Hoe azd het implementatiedoel selecteert

Wanneer azd deploy wordt uitgevoerd voor een App Service met implementatie-slots, wordt het doel geselecteerd door de implementatiegeschiedenis van de hoofdapp te controleren en vervolgens de beschikbare slots te evalueren.

Het gedrag werkt als volgt:

  • Als er geen eerdere implementaties bestaan, azd implementeert naar de hoofd-app en alle slots.
  • Als er eerdere implementaties bestaan en er geen slots zijn, wordt azd alleen in de hoofd-app geïmplementeerd.
  • Als er eerdere implementaties bestaan en er precies één slot bestaat, wordt er alleen naar dat slot geïmplementeerd.
  • Als er eerdere implementaties bestaan en er twee of meer slots bestaan, gebruikt azd de slot die is gespecificeerd door een omgevingsvariabele of wordt u gevraagd er een te kiezen.

Important

Na de eerste implementatie wordt azd niet rechtstreeks naar de hoofd-App Service-app gedeployed wanneer er slots bestaan. Dit gedrag is opzettelijk en helpt onbedoelde implementaties van direct naar productie te voorkomen. Als u de productie wilt bijwerken, implementeert u deze in een slot en wisselt u vervolgens het slot met productie (@main).

Een slot met een omgevingsvariabele selecteren

Wanneer uw service na de eerste implementatie twee of meer slots heeft, kunt u de interactieve prompt overslaan door een omgevingsvariabele in te stellen voor de service die u wilt implementeren.

Gebruik de volgende indeling:

AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME

Maak de variabelenaam van de servicenaam in azure.yaml door hoofdletters te gebruiken en afbreekstreepjes te vervangen door onderstrepingstekens.

Als uw service bijvoorbeeld de naam my-apiheeft, gebruikt u AZD_DEPLOY_MY_API_SLOT_NAME.

azd env set AZD_DEPLOY_MY_API_SLOT_NAME staging
azd deploy my-api

U kunt deze waarde opslaan in uw azd omgeving door azd env set te gebruiken, of deze rechtstreeks in uw CI-systeem definiëren voordat u azd deploy uitvoert.

Als uw service precies één slot heeft, negeert azd de omgevingsvariabele omdat er slechts één mogelijk implementatiedoel is.

Als uw service twee of meer slots heeft en de omgevingsvariabele niet is ingesteld, azd wordt u gevraagd een slot te kiezen.

Slotdetectie overslaan en implementeren in de hoofdapp

In sommige scenario's moet azd rechtstreeks worden uitgerold naar de primaire App Service-app, zelfs als er implementatieslots zijn. Voorbeeld:

  • Uw CI-pijplijn moet de hoofdapp verversen, terwijl bestaande slots ongewijzigd blijven.
  • U herstelt van een slechte sitestatus en wilt de productiesite rechtstreeks opnieuw implementeren.
  • U bent de hoofd-app opnieuw op de basislijn aan het instellen voordat u nieuwe slots configureert.

Om slotdetectie te omzeilen, stelt u de volgende omgevingsvariabele in voor de service:

AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS

Maak de variabelenaam van de servicenaam in azure.yaml door hoofdletters te gebruiken en afbreekstreepjes te vervangen door onderstrepingstekens. Stel de waarde in op true om slotdetectie over te slaan en uit te rollen naar de hoofdapp.

Als uw service bijvoorbeeld de naam my-apiheeft, gebruikt u AZD_DEPLOY_MY_API_IGNORE_SLOTS.

azd env set AZD_DEPLOY_MY_API_IGNORE_SLOTS true
azd deploy my-api

Wanneer AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS is ingesteld op true, wordt azd geïmplementeerd in de hoofd-app en wordt een eventuele AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME-waarde voor dezelfde service genegeerd. Verwijder de variabele of stel deze in op false om terug te keren naar het standaard slotbewuste gedrag.

CI en niet-interactief gedrag

Wanneer u azd deploy --no-prompt of vanuit CI implementeert, functioneert de slotselectie anders, afhankelijk van het aantal beschikbare slots.

Slots Gedrag van omgevingsvariabelen Resultaat
0 Niet van toepassing. azd wordt geïmplementeerd in de hoofd-app.
1 Genegeerd, tenzij AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTStrue is. azd wordt geïmplementeerd in het enige slot of in de hoofd-app wanneer slots worden genegeerd.
2+ AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME is vereist om te voorkomen dat hierom wordt gevraagd, tenzij AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTStrue is. azd wordt geïmplementeerd in het opgegeven slot, wordt geïmplementeerd in de hoofdapp wanneer slots worden genegeerd, of mislukt als er geen doel kan worden geselecteerd.

Als u implementaties automatiseert voor een App Service met twee of meer slots, stelt u AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME in de pijplijnomgeving in voordat u azd deploy uitvoert. Als u een rechtstreekse implementatie naar main vanuit CI wilt afdwingen wanneer er slots bestaan, stelt u AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS in plaats daarvan in op true.

Azure App Service-implementatiesites wisselen

Gebruik de azure.appservice extensie om slots te wisselen na validatie. Als de extensie nog niet is geïnstalleerd, azd wordt u gevraagd deze te installeren wanneer u de opdracht de eerste keer uitvoert.

Voer de interactieve ervaring uit:

azd appservice swap

Als er slechts één niet-productieslot bestaat, azd worden de prompts overgeslagen en wordt er rechtstreeks met productie gewisseld.

Geef voor automatisering expliciet de bron- en doelsites op. Gebruik @main om te verwijzen naar het productieslot.

azd appservice swap --src staging --dst @main
azd appservice swap --src @main --dst staging
azd appservice swap --service myapi --src staging --dst @main

Gebruik deze patronen om algemene releasestromen te ondersteunen:

  • Promoot een gevalideerde faseringsimplementatie naar productie met --src staging --dst @main.
  • Terugdraaien door productie terug te wisselen naar de staging-site met --src @main --dst staging.
  • Richt u op een specifieke App Service-ondersteunde service in een multi-serviceproject azd met --service.

Wisselen is het beoogde pad voor het bijwerken van de productieomgeving nadat slots zijn geconfigureerd. Gebruik azd deploy om een slot aan te passen en gebruik azd appservice swap om dat slot in productie te brengen.

  1. Definieer een of meer App Service-implementatiesites in uw Bicep-sjablonen.
  2. Richt de App Service-resources in met behulp van azd provision of azd up.
  3. Laat de eerste implementatie een basislijn vaststellen voor de hoofd-app en elke slot.
  4. Implementeer latere toepassingsupdates naar een staging-slot door AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME in te stellen wanneer u twee of meer slots hebt of door de slot te selecteren wanneer hierom wordt gevraagd. Als u een rechtstreekse implementatie naar de hoofdomgeving vanuit CI wilt afdwingen wanneer er slots bestaan, stelt u AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS in plaats daarvan in op true.
  5. Valideer de gefaseerde implementatie.
  6. Voer azd appservice swap --src <slot> --dst @main uit om de release te promoten.
  7. Voer indien nodig de omgekeerde swap uit om de wijzigingen ongedaan te maken.