Üzembe helyezés az Azure App Service üzembehelyezési pontjain az Azure Developer CLI használatával

Az Azure Developer CLI (azd) támogatja az Azure App Service üzembehelyezési pontjait az App Service-ben üzemeltetett alkalmazásokhoz. Meghatározhat tárolóhelyeket az infrastruktúrában, kódot helyezhet üzembe egy adott ponton, és felcserélheti a tárolóhelyeket, ha készen áll a kiadás előléptetésére.

Ezt a megközelítést egyéni üzembehelyezési szkriptek hozzáadása nélkül használhatja az előkészítéshez, a kék-zöld üzembe helyezéshez, a füstteszteléshez és a visszaállításhoz.

Előfeltételek

  • Egy azd olyan projekt, amely üzembe helyez egy szolgáltatást az Azure App Service-ben.
  • Infrastruktúra mint kód, amely az App Service-erőforrásokat a Bicepben definiálja.
  • App Service-csomag standard (S1) szinten vagy annál magasabban. Az ingyenes, megosztott és alapszintű szintek nem támogatják az üzembehelyezési helyeket.

Üzembehelyezési pont definiálása a Bicepben

Definiálja a gyártási helyszínt a szokásos módon, majd adjon hozzá egy Microsoft.Web/sites/slots erőforrást minden megcélozni kívánt azd ponthoz.

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

Ha Azure Verified Modulest (AVM) használ, adja meg a webalkalmazást és az üzembehelyezési pontmodulokat ugyanabban az üzembe helyezésben, és adja át az alkalmazás nevét a pontmodulnak.

Telepítés egy helyre az AZD használatával

Futtassa azd up vagy azd provisionazd deploy a szokásos módon.

azd up

Az első üzembe helyezéskor azd üzembe helyezi a éles helyen és az infrastruktúrában meghatározott összes slotot. Ez az első üzembe helyezés ugyanazt az alapkonfigurációt hozza létre a főalkalmazásban és minden pontban.

Az első üzembe helyezés után azd deploy megváltoztatja, hogyan választja ki az üzembehelyezési célt, ha léteznek slotok. azd nem folytatja a közvetlen üzembe helyezést az éles alkalmazásban, ha rendelkezésre állnak slotok. Ehelyett üzembe helyez egy foglalatban, ellenőrzi a kiadást, majd becseréli az éles környezetbe.

Hogyan választja ki az azd az üzembehelyezési célt?

Amikor a azd deploy egy olyan App Service esetében fut, amely rendelkezik telepítési helyekkel, a cél kiválasztásához először ellenőrzi a fő alkalmazás üzembe helyezési előzményeit, majd kiértékeli az elérhető telepítési slotokat.

A viselkedés a következőképpen működik:

  • Ha nem léteznek korábbi üzembe helyezések, azd telepít az alkalmazás fő részébe és az összes foglalatba.
  • Ha a korábbi telepítések léteznek, és nincsenek tárolóhelyek, azd csak a főalkalmazásban lesz üzembe helyezve.
  • Ha a korábbi telepítések léteznek, és pontosan egy pont létezik, azd csak erre a pontra telepít.
  • Ha léteznek korábbi üzembe helyezések, és két vagy több hely van, akkor a azd a környezeti változó által megadott helyet használja, vagy megkérdezi, hogy válasszon egyet.

Important

Az első üzembe helyezés azd után nem települ közvetlenül a fő App Service-alkalmazásba, ha vannak foglalatok. Ez a viselkedés szándékos, és segít megelőzni a termelési környezetbe történő véletlenszerű bevezetéseket. Az éles környezet frissítéséhez helyezzen üzembe egy pontot, majd cserélje le a pontot éles (@main) helyre.

Pont kiválasztása környezeti változóval

Ha a szolgáltatás két vagy több tárolóhellyel rendelkezik az első üzembe helyezés után, kihagyhatja az interaktív kérést, ha beállít egy környezeti változót az üzembe helyezni kívánt szolgáltatáshoz.

Használja a következő formátumot:

AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME

Hozza létre a változó nevét a szolgáltatásnévből azure.yaml nagybetűvel, és cserélje le a kötőjeleket aláhúzásjelekre.

Ha például a szolgáltatás neve el van nevezve my-api, használja a következőt AZD_DEPLOY_MY_API_SLOT_NAME:

azd env set AZD_DEPLOY_MY_API_SLOT_NAME staging
azd deploy my-api

Ezt az értéket azd környezetében tárolhatja a azd env set, vagy közvetlenül CI-rendszerben definiálhatja a azd deploy futtatása előtt.

Ha a szolgáltatásnak pontosan egy nyílása van, akkor a környezeti változót figyelmen kívül hagyja a azd, mert csak egy lehetséges üzembehelyezési cél van.

Ha a szolgáltatás két vagy több hellyel rendelkezik, és a környezeti változó nincs beállítva, azd megkéri, hogy válasszon egy helyet.

Pontészlelés megkerülése és üzembe helyezés a főalkalmazásban

