Wdrażanie do slotów wdrożeniowych Azure App Service za pomocą Azure Developer CLI

Interfejs wiersza polecenia dla deweloperów platformy Azure (azd) obsługuje miejsca wdrożenia usługi Azure App Service dla aplikacji hostowanych w usłudze App Service. Możesz zdefiniować miejsca w infrastrukturze, wdrożyć kod w określonym miejscu i zamienić miejsca, gdy wszystko będzie gotowe do podwyższenia poziomu wydania.

Użyj tego podejścia do etapowania, wdrożeń typu blue-green, testów wstępnych i wycofywania bez dodawania niestandardowych skryptów do wdrażania.

Wymagania wstępne

  • Projekt azd wdrażający usługę do Azure App Service.
  • Infrastruktura jako kod definiujący zasoby usługi App Service w środowisku Bicep.
  • Plan usługi App Service w warstwie Standard (S1) lub wyższej. Warstwy Free, Shared oraz Basic nie obsługują slotów wdrożeniowych.

Definiowanie miejsca wdrożenia w środowisku Bicep

Zdefiniuj lokację produkcyjną Microsoft.Web/sites/slots jak zwykle, a następnie dodaj zasób dla każdego miejsca docelowego azd .

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

Jeśli używasz modułów Azure Verified Modules (AVM), zdefiniuj moduły aplikacji internetowej i slotu wdrożeniowego w tym samym wdrożeniu i przekaż nazwę aplikacji do modułu slotu.

Wdrażanie do gniazda za pomocą azd

Uruchom azd up albo azd provision oraz azd deploy tak jak zwykle.

azd up

Przy pierwszym wdrożeniu azd wdraża się na lokację produkcyjną oraz wszystkie sloty zdefiniowane w infrastrukturze. To pierwsze wdrożenie ustanawia ten sam punkt odniesienia w głównej aplikacji i każdym slocie.

Po pierwszym wdrożeniu azd deploy zmienia sposób wybierania docelowego miejsca wdrożenia, gdy dostępne są sloty. azd nie kontynuuje wdrażania bezpośrednio do aplikacji produkcyjnej, gdy są dostępne sloty. Zamiast tego wdrażasz do slotu, weryfikujesz wydanie, a następnie zamieniasz je ze środowiskiem produkcyjnym.

Jak azd wybiera cel wdrożenia

Gdy azd deploy działa dla usługi App Service, która ma miejsca wdrożeniowe, wybiera cel, sprawdzając historię wdrożeń w głównej aplikacji, a następnie ocenia dostępne miejsca.

Zachowanie działa w następujący sposób:

  • Jeśli nie istnieją żadne poprzednie wdrożenia, azd wdraża się do głównej aplikacji i wszystkich slotów.
  • Jeśli istnieją poprzednie wdrożenia i nie ma żadnych slotów, azd wdrożenia są dokonywane tylko w głównej aplikacji.
  • Jeżeli istnieją poprzednie wdrożenia i istnieje dokładnie jeden slot, azd wdraża się tylko w tym slocie.
  • Jeśli poprzednie wdrożenia istnieją i jest co najmniej dwa miejsca, azd używa miejsca określonego przez zmienną środowiskową lub azd wyświetli monit o wybranie jednego.

Ważna

Po pierwszym wdrożeniu, jeśli istnieją sloty, azd nie wdraża się bezpośrednio do głównej aplikacji usługi App Service. To zachowanie jest zamierzone i pomaga zapobiegać przypadkowym wdrożeniom bezpośrednio do środowiska produkcyjnego. Aby zaktualizować środowisko produkcyjne, wdróż do slotu, a następnie zamień slot ze środowiskiem produkcyjnym (@main).

Wybierz przedział ze zmienną środowiskową

Jeśli usługa ma co najmniej dwa miejsca po pierwszym wdrożeniu, możesz pominąć interakcyjny monit, ustawiając zmienną środowiskową dla usługi, którą chcesz wdrożyć.

Użyj następującego formatu:

AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME

Skompiluj nazwę zmiennej z nazwy azure.yaml usługi przy użyciu wielkich liter i zastąp łączniki podkreśleniami.

Jeśli na przykład twoja usługa ma nazwę my-api, użyj polecenia AZD_DEPLOY_MY_API_SLOT_NAME.

azd env set AZD_DEPLOY_MY_API_SLOT_NAME staging
azd deploy my-api

Tę wartość można przechowywać w środowisku azd przy użyciu azd env set, lub zdefiniować ją bezpośrednio w systemie ciągłej integracji przed uruchomieniem azd deploy.

Jeśli usługa ma dokładnie jedno miejsce, azd ignoruje zmienną środowiskową, ponieważ istnieje tylko jeden możliwy cel wdrożenia.

Jeśli usługa ma co najmniej dwa miejsca, a zmienna środowiskowa nie jest ustawiona, azd monituje o wybranie miejsca.

Pomiń wykrywanie slotu i wdróż do aplikacji głównej

