Nasazení do slotů nasazení služby Azure App Service pomocí Azure Developer CLI

Azure Developer CLI (azd) podporuje sloty nasazení služby Azure App Service pro aplikace hostované ve službě App Service. Sloty můžete definovat v rámci vaší infrastruktury, nasadit kód do konkrétního slotu a vyměnit sloty, až budete připraveni k propagaci verze k vydání.

Tento přístup použijte pro přípravná, modrá-zelená nasazení, orientační testování a vrácení zpět bez přidání vlastních skriptů nasazení.

Předpoklady

  • Projekt azd , který nasadí službu do služby Azure App Service.
  • Infrastruktura jako kód, která definuje prostředky služby App Service v Bicep.
  • Plán služby App Service na úrovni Standard (S1) nebo vyšší. Úrovně Free, Shared a Basic nepodporují sloty nasazení.

Definujte slot nasazení v Bicep

Definujte produkční místo Microsoft.Web/sites/slots jako obvykle, a poté přidejte prostředek pro každý slot, na který chcete azd cílit.

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: {}
}

Pokud používáte moduly AVM (Azure Verified Modules), definujte moduly webové aplikace a slotu nasazení ve stejném nasazení a předejte název aplikace modulu slotu.

Nasazení do slotu pomocí Azd

Spusťte azd up nebo azd provisionazd deploy jako obvykle.

azd up

Při prvním nasazení azd se nasadí do produkční lokality a všechny sloty definované ve vaší infrastruktuře. Toto první nasazení stanoví stejnou základní linii pro hlavní aplikaci a každý slot.

Po prvním nasazení azd deploy změní způsob, jak vybírá cíl nasazení, pokud existují sloty. azd nebude pokračovat v nasazování přímo do produkční aplikace, pokud jsou sloty k dispozici. Místo toho nasadíte do slotu, ověříte verzi a pak ji prohodíte do produkčního prostředí.

Jak azd vybere cíl nasazení

Když se azd deploy spustí pro službu App Service, která má nasazovací sloty, vybere cíl kontrolou historie nasazení hlavní aplikace a zhodnocením dostupných slotů.

Chování funguje takto:

  • Pokud neexistují žádná předchozí nasazení, azd se nasadí do hlavní aplikace a na všechny sloty.
  • Pokud existují předchozí nasazení a neexistují žádné sloty, azd se nasadí jenom do hlavní aplikace.
  • Pokud existují předchozí nasazení a existuje právě jeden slot, azd se nasadí pouze do daného slotu.
  • Pokud existují předchozí nasazení a existují dva nebo více slotů, azd použije slot určený proměnnou prostředí nebo vás vyzve k výběru jednoho slotu.

Důležité

Po prvním nasazení se azd nenasadí přímo do hlavní aplikace App Service, pokud existují sloty. Toto chování je záměrné a pomáhá zabránit náhodným přímým nasazením do produkčního prostředí. Pokud chcete aktualizovat produkční prostředí, nasaďte ho do slotu a pak slot prohoďte do produkčního prostředí (@main).

Výběr slotu s proměnnou prostředí

Pokud má vaše služba po prvním nasazení dva nebo více slotů, můžete interaktivní výzvu přeskočit nastavením proměnné prostředí pro službu, kterou chcete nasadit.

Použijte následující formát:

AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME

Pomocí velkých písmen a nahrazení pomlček podtržítkem vytvořte název proměnné z názvu azure.yaml služby.

Pokud je vaše služba například pojmenovaná my-api, použijte AZD_DEPLOY_MY_API_SLOT_NAME.

azd env set AZD_DEPLOY_MY_API_SLOT_NAME staging
azd deploy my-api

Tuto hodnotu můžete uložit ve svém azd prostředí pomocí azd env set, nebo ji definovat přímo v systému CI před spuštěním azd deploy.

Pokud má vaše služba přesně jeden slot, azd ignoruje proměnnou prostředí, protože existuje pouze jeden možný cíl nasazení.

Pokud má vaše služba dva nebo více slotů a proměnná prostředí není nastavená, azd zobrazí se výzva k výběru slotu.

Obejití detekce slotů a nasazení do hlavní aplikace