Bizonyos esetekben a azd közvetlenül a fő App Service-alkalmazásba kell telepítenie, még akkor is, ha léteznek slotok. Például:

  • A CI-folyamatodnak frissítenie kell a fő alkalmazást, miközben a meglévő slotokat érintetlenül hagyja.
  • Egy hibás slotállapotból szeretne helyreállni, és közvetlenül szeretné újra üzembe helyezni az éles webhelyet.
  • Az új helyek konfigurálása előtt éppen újraalapozza a fő alkalmazást.

A foglalatészlelés megkerüléséhez állítsa be a következő környezeti változót a szolgáltatáshoz:

AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS

Hozza létre a változó nevét a szolgáltatásnévből azure.yaml nagybetűvel, és cserélje le a kötőjeleket aláhúzásjelekre. Állítsa az értéket erre: true, hogy kihagyja a slotészlelést, és az üzembe helyezést a főalkalmazásban végezze el.

Ha például a szolgáltatás neve el van nevezve my-api, használja a következőt AZD_DEPLOY_MY_API_IGNORE_SLOTS:

azd env set AZD_DEPLOY_MY_API_IGNORE_SLOTS true
azd deploy my-api

Ha a(z) AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS értéke true, a(z) azd a főalkalmazásba települ, és figyelmen kívül hagyja az ugyanahhoz a szolgáltatáshoz tartozó AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME értéket. Szüntesse meg a változó beállítását, vagy állítsa false értékre, hogy visszatérjen az alapértelmezett, slottudatos működéshez.

CI és neminteraktív viselkedés

A CI-ről való futtatáskor azd deploy --no-prompt vagy üzembe helyezéskor a pontválasztás a rendelkezésre álló pontok számától függően eltérően viselkedik:

Bővítőhely Környezeti változók viselkedése Result
0 Nem alkalmazható. azd telepítése a fő alkalmazáshoz.
1 Figyelmen kívül marad, hacsak a AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS nem true. azd az egyetlen üzembehelyezési pontra, vagy ha a slotokat figyelmen kívül hagyják, a fő alkalmazásra telepít.
2+ AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME szükséges a kérés megjelenítésének elkerüléséhez, kivéve, ha AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS értéke true. azd üzembe helyezi a megadott ponton, üzembe helyezi a főalkalmazásban a pontok figyelmen kívül hagyásakor, vagy meghiúsul, ha nincs kijelölhető cél.

Ha automatizálja egy két vagy több slot-tal rendelkező App Service üzembe helyezését, állítsa be a AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME a folyamatkörnyezetben a azd deploy futtatása előtt. Ha a CI-ből közvetlenül az éles környezetbe szeretné kényszeríteni az üzembe helyezést, amikor vannak slotok, állítsa inkább a(z) AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS értékét erre: true.

Az Azure App Service üzembehelyezési pontjainak felcserélése

Az azure.appservice bővítmény használatával az ellenőrzés után felcserélheti a helyeket. Ha a bővítmény még nincs telepítve, azd a parancs első futtatásakor kéri a telepítést.

Futtassa az interaktív felületet:

azd appservice swap

Ha csak egy nem termelési pont létezik, azd automatikusan kihagyja a kéréseket, és közvetlenül cserél az éles környezettel.

Az automatizáláshoz explicit módon adja meg a forrás- és célhelyeket. A „production slotra” való hivatkozáshoz használja a @main-t.

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

Használja ezeket a mintákat a gyakori kiadási folyamatok támogatásához:

  • Érvényesített előkészítési üzembe helyezés éles környezetbe helyezése a(z) --src staging --dst @main segítségével.
  • Az éles környezet visszacserélésével térjen vissza az előkészítési pontra a következővel --src @main --dst staging: .
  • Egy adott App Service által támogatott szolgáltatás megcélzása többszolgáltatásos azd projektben a következővel --service: .

A felcserélés a tárolóhelyek konfigurálása után az éles környezet frissítésének tervezett útvonala. Egy azd deploy pont frissítésére, majd a pont éles környezetbe való előléptetésére használható azd appservice swap .

  1. Definiáljon egy vagy több App Service-üzembehelyezési pontot a Bicep-sablonokban.
  2. Az App Service-erőforrások kiépítése azd provision vagy azd up használatával.
  3. Hagyja, hogy az első üzembe helyezés alapkonfigurációt hozzon létre a fő alkalmazáson és minden ponton.
  4. A későbbi alkalmazásfrissítések üzembe helyezése egy előkészítési ponton két vagy több tárolóhely beállításával AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME , vagy a pont kiválasztásával, amikor a rendszer kéri. Ha a CI-ből közvetlenül a fő környezetbe szeretne üzembe helyezni akkor is, amikor vannak slotok, állítsa a AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS értékét inkább true értékre.
  5. Ellenőrizze a szakaszos üzembe helyezést.
  6. Futtassa azd appservice swap --src <slot> --dst @main a kiadás elősegítéséhez.
  7. Szükség esetén futtassa a fordított felcserélést a visszaállításhoz.