W niektórych scenariuszach należy azd wdrożyć bezpośrednio do głównej aplikacji usługi App Service, nawet gdy istnieją gniazda wdrożeniowe. Przykład:

  • Potok CI musi zaktualizować główną aplikację, pozostawiając istniejące sloty bez zmian.
  • Odzyskujesz po nieprawidłowym stanie slotu i chcesz bezpośrednio ponownie wdrożyć witrynę produkcyjną.
  • Ponownie ustawiasz punkt odniesienia dla głównej aplikacji przed skonfigurowaniem nowych slotów.

Aby obejść wykrywanie slotu, ustaw dla usługi następującą zmienną środowiskową:

AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS

Skompiluj nazwę zmiennej z nazwy azure.yaml usługi przy użyciu wielkich liter i zastąp łączniki podkreśleniami. Ustaw wartość na true, aby pominąć wykrywanie gniazd i wdrożyć w aplikacji głównej.

Jeśli na przykład twoja usługa ma nazwę my-api, użyj polecenia AZD_DEPLOY_MY_API_IGNORE_SLOTS.

azd env set AZD_DEPLOY_MY_API_IGNORE_SLOTS true
azd deploy my-api

Gdy AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS jest ustawione na true, azd jest wdrażane do aplikacji głównej i ignoruje dowolną wartość AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME dla tej samej usługi. Usuń wartość zmiennej lub ustaw ją na false, aby przywrócić domyślne zachowanie uwzględniające sloty.

CI (Ciągła Integracja) i nieinteraktywny tryb pracy

Po uruchomieniu azd deploy --no-prompt lub wdrożeniu z CI, wybór slotu działa inaczej w zależności od liczby dostępnych slotów:

Sloty Zachowanie zmiennej środowiskowej Wynik
0 Nie dotyczy. azd wdraża się do głównej aplikacji.
1 Ignorowane, chyba że AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS ma wartość true. azd jest wdrażany do jedynego slotu lub do głównej aplikacji, gdy sloty są ignorowane.
2+ AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME wymagane do uniknięcia monitowania, chyba że AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS ma wartość true. azd wdraża do określonego slotu, wdraża do aplikacji głównej, gdy sloty są ignorowane, lub kończy się niepowodzeniem, jeśli nie można wybrać celu wdrożenia.

Jeśli zautomatyzujesz wdrożenia dla usługi App Service, która ma co najmniej dwa sloty, ustaw wartość AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME w środowisku potoku przed uruchomieniem azd deploy. Aby wymusić wdrożenie bezpośrednio do środowiska głównego z poziomu CI, gdy istnieją sloty, ustaw AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS na true zamiast tego.

Wymiana miejsc wdrożenia usługi Azure App Service

Użyj rozszerzenia azure.appservice, aby zamienić sloty po walidacji. Jeśli rozszerzenie nie jest jeszcze zainstalowane, azd monituje o jego zainstalowanie przy pierwszym uruchomieniu polecenia.

Uruchom środowisko interaktywne:

azd appservice swap

Jeśli istnieje tylko jeden slot nieprodukcyjny, azd pomija monity i bezpośrednio wymienia się z produkcyjnym.

W przypadku automatyzacji określ jawnie miejsca źródłowe i docelowe. Użyj @main, aby odwołać się do slotu produkcyjnego.

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

Użyj tych wzorców, aby obsługiwać typowe procesy wydawnicze.

  • Podwyższanie poziomu zweryfikowanego wdrożenia przejściowego do środowiska produkcyjnego za pomocą polecenia --src staging --dst @main.
  • Wycofaj, zamieniając środowisko produkcyjne z powrotem na miejsce przejściowe za pomocą polecenia --src @main --dst staging.
  • Ukierunkowanie konkretnej usługi opartej na App Service w projekcie z wieloma usługami azd za pomocą --service.

Przełączanie miejsc jest przewidzianą metodą aktualizacji produkcji po skonfigurowaniu slotów. Użyj azd deploy, aby zaktualizować miejsce, a następnie użyj azd appservice swap, aby promować to miejsce do środowiska produkcyjnego.

  1. Zdefiniuj co najmniej jedno gniazdo wdrożenia usługi App Service w szablonach Bicep.
  2. Skonfiguruj zasoby usługi Azure App Service przy użyciu azd provision lub azd up.
  3. Niech pierwsze wdrożenie ustanowi punkt odniesienia w głównej aplikacji i każdym slocie.
  4. Wdróż później aktualizacje aplikacji do gniazda testowego, ustawiając AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME, gdy masz co najmniej dwa gniazda, lub wybierając gniazdo po wyświetleniu monitu. Aby wymusić wdrożenie bezpośrednio do środowiska głównego z poziomu CI, gdy istnieją sloty, ustaw AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS na true.
  5. Zweryfikuj wdrożenie etapowe.
  6. Uruchom polecenie azd appservice swap --src <slot> --dst @main, aby promować wydanie.
  7. W razie potrzeby uruchom odwrotną wymianę, aby przywrócić wcześniejszy stan.