V některých scénářích je potřeba azd nasadit přímo do hlavní aplikace App Service, i když existují sloty. Příklad:

  • Vaše CI pipeline musí aktualizovat hlavní aplikaci a ponechat stávající sloty beze změny.
  • Obnovujete se z chybného stavu slotu a chcete znovu nasadit produkční lokalitu přímo.
  • Před konfigurací nových slotů obnovujete výchozí stav hlavní aplikace.

Pokud chcete obejít detekci slotů, nastavte pro službu následující proměnnou prostředí:

AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS

Pomocí velkých písmen a nahrazení pomlček podtržítkem vytvořte název proměnné z názvu azure.yaml služby. Nastavte hodnotu na true, chcete-li přeskočit detekci slotu a nasadit do hlavní aplikace.

Pokud je vaše služba například pojmenovaná my-api, použijte AZD_DEPLOY_MY_API_IGNORE_SLOTS.

azd env set AZD_DEPLOY_MY_API_IGNORE_SLOTS true
azd deploy my-api

Pokud je AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS nastaveno na true, azd se nasadí do hlavní aplikace a ignoruje jakoukoli hodnotu AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME pro stejnou službu. Zrušte nastavení proměnné nebo ji nastavte na false, aby se obnovilo výchozí chování zohledňující sloty.

CI a neinteraktivní chování

Při spuštění azd deploy --no-prompt nebo nasazení pomocí CI se výběr slotu chová odlišně v závislosti na tom, kolik slotů je dostupných:

Sloty Chování proměnné prostředí Výsledek
0 Nelze použít. azd se nasadí do hlavní aplikace.
1 Ignorováno, pokud AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS není true. azd se nasadí do jediného nasazovacího slotu nebo do hlavní aplikace, pokud se sloty ignorují.
2+ AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME k tomu, aby se zabránilo zobrazení výzvy, pokud AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS není true. azd se nasadí do zadaného slotu, nasadí se do hlavní aplikace, pokud jsou sloty ignorovány, nebo selže, pokud nelze vybrat žádný cíl.

Pokud automatizujete nasazení pro službu App Service, která má dva nebo více slotů, nastavte AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME v pipeline prostředí před spuštěním azd deploy. Chcete-li z CI vynutit přímé nasazení do main, když existují sloty, nastavte AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS na true.

Prohození slotů nasazení Azure App Service

Použijte rozšíření azure.appservice k prohození slotů po ověření. Pokud rozšíření ještě není nainstalované, azd vyzve vás k jeho instalaci při prvním spuštění příkazu.

Spusťte interaktivní prostředí:

azd appservice swap

Pokud existuje pouze jeden neprodukční slot, azd přeskočí výzvy a prohodí se přímo s produkčním prostředím.

Pro automatizaci explicitně zadejte zdrojové a cílové sloty. Použijte @main k odkazu na produkční slot.

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

Použijte tyto vzory k podpoře běžných postupů vydání.

  • Přesunout ověřené přípravné nasazení do produkčního prostředí pomocí --src staging --dst @main.
  • Vraťte se zpět tak, že prohodíte produkční prostředí zpět do přípravného slotu s --src @main --dst staging.
  • Cílení konkrétní služby založené na službě App Service v projektu s více službami azd s --service.

Přepínání je zamýšlená cesta pro aktualizaci produkčního prostředí po nakonfigurování slotů. Použijte azd deploy k aktualizaci slotu a poté azd appservice swap k nasazení slotu do produkce.

  1. Definujte jeden nebo více slotů nasazení služby App Service v šablonách Bicep.
  2. Zřízení prostředků služby App Service pomocí azd provision nebo azd up.
  3. Nechte první nasazení stanovit výchozí hodnotu pro hlavní aplikaci a každý slot.
  4. Nasaďte pozdější aktualizace aplikace do přípravného slotu nastavením AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME , pokud máte dva nebo více slotů, nebo výběrem slotu po zobrazení výzvy. Chcete-li vynutit přímé nasazení do hlavní větve z CI, pokud existují sloty, nastavte místo toho AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS na true.
  5. Ověřte fázované nasazení.
  6. Spusťte azd appservice swap --src <slot> --dst @main pro propagaci vydání.
  7. V případě potřeby proveďte zpětný krok k obnovení předchozího stavu.