Azure App Service에서 스테이징 환경 설정Set up staging environments in Azure App Service

웹 앱, Linux, 모바일 백 엔드 또는 API 앱의 웹 앱을 Azure App Service에 배포 하는 경우 표준, 프리미엄또는 격리 된 App Service 계획 계층에서 실행 하는 경우 기본 프로덕션 슬롯 대신 별도의 배포 슬롯을 사용할 수 있습니다.When you deploy your web app, web app on Linux, mobile back end, or API app to Azure App Service, you can use a separate deployment slot instead of the default production slot when you're running in the Standard, Premium, or Isolated App Service plan tier. 배포 슬롯은 고유한 호스트 이름이 있는 라이브 앱입니다.Deployment slots are live apps with their own host names. 앱 콘텐츠 및 구성 요소는 프로덕션 슬롯을 포함하여 두 배포 슬롯 간에 교환될 수 있습니다.App content and configurations elements can be swapped between two deployment slots, including the production slot.

애플리케이션을 비프로덕션 슬롯에 배포하면 다음과 같은 이점이 있습니다.Deploying your application to a non-production slot has the following benefits:

  • 프로덕션 슬롯과 교환하기 전에 준비 배포 슬롯에서 앱 변경 사항의 유효성을 검사할 수 있습니다.You can validate app changes in a staging deployment slot before swapping it with the production slot.
  • 먼저 슬롯으로 앱을 배포하고 프로덕션으로 교환하기 때문에 프로덕션으로 교환되기 전에 슬롯에 있는 모든 인스턴스가 준비되어 있는 상태입니다.Deploying an app to a slot first and swapping it into production makes sure that all instances of the slot are warmed up before being swapped into production. 따라서 앱을 배포할 때 가동 중지가 발생하지 않습니다.This eliminates downtime when you deploy your app. 트래픽 리디렉션은 중단 없이 원활하게 수행되며 교환 작업으로 인해 삭제되는 요청은 없습니다.The traffic redirection is seamless, and no requests are dropped because of swap operations. 사전 교환 유효성 검사가 필요 하지 않은 경우 자동 교환 을 구성 하 여이 전체 워크플로를 자동화할 수 있습니다.You can automate this entire workflow by configuring auto swap when pre-swap validation isn't needed.
  • 교환 후에는 이전의 준비된 앱이 들어 있던 슬롯 안에 이전의 프로덕션 앱이 들어갑니다.After a swap, the slot with previously staged app now has the previous production app. 프로덕션 슬롯과 교환한 변경 내용이 예상과 다른 경우 같은 교환 작업을 즉시 수행하여 "마지막 양호 상태"로 돌아갈 수 있습니다.If the changes swapped into the production slot aren't as you expect, you can perform the same swap immediately to get your "last known good site" back.

각 App Service 계획 계층은 다양한 수의 배포 슬롯을 지원합니다.Each App Service plan tier supports a different number of deployment slots. 배포 슬롯 사용에 대 한 추가 비용은 없습니다.There's no additional charge for using deployment slots. 앱 계층이 지 원하는 슬롯 수를 확인 하려면 App Service 제한을 참조 하세요.To find out the number of slots your app's tier supports, see App Service limits.

앱을 다른 계층으로 확장 하려면 대상 계층에서 앱이 이미 사용 하는 슬롯 수를 지원 하는지 확인 합니다.To scale your app to a different tier, make sure that the target tier supports the number of slots your app already uses. 예를 들어 앱의 슬롯이 5 개를 초과 하는 경우 표준 계층은 5 개의 배포 슬롯만 지원 하기 때문에 표준 계층으로 확장할 수 없습니다.For example, if your app has more than five slots, you can't scale it down to the Standard tier, because the Standard tier supports only five deployment slots.

슬롯 추가Add a slot

여러 배포 슬롯을 사용 하도록 설정 하려면 앱이 표준, 프리미엄또는 격리 계층에서 실행 되어야 합니다.The app must be running in the Standard, Premium, or Isolated tier in order for you to enable multiple deployment slots.

  1. Azure Portal에서 App Services 를 검색 하 여 선택 하 고 앱을 선택 합니다.in the Azure portal, search for and select App Services and select your app.

    App Services 검색

  2. 왼쪽 창에서 배포 슬롯 > 슬롯 추가를 선택 합니다.In the left pane, select Deployment slots > Add Slot.

    새 배포 슬롯 추가

    참고

    앱이 아직 Standard, Premium또는 Isolated 계층에 있지 않은 경우 준비 된 게시를 사용 하도록 지원 되는 계층을 나타내는 메시지가 표시 됩니다.If the app isn't already in the Standard, Premium, or Isolated tier, you receive a message that indicates the supported tiers for enabling staged publishing. 이 시점에서 업그레이드 를 선택 하 고 계속 하기 전에 앱의 크기 조정 탭으로 이동할 수 있는 옵션이 있습니다.At this point, you have the option to select Upgrade and go to the Scale tab of your app before continuing.

  3. 슬롯 추가 대화 상자에서 슬롯에 이름을 지정 하 고 다른 배포 슬롯에서 앱 구성을 복제할 것인지 여부를 선택 합니다.In the Add a slot dialog box, give the slot a name, and select whether to clone an app configuration from another deployment slot. 추가 를 선택 하 여 계속 합니다.Select Add to continue.

    구성 원본

    기존 슬롯에서 구성을 복제할 수 있습니다.You can clone a configuration from any existing slot. 복제할 수 있는 설정에는 앱 설정, 연결 문자열, 언어 프레임워크 버전, 웹 소켓, HTTP 버전 및 플랫폼 비트 수가 포함됩니다.Settings that can be cloned include app settings, connection strings, language framework versions, web sockets, HTTP version, and platform bitness.

  4. 슬롯이 추가 되 면 닫기 를 선택 하 여 대화 상자를 닫습니다.After the slot is added, select Close to close the dialog box. 이제 새 슬롯이 배포 슬롯 페이지에 표시 됩니다.The new slot is now shown on the Deployment slots page. 기본적으로 traffic% 는 새 슬롯에 대해 0으로 설정 되 고 모든 고객 트래픽은 프로덕션 슬롯으로 라우팅됩니다.By default, Traffic % is set to 0 for the new slot, with all customer traffic routed to the production slot.

  5. 새 배포 슬롯을 선택 하 여 해당 슬롯의 리소스 페이지를 엽니다.Select the new deployment slot to open that slot's resource page.

    배포 슬롯 제목

    스테이징 슬롯에는 다른 App Service 앱과 마찬가지로 관리 페이지가 있습니다.The staging slot has a management page just like any other App Service app. 슬롯의 구성을 변경할 수 있습니다.You can change the slot's configuration. 배포 슬롯을 보고 있음을 알리기 위해 앱 이름이로 표시 되 <app-name>/<slot-name> 고 앱 유형이 App Service (슬롯) 입니다.To remind you that you're viewing the deployment slot, the app name is shown as <app-name>/<slot-name>, and the app type is App Service (Slot). 동일한 명칭을 사용 하 여 리소스 그룹에서 별도의 앱으로 슬롯을 볼 수도 있습니다.You can also see the slot as a separate app in your resource group, with the same designations.

  6. 슬롯의 리소스 페이지에서 앱 URL을 선택 합니다.Select the app URL on the slot's resource page. 배포 슬롯에는 고유한 호스트 이름이 있으며 라이브 앱 이기도 합니다.The deployment slot has its own host name and is also a live app. 배포 슬롯에 대 한 공용 액세스를 제한 하려면 AZURE APP SERVICE IP 제한을 참조 하세요.To limit public access to the deployment slot, see Azure App Service IP restrictions.

다른 슬롯에서 설정을 복제하더라도 새 배포 슬롯에는 내용이 없습니다.The new deployment slot has no content, even if you clone the settings from a different slot. 예를 들어 Git를 사용 하 여이 슬롯에 게시할수 있습니다.For example, you can publish to this slot with Git. 다른 리포지토리 분기 또는 다른 리포지토리로부터 슬롯에 배포할 수 있습니다.You can deploy to the slot from a different repository branch or a different repository.

교환 하는 동안 수행 되는 작업What happens during a swap

스왑 작업 단계Swap operation steps

두 슬롯을 교환 하는 경우 (일반적으로 스테이징 슬롯에서 프로덕션 슬롯으로 App Service) 다음을 수행 하 여 대상 슬롯에 가동 중지 시간이 발생 하지 않도록 합니다.When you swap two slots (usually from a staging slot into the production slot), App Service does the following to ensure that the target slot doesn't experience downtime:

  1. 대상 슬롯 (예: 프로덕션 슬롯)에서 다음 설정을 원본 슬롯의 모든 인스턴스에 적용 합니다.Apply the following settings from the target slot (for example, the production slot) to all instances of the source slot:

    이러한 경우 모두 원본 슬롯의 모든 인스턴스가 다시 시작 되도록 트리거합니다.Any of these cases trigger all instances in the source slot to restart. Preview를 사용하 여 교환 하는 동안 첫 번째 단계의 끝을 표시 합니다.During swap with preview, this marks the end of the first phase. 교환 작업이 일시 중지 되 고 소스 슬롯이 대상 슬롯의 설정으로 올바르게 작동 하는지 확인할 수 있습니다.The swap operation is paused, and you can validate that the source slot works correctly with the target slot's settings.

  2. 소스 슬롯의 모든 인스턴스가 다시 시작을 완료할 때까지 기다립니다.Wait for every instance in the source slot to complete its restart. 인스턴스를 다시 시작 하지 못하는 경우 교환 작업은 원본 슬롯의 모든 변경 내용을 되돌리고 작업을 중지 합니다.If any instance fails to restart, the swap operation reverts all changes to the source slot and stops the operation.

  3. 로컬 캐시 를 사용 하는 경우 소스 슬롯의 각 인스턴스에서 응용 프로그램 루트 ("/")에 대 한 HTTP 요청을 수행 하 여 로컬 캐시 초기화를 트리거합니다.If local cache is enabled, trigger local cache initialization by making an HTTP request to the application root ("/") on each instance of the source slot. 각 인스턴스가 HTTP 응답을 반환할 때까지 기다립니다.Wait until each instance returns any HTTP response. 로컬 캐시 초기화를 수행 하면 각 인스턴스에서 다른 다시 시작이 발생 합니다.Local cache initialization causes another restart on each instance.

  4. 사용자 지정 준비상태에서 자동 교환이 설정 된 경우 원본 슬롯의 각 인스턴스에서 응용 프로그램 루트 ("/")에 대 한 HTTP 요청을 만들어 응용 프로그램 시작 을 트리거합니다.If auto swap is enabled with custom warm-up, trigger Application Initiation by making an HTTP request to the application root ("/") on each instance of the source slot.

    applicationInitialization을 지정 하지 않으면 각 인스턴스에서 원본 슬롯의 응용 프로그램 루트에 대 한 HTTP 요청을 트리거합니다.If applicationInitialization isn't specified, trigger an HTTP request to the application root of the source slot on each instance.

    인스턴스가 HTTP 응답을 반환 하는 경우 준비 된 것으로 간주 됩니다.If an instance returns any HTTP response, it's considered to be warmed up.

  5. 원본 슬롯의 모든 인스턴스가 성공적으로 준비 두 슬롯에 대 한 라우팅 규칙을 전환 하 여 두 슬롯을 교환 합니다.If all instances on the source slot are warmed up successfully, swap the two slots by switching the routing rules for the two slots. 이 단계를 수행한 후 대상 슬롯 (예: 프로덕션 슬롯)에는 이전에 원본 슬롯에서 준비 된 앱이 있습니다.After this step, the target slot (for example, the production slot) has the app that's previously warmed up in the source slot.

  6. 이제 원본 슬롯의 이전에는 대상 슬롯에 사전 교환 앱이 있으므로 모든 설정을 적용 하 고 인스턴스를 다시 시작 하 여 동일한 작업을 수행 합니다.Now that the source slot has the pre-swap app previously in the target slot, perform the same operation by applying all settings and restarting the instances.

교환 작업의 모든 지점에서 스왑 된 앱을 초기화 하는 모든 작업은 원본 슬롯에서 발생 합니다.At any point of the swap operation, all work of initializing the swapped apps happens on the source slot. 대상 슬롯은 교환이 성공 하거나 실패 하는 위치와 관계 없이 원본 슬롯을 준비 하 고 준비는 동안 온라인 상태를 유지 합니다.The target slot remains online while the source slot is being prepared and warmed up, regardless of where the swap succeeds or fails. 스테이징 슬롯을 프로덕션 슬롯과 교환 하려면 프로덕션 슬롯이 항상 대상 슬롯 인지 확인 합니다.To swap a staging slot with the production slot, make sure that the production slot is always the target slot. 이러한 방식으로 교환 작업은 프로덕션 앱에 영향을 주지 않습니다.This way, the swap operation doesn't affect your production app.

어떤 설정이 교환되나요?Which settings are swapped?

다른 배포 슬롯으로부터 구성을 복제할 때 복제된 구성을 편집할 수 있습니다.When you clone configuration from another deployment slot, the cloned configuration is editable. 일부 구성 요소는 교환 (슬롯 특정)에서 콘텐츠를 따르고, 다른 구성 요소는 교환 (슬롯 특정) 후에 동일한 슬롯에 유지 됩니다.Some configuration elements follow the content across a swap (not slot specific), whereas other configuration elements stay in the same slot after a swap (slot specific). 다음 목록은 슬롯을 교환할 때 변경되는 설정을 보여줍니다.The following lists show the settings that change when you swap slots.

교환된 설정:Settings that are swapped:

  • 프레임 워크 버전, 32/64 비트, 웹 소켓 등의 일반 설정General settings, such as framework version, 32/64-bit, web sockets
  • 앱 설정(슬롯에 맞도록 구성할 수 있음)App settings (can be configured to stick to a slot)
  • 연결 설정(슬롯에 맞도록 구성할 수 있음)Connection strings (can be configured to stick to a slot)
  • 처리기 매핑Handler mappings
  • 공용 인증서Public certificates
  • WebJob 콘텐츠WebJobs content
  • 하이브리드 연결 *Hybrid connections *
  • 가상 네트워크 통합 *Virtual network integration *
  • 서비스 끝점 *Service endpoints *
  • Azure Content Delivery Network *Azure Content Delivery Network *

별표 (*)로 표시 된 기능을 교환 하지 않도록 계획 합니다.Features marked with an asterisk (*) are planned to be unswapped.

교환되지 않은 설정:Settings that aren't swapped:

  • 게시 엔드포인트Publishing endpoints
  • 사용자 지정 도메인 이름Custom domain names
  • 공용이 아닌 인증서 및 TLS/SSL 설정Non-public certificates and TLS/SSL settings
  • 크기 조정 설정Scale settings
  • WebJob 스케줄러WebJobs schedulers
  • IP 제한IP restrictions
  • Always OnAlways On
  • 진단 설정Diagnostic settings
  • CORS(원본 간 리소스 공유)Cross-origin resource sharing (CORS)

참고

또한 스왑 되지 않은 설정에 적용 되는 특정 앱 설정은 교환 되지 않습니다.Certain app settings that apply to unswapped settings are also not swapped. 예를 들어 진단 설정이 교환 되지 않으므로 및와 같은 관련 앱 설정은 WEBSITE_HTTPLOGGING_RETENTION_DAYS DIAGNOSTICS_AZUREBLOBRETENTIONDAYS 슬롯 설정으로 표시 되지 않는 경우에도 교환 되지 않습니다.For example, since diagnostic settings are not swapped, related app settings like WEBSITE_HTTPLOGGING_RETENTION_DAYS and DIAGNOSTICS_AZUREBLOBRETENTIONDAYS are also not swapped, even if they don't show up as slot settings.

특정 슬롯 (교환 되지 않음)에 맞게 앱 설정 또는 연결 문자열을 구성 하려면 해당 슬롯에 대 한 구성 페이지로 이동 합니다.To configure an app setting or connection string to stick to a specific slot (not swapped), go to the Configuration page for that slot. 설정을 추가 하거나 편집한 후 배포 슬롯 설정을 선택 합니다.Add or edit a setting, and then select deployment slot setting. 이 확인란을 선택 하면 설정이 스왑할 수 없음을 App Service에 알려 줍니다.Selecting this check box tells App Service that the setting is not swappable.

슬롯 설정

두 슬롯 교환Swap two slots

앱의 배포 슬롯 페이지 및 개요 페이지에서 배포 슬롯을 교환할 수 있습니다.You can swap deployment slots on your app's Deployment slots page and the Overview page. 슬롯 교환에 대 한 기술 세부 정보는 교환 하는 동안 수행되는 작업을 참조 하세요.For technical details on the slot swap, see What happens during swap.

중요

앱을 배포 슬롯에서 프로덕션으로 교환 하기 전에 프로덕션이 대상 슬롯 인지 확인 하 고 원본 슬롯의 모든 설정이 프로덕션 환경에서 원하는 대로 정확 하 게 구성 되었는지 확인 합니다.Before you swap an app from a deployment slot into production, make sure that production is your target slot and that all settings in the source slot are configured exactly as you want to have them in production.

배포 슬롯을 교환 하려면:To swap deployment slots:

  1. 앱의 배포 슬롯 페이지로 이동 하 고 교환을 선택 합니다.Go to your app's Deployment slots page and select Swap.

    교환 단추

    교환 대화 상자에는 선택한 원본 및 대상 슬롯에서 변경 될 설정이 표시 됩니다.The Swap dialog box shows settings in the selected source and target slots that will be changed.

  2. 원하는 원본대상 슬롯을 선택합니다.Select the desired Source and Target slots. 일반적으로 대상은 프로덕션 슬롯입니다.Usually, the target is the production slot. 또한 원본 변경 내용 및 대상 변경 탭을 선택 하 고 구성 변경이 예상 되는지 확인 합니다.Also, select the Source Changes and Target Changes tabs and verify that the configuration changes are expected. 완료 되 면 교환을 선택 하 여 슬롯을 즉시 교환할 수 있습니다.When you're finished, you can swap the slots immediately by selecting Swap.

    전체 교환

    교환이 실제로 수행 되기 전에 대상 슬롯이 새 설정으로 실행 되는 방식을 확인 하려면 바꾸기를 선택 하지 말고 preview와 바꾸기의 지침을 따르세요.To see how your target slot would run with the new settings before the swap actually happens, don't select Swap, but follow the instructions in Swap with preview.

  3. 완료 되 면 닫기를 선택 하 여 대화 상자를 닫습니다.When you're finished, close the dialog box by selecting Close.

문제가 있는 경우 교체 문제 해결을 참조 하세요.If you have any problems, see Troubleshoot swaps.

미리 보기가 있는 교환(다단계 교환)Swap with preview (multi-phase swap)

대상 슬롯으로 프로덕션으로 전환 하기 전에 교체 된 설정으로 앱이 실행 되는지 확인 합니다.Before you swap into production as the target slot, validate that the app runs with the swapped settings. 또한 원본 슬롯은 바꾸기 완료 전에 준비 중요 한 응용 프로그램에 적합 합니다.The source slot is also warmed up before the swap completion, which is desirable for mission-critical applications.

Preview를 사용 하 여 교환을 수행 하는 경우 App Service는 동일한 교환 작업 을 수행 하지만 첫 번째 단계 후에는 일시 중지 됩니다.When you perform a swap with preview, App Service performs the same swap operation but pauses after the first step. 그런 다음 교환을 완료 하기 전에 스테이징 슬롯에 대 한 결과를 확인할 수 있습니다.You can then verify the result on the staging slot before completing the swap.

교환을 취소 하면 구성 요소가 원본 슬롯에 다시 적용 App Service.If you cancel the swap, App Service reapplies configuration elements to the source slot.

Preview를 사용 하 여 교환 하려면:To swap with preview:

  1. 배포 슬롯 교환 의 단계를 수행 하 되 미리 보기로 전환 수행을선택 합니다.Follow the steps in Swap deployment slots but select Perform swap with preview.

    미리 보기가 있는 교환

    이 대화 상자에는 1 단계에서 원본 슬롯의 구성과 원본 및 대상 슬롯이 2 단계에서 변경 되는 방식이 표시 됩니다.The dialog box shows you how the configuration in the source slot changes in phase 1, and how the source and target slot change in phase 2.

  2. 교환을 시작할 준비가 되 면 교환 시작을 선택 합니다.When you're ready to start the swap, select Start Swap.

    1 단계가 완료 되 면 대화 상자에 알림이 표시 됩니다.When phase 1 finishes, you're notified in the dialog box. 로 이동 하 여 원본 슬롯에서 교환을 미리 봅니다 https://<app_name>-<source-slot-name>.azurewebsites.net .Preview the swap in the source slot by going to https://<app_name>-<source-slot-name>.azurewebsites.net.

  3. 보류 중인 교체를 완료할 준비가 되 면 바꾸기 작업 에서 전체 바꾸기 를 선택 하 고 전체 교체를 선택 합니다.When you're ready to complete the pending swap, select Complete Swap in Swap action and select Complete Swap.

    보류 중인 교환을 취소 하려면 대신 바꾸기 취소 를 선택 합니다.To cancel a pending swap, select Cancel Swap instead.

  4. 완료 되 면 닫기를 선택 하 여 대화 상자를 닫습니다.When you're finished, close the dialog box by selecting Close.

문제가 있는 경우 교체 문제 해결을 참조 하세요.If you have any problems, see Troubleshoot swaps.

다단계 교환을 자동화 하려면 PowerShell을 사용 하 여 자동화를 참조 하세요.To automate a multi-phase swap, see Automate with PowerShell.

교환 롤백Roll back a swap

슬롯 교환 후 대상 슬롯(예: 프로덕션 슬롯)에서 오류가 발생하면 2개의 동일한 슬롯을 즉시 교환하여 슬롯을 교환 전 상태로 복원합니다.If any errors occur in the target slot (for example, the production slot) after a slot swap, restore the slots to their pre-swap states by swapping the same two slots immediately.

자동 전환 구성Configure auto swap

참고

자동 교환은 Linux의 웹 앱에서 지원 되지 않습니다.Auto swap isn't supported in web apps on Linux.

자동 교체는 앱을 실행 하는 동안 콜드 시작이 0이 고 가동 중지 시간이 0 인 앱을 지속적으로 배포 하려는 Azure DevOps 시나리오를 간소화 합니다.Auto swap streamlines Azure DevOps scenarios where you want to deploy your app continuously with zero cold starts and zero downtime for customers of the app. 자동 교환이 슬롯에서 프로덕션으로 사용 하도록 설정 된 경우 코드 변경 내용을 해당 슬롯에 푸시할 때마다 준비이 소스 슬롯에서 된 후 자동으로 앱을 프로덕션으로 교체 App Service.When auto swap is enabled from a slot into production, every time you push your code changes to that slot, App Service automatically swaps the app into production after it's warmed up in the source slot.

참고

프로덕션 슬롯에 대 한 자동 교환을 구성 하기 전에 비프로덕션 대상 슬롯에서 자동 교환 테스트를 고려 합니다.Before you configure auto swap for the production slot, consider testing auto swap on a non-production target slot.

자동 교환을 구성 하려면:To configure auto swap:

  1. 앱의 리소스 페이지로 이동 합니다.Go to your app's resource page. 배포 슬롯 > <desired source slot> > 구성 > 일반 설정을 선택 합니다.Select Deployment slots > <desired source slot> > Configuration > General settings.

  2. 자동 교환 사용에서 켜기를 선택 합니다.For Auto swap enabled, select On. 그런 다음 배포 슬롯 자동 교환에 필요한 대상 슬롯을 선택 하 고 명령 모음에서 저장 을 선택 합니다.Then select the desired target slot for Auto swap deployment slot, and select Save on the command bar.

    자동 교환 구성을 위한 선택 항목

  3. 소스 슬롯에 대해 코드 푸시를 실행합니다.Execute a code push to the source slot. 자동 교환은 짧은 시간 후에 발생 하며 업데이트는 대상 슬롯의 URL에 반영 됩니다.Auto swap happens after a short time, and the update is reflected at your target slot's URL.

문제가 있는 경우 교체 문제 해결을 참조 하세요.If you have any problems, see Troubleshoot swaps.

사용자 지정 준비 지정Specify custom warm-up

일부 앱의 경우 교환 전에 사용자 지정 준비 작업이 필요할 수 있습니다.Some apps might require custom warm-up actions before the swap. applicationInitializationweb.config의 구성 요소를 사용 하 여 사용자 지정 초기화 작업을 지정할 수 있습니다.The applicationInitialization configuration element in web.config lets you specify custom initialization actions. 교환 작업 은이 사용자 지정 준비가 완료 될 때까지 대기한 후 대상 슬롯과 교환 합니다.The swap operation waits for this custom warm-up to finish before swapping with the target slot. 샘플 web.config 조각은 다음과 같습니다.Here's a sample web.config fragment.

<system.webServer>
    <applicationInitialization>
        <add initializationPage="/" hostName="[app hostname]" />
        <add initializationPage="/Home/About" hostName="[app hostname]" />
    </applicationInitialization>
</system.webServer>

요소를 사용자 지정 하는 방법에 대 한 자세한 내용은 applicationInitialization 가장 일반적인 배포 슬롯 교환 실패 및 수정 방법을 참조 하세요.For more information on customizing the applicationInitialization element, see Most common deployment slot swap failures and how to fix them.

또한 다음 앱 설정중 하나 또는 둘 모두를 사용 하 여 준비 동작을 사용자 지정할 수 있습니다.You can also customize the warm-up behavior with one or both of the following app settings:

  • WEBSITE_SWAP_WARMUP_PING_PATH: 사이트를 준비 하기 위해 ping 할 경로입니다.WEBSITE_SWAP_WARMUP_PING_PATH: The path to ping to warm up your site. 슬래시로 시작하는 사용자 지정 경로를 값으로 지정하여 이 앱 설정을 추가합니다.Add this app setting by specifying a custom path that begins with a slash as the value. 예제는 /statuscheck입니다.An example is /statuscheck. 기본값은 /입니다.The default value is /.
  • WEBSITE_SWAP_WARMUP_PING_STATUSES: 준비 작업에 대 한 유효한 HTTP 응답 코드입니다.WEBSITE_SWAP_WARMUP_PING_STATUSES: Valid HTTP response codes for the warm-up operation. HTTP 코드의 쉼표로 구분된 목록을 사용하여 이 앱 설정을 추가합니다.Add this app setting with a comma-separated list of HTTP codes. 예를 들면 200,202 입니다.An example is 200,202 . 반환 된 상태 코드가 목록에 없으면 준비 및 교환 작업이 중지 됩니다.If the returned status code isn't in the list, the warmup and swap operations are stopped. 기본적으로 모든 응답 코드는 유효합니다.By default, all response codes are valid.

참고

<applicationInitialization>구성 요소는 각 앱 시작의 일부 이지만 두 개의 준비 동작 앱 설정은 슬롯 교환에만 적용 됩니다.The <applicationInitialization> configuration element is part of each app start-up, whereas the two warm-up behavior app settings apply only to slot swaps.

문제가 있는 경우 교체 문제 해결을 참조 하세요.If you have any problems, see Troubleshoot swaps.

교환 모니터링Monitor a swap

교환 작업 을 완료 하는 데 시간이 오래 걸리면 활동 로그에서 교환 작업에 대 한 정보를 가져올 수 있습니다.If the swap operation takes a long time to complete, you can get information on the swap operation in the activity log.

포털의 앱 리소스 페이지에 있는 왼쪽 창에서 활동 로그를 선택 합니다.On your app's resource page in the portal, in the left pane, select Activity log.

교환 작업은 Swap Web App Slots으로 로그 쿼리에 표시됩니다.A swap operation appears in the log query as Swap Web App Slots. 이를 확장하고 하위 작업 또는 오류 중 하나를 선택하여 세부 정보를 볼 수 있습니다.You can expand it and select one of the suboperations or errors to see the details.

트래픽 라우팅Route traffic

기본적으로 앱의 프로덕션 URL에 대한 모든 클라이언트 요청(http://<app_name>.azurewebsites.net)은 프로덕션 슬롯으로 라우팅됩니다.By default, all client requests to the app's production URL (http://<app_name>.azurewebsites.net) are routed to the production slot. 트래픽의 일부를 다른 슬롯으로 라우팅할 수 있습니다.You can route a portion of the traffic to another slot. 이 기능은 새 업데이트에 대한 사용자 피드백이 필요하지만 프로덕션 환경으로 릴리스할 준비가 되지 않은 경우에 유용합니다.This feature is useful if you need user feedback for a new update, but you're not ready to release it to production.

자동으로 프로덕션 트래픽 라우팅Route production traffic automatically

프로덕션 트래픽을 자동으로 라우팅하려면:To route production traffic automatically:

  1. 앱의 리소스 페이지로 이동 하 고 배포 슬롯을 선택 합니다.Go to your app's resource page and select Deployment slots.

  2. 라우팅하려는 슬롯의 트래픽 % 열에서 라우팅할 트래픽의 총량을 나타내는 백분율(0~100)을 지정합니다.In the Traffic % column of the slot you want to route to, specify a percentage (between 0 and 100) to represent the amount of total traffic you want to route. 저장을 선택합니다.Select Save.

    트래픽 비율 설정

설정이 저장 된 후 지정 된 클라이언트 비율 (%)은 비프로덕션 슬롯으로 임의로 라우팅됩니다.After the setting is saved, the specified percentage of clients is randomly routed to the non-production slot.

클라이언트는 특정 슬롯에 자동으로 라우팅되고 나면 해당 클라이언트 세션의 수명 동안 해당 슬롯에 "고정" 됩니다.After a client is automatically routed to a specific slot, it's "pinned" to that slot for the life of that client session. 클라이언트 브라우저에서 HTTP 헤더의 x-ms-routing-name 쿠키를 확인하여 세션이 고정된 슬롯을 볼 수 있습니다.On the client browser, you can see which slot your session is pinned to by looking at the x-ms-routing-name cookie in your HTTP headers. "스테이징" 슬롯에 라우팅되는 요청에는 쿠키 x-ms-routing-name=staging이 있습니다.A request that's routed to the "staging" slot has the cookie x-ms-routing-name=staging. 프로덕션 슬롯으로 라우팅되는 요청에는 쿠키 x-ms-routing-name=self가 있습니다.A request that's routed to the production slot has the cookie x-ms-routing-name=self.

참고

Azure Portal 옆에 az webapp traffic-routing set Azure CLI의 명령을 사용 하 여 DevOps 파이프라인이 나 기타 자동화 시스템과 같은 CI/CD 도구에서 라우팅 비율을 설정할 수도 있습니다.Next to the Azure portal, you can also use the az webapp traffic-routing set command in the Azure CLI to set the routing percentages from CI/CD tools like DevOps pipelines or other automation systems.

수동으로 프로덕션 트래픽 라우팅Route production traffic manually

자동 트래픽 라우팅 외에도 App Service는 특정 슬롯에 요청을 라우팅할 수 있습니다.In addition to automatic traffic routing, App Service can route requests to a specific slot. 사용자가 베타 앱에 참여 하거나 옵트인 (opt out) 할 수 있도록 하려는 경우에 유용 합니다.This is useful when you want your users to be able to opt in to or opt out of your beta app. 수동으로 프로덕션 트래픽을 라우팅하려면 x-ms-routing-name 쿼리 매개 변수를 사용합니다.To route production traffic manually, you use the x-ms-routing-name query parameter.

예를 들어 사용자가 베타 앱을 옵트아웃 (opt out) 할 수 있도록 웹 페이지에 다음 링크를 넣을 수 있습니다.To let users opt out of your beta app, for example, you can put this link on your webpage:

<a href="<webappname>.azurewebsites.net/?x-ms-routing-name=self">Go back to production app</a>

문자열 x-ms-routing-name=self 는 프로덕션 슬롯을 지정합니다.The string x-ms-routing-name=self specifies the production slot. 클라이언트 브라우저는 링크에 액세스 한 후 프로덕션 슬롯으로 리디렉션됩니다.After the client browser accesses the link, it's redirected to the production slot. 모든 후속 요청에는 x-ms-routing-name=self 프로덕션 슬롯에 세션을 고정 하는 쿠키가 있습니다.Every subsequent request has the x-ms-routing-name=self cookie that pins the session to the production slot.

사용자가 베타 앱에 옵트인 (opt in) 할 수 있도록 하려면 비프로덕션 슬롯의 이름에 동일한 쿼리 매개 변수를 설정 합니다.To let users opt in to your beta app, set the same query parameter to the name of the non-production slot. 예를 들면 다음과 같습니다.Here's an example:

<webappname>.azurewebsites.net/?x-ms-routing-name=staging

기본적으로 새 슬롯에는 회색으로 표시 된의 라우팅 규칙이 제공 됩니다 0% .By default, new slots are given a routing rule of 0%, shown in grey. 이 값을 명시적으로 0% (검정 텍스트로 표시)로 설정 하면 사용자가 x-ms-routing-name 쿼리 매개 변수를 사용 하 여 스테이징 슬롯에 수동으로 액세스할 수 있습니다.When you explicitly set this value to 0% (shown in black text), your users can access the staging slot manually by using the x-ms-routing-name query parameter. 그러나 라우팅 백분율이 0으로 설정 되어 있으므로 자동으로 슬롯에 라우팅되지 않습니다.But they won't be routed to the slot automatically because the routing percentage is set to 0. 이는 내부 팀에서 슬롯에 대 한 변경 내용을 테스트할 수 있도록 하는 동시에 공용에서 스테이징 슬롯을 "숨길" 수 있는 고급 시나리오입니다.This is an advanced scenario where you can "hide" your staging slot from the public while allowing internal teams to test changes on the slot.

슬롯 삭제Delete a slot

앱을 검색 하 고 선택 합니다.Search for and select your app. 배포 슬롯 > <slot to delete> > 개요를 선택 합니다.Select Deployment slots > <slot to delete> > Overview. 앱 유형은 배포 슬롯을 보고 있음을 알리기 위해 App Service (슬롯) 로 표시 됩니다.The app type is shown as App Service (Slot) to remind you that you're viewing a deployment slot. 명령 모음에서 삭제 를 선택 합니다.Select Delete on the command bar.

배포 슬롯 삭제

PowerShell을 사용하여 자동화Automate with PowerShell

참고

이 문서는 새 Azure PowerShell Az 모듈을 사용하도록 업데이트되었습니다.This article has been updated to use the new Azure PowerShell Az module. AzureRM 모듈은 적어도 2020년 12월까지 버그 수정을 수신할 예정이므로 계속 사용하셔도 됩니다.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. 새 Az 모듈 및 AzureRM 호환성에 대한 자세한 내용은 새 Azure PowerShell Az 모듈 소개를 참조하세요.To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Az 모듈 설치 지침은 Azure PowerShell 설치를 참조하세요.For Az module installation instructions, see Install Azure PowerShell.

Azure PowerShell은 Windows PowerShell을 통해 Azure를 관리하기 위한 cmdlet을 제공하는 모듈로, Azure App Service에서 배포 슬롯을 관리하는 기능도 지원합니다.Azure PowerShell is a module that provides cmdlets to manage Azure through Windows PowerShell, including support for managing deployment slots in Azure App Service.

Azure PowerShell을 설치 및 구성하는 방법과 Azure 구독에 Azure PowerShell을 인증하는 방법에 대한 자세한 내용은 Microsoft Azure PowerShell 설치 및 구성 방법을 참조하세요.For information on installing and configuring Azure PowerShell, and on authenticating Azure PowerShell with your Azure subscription, see How to install and configure Microsoft Azure PowerShell.


웹앱 만들기Create a web app

New-AzWebApp -ResourceGroupName [resource group name] -Name [app name] -Location [location] -AppServicePlan [app service plan name]

슬롯 만들기Create a slot

New-AzWebAppSlot -ResourceGroupName [resource group name] -Name [app name] -Slot [deployment slot name] -AppServicePlan [app service plan name]

Preview (다단계 교환)를 사용 하 여 교환 시작 및 대상 슬롯 구성을 원본 슬롯에 적용Initiate a swap with a preview (multi-phase swap), and apply destination slot configuration to the source slot

$ParametersObject = @{targetSlot  = "[slot name – e.g. "production"]"}
Invoke-AzResourceAction -ResourceGroupName [resource group name] -ResourceType Microsoft.Web/sites/slots -ResourceName [app name]/[slot name] -Action applySlotConfig -Parameters $ParametersObject -ApiVersion 2015-07-01

보류 중인 교환 (검토와 교환)을 취소 하 고 원본 슬롯 구성을 복원 합니다.Cancel a pending swap (swap with review) and restore the source slot configuration

Invoke-AzResourceAction -ResourceGroupName [resource group name] -ResourceType Microsoft.Web/sites/slots -ResourceName [app name]/[slot name] -Action resetSlotConfig -ApiVersion 2015-07-01

배포 슬롯 교환Swap deployment slots

$ParametersObject = @{targetSlot  = "[slot name – e.g. "production"]"}
Invoke-AzResourceAction -ResourceGroupName [resource group name] -ResourceType Microsoft.Web/sites/slots -ResourceName [app name]/[slot name] -Action slotsswap -Parameters $ParametersObject -ApiVersion 2015-07-01

활동 로그에서 교환 이벤트 모니터링Monitor swap events in the activity log

Get-AzLog -ResourceGroup [resource group name] -StartTime 2018-03-07 -Caller SlotSwapJobProcessor  

슬롯 삭제Delete a slot

Remove-AzResource -ResourceGroupName [resource group name] -ResourceType Microsoft.Web/sites/slots –Name [app name]/[slot name] -ApiVersion 2015-07-01

리소스 관리자 템플릿으로 자동화Automate with Resource Manager templates

Azure Resource Manager 템플릿은 Azure 리소스의 배포 및 구성을 자동화 하는 데 사용 되는 선언적 JSON 파일입니다.Azure Resource Manager templates are declarative JSON files used to automate the deployment and configuration of Azure resources. 리소스 관리자 템플릿을 사용 하 여 슬롯을 교환 하려면 Microsoft 웹/사이트/슬롯microsoft 웹/사이트 리소스에서 두 개의 속성을 설정 합니다.To swap slots by using Resource Manager templates, you will set two properties on the Microsoft.Web/sites/slots and Microsoft.Web/sites resources:

  • buildVersion: 슬롯에 배포 된 앱의 현재 버전을 나타내는 문자열 속성입니다.buildVersion: this is a string property which represents the current version of the app deployed in the slot. 예를 들면 "v1", "1.0.0.1" 또는 "2019-09-20T11:53:25.2887393-07:00"입니다.For example: "v1", "1.0.0.1", or "2019-09-20T11:53:25.2887393-07:00".
  • targetBuildVersion: 슬롯에 포함 해야 하는 항목을 지정 하는 문자열 속성입니다 buildVersion .targetBuildVersion: this is a string property that specifies what buildVersion the slot should have. TargetBuildVersion가 현재와 같지 않으면 지정 된 buildVersion 이 있는 슬롯을 검색 하 여 교환 작업을 트리거합니다 buildVersion .If the targetBuildVersion does not equal the current buildVersion, then this will trigger the swap operation by finding the slot which has the specified buildVersion.

리소스 관리자 템플릿 예제Example Resource Manager template

다음 리소스 관리자 템플릿은 buildVersion 스테이징 슬롯의을 업데이트 하 고 targetBuildVersion 프로덕션 슬롯에서을 설정 합니다.The following Resource Manager template will update the buildVersion of the staging slot and set the targetBuildVersion on the production slot. 그러면 두 슬롯이 교환 됩니다.This will swap the two slots. 템플릿은 "준비" 라는 슬롯을 사용 하 여 만든 webapp 이미 있다고 가정 합니다.The template assumes you already have a webapp created with a slot named "staging".

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "my_site_name": {
            "defaultValue": "SwapAPIDemo",
            "type": "String"
        },
        "sites_buildVersion": {
            "defaultValue": "v1",
            "type": "String"
        }
    },
    "resources": [
        {
            "type": "Microsoft.Web/sites/slots",
            "apiVersion": "2018-02-01",
            "name": "[concat(parameters('my_site_name'), '/staging')]",
            "location": "East US",
            "kind": "app",
            "properties": {
                "buildVersion": "[parameters('sites_buildVersion')]"
            }
        },
        {
            "type": "Microsoft.Web/sites",
            "apiVersion": "2018-02-01",
            "name": "[parameters('my_site_name')]",
            "location": "East US",
            "kind": "app",
            "dependsOn": [
                "[resourceId('Microsoft.Web/sites/slots', parameters('my_site_name'), 'staging')]"
            ],
            "properties": {
                "targetBuildVersion": "[parameters('sites_buildVersion')]"
            }
        }        
    ]
}

이 리소스 관리자 템플릿은 idempotent 됩니다. 즉, 반복적으로 실행 하 여 슬롯의 동일한 상태를 생성할 수 있습니다.This Resource Manager template is idempotent, meaning that it can be executed repeatedly and produce the same state of the slots. 첫 번째 실행 후는 targetBuildVersion 현재와 일치 buildVersion 하므로 교환이 트리거되지 않습니다.After the first execution, targetBuildVersion will match the current buildVersion, so a swap will not be triggered.

CLI를 사용 하 여 자동화Automate with the CLI

배포 슬롯에 대한 Azure CLI 명령은 az webapp deployment slot을 참조하세요.For Azure CLI commands for deployment slots, see az webapp deployment slot.

교체 문제 해결Troubleshoot swaps

슬롯 교환중에 오류가 발생 하면 D:\home\LogFiles\eventlog.xml에 기록 됩니다.If any error occurs during a slot swap, it's logged in D:\home\LogFiles\eventlog.xml. 응용 프로그램 관련 오류 로그에도 기록 됩니다.It's also logged in the application-specific error log.

몇 가지 일반적인 교환 오류는 다음과 같습니다.Here are some common swap errors:

  • 응용 프로그램 루트에 대 한 HTTP 요청 시간이 초과 되었습니다.An HTTP request to the application root is timed. 교환 작업은 각 HTTP 요청에 대해 90 초 동안 대기한 후 최대 5 번 다시 시도 합니다.The swap operation waits for 90 seconds for each HTTP request, and retries up to 5 times. 모든 다시 시도 시간이 초과 되 면 교환 작업이 중지 됩니다.If all retries are timed out, the swap operation is stopped.

  • 앱 콘텐츠가 로컬 캐시에 지정 된 로컬 디스크 할당량을 초과 하면 로컬 캐시 초기화가 실패할 수 있습니다.Local cache initialization might fail when the app content exceeds the local disk quota specified for the local cache. 자세한 내용은 로컬 캐시 개요를 참조 하세요.For more information, see Local cache overview.

  • 사용자 지정 준비과정에서 HTTP 요청은 외부 URL을 거치지 않고 내부적으로 수행 됩니다.During custom warm-up, the HTTP requests are made internally (without going through the external URL). Web.config에서 특정 URL 재작성 규칙을 사용 하 여 실패할 수 있습니다. 예를 들어 도메인 이름을 리디렉션하는 규칙이 나 HTTPS를 적용 하면 준비 요청이 앱 코드에 도달 하지 못할 수 있습니다.They can fail with certain URL rewrite rules in Web.config. For example, rules for redirecting domain names or enforcing HTTPS can prevent warm-up requests from reaching the app code. 이 문제를 해결 하려면 다음 두 가지 조건을 추가 하 여 재작성 규칙을 수정 합니다.To work around this issue, modify your rewrite rules by adding the following two conditions:

    <conditions>
      <add input="{WARMUP_REQUEST}" pattern="1" negate="true" />
      <add input="{REMOTE_ADDR}" pattern="^100?\." negate="true" />
      ...
    </conditions>
    
  • 사용자 지정 준비를 사용 하지 않으면 URL 재작성 규칙은 여전히 HTTP 요청을 차단할 수 있습니다.Without a custom warm-up, the URL rewrite rules can still block HTTP requests. 이 문제를 해결 하려면 다음 조건을 추가 하 여 재작성 규칙을 수정 합니다.To work around this issue, modify your rewrite rules by adding the following condition:

    <conditions>
      <add input="{REMOTE_ADDR}" pattern="^100?\." negate="true" />
      ...
    </conditions>
    
  • 슬롯 교체 후에는 앱에서 예기치 않은 다시 시작이 발생할 수 있습니다.After slot swaps, the app may experience unexpected restarts. 이는 교환 후 호스트 이름 바인딩 구성이 동기화 되지 않아 자체적으로 다시 시작 되지 않기 때문입니다.This is because after a swap, the hostname binding configuration goes out of sync, which by itself doesn't cause restarts. 그러나 특정 기본 저장소 이벤트 (예: 저장소 볼륨 장애 조치 (failover))는 이러한 불일치를 감지 하 여 모든 작업자 프로세스를 강제로 다시 시작할 수 있습니다.However, certain underlying storage events (such as storage volume failovers) may detect these discrepancies and force all worker processes to restart. 이러한 유형의 다시 시작을 최소화 하려면 모든 슬롯에서 WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG=1 앱 설정을 설정 합니다.To minimize these types of restarts, set the WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG=1 app setting on all slots. 그러나이 앱 설정은 WCF (Windows Communication Foundation) 앱에서 작동 하지 않습니다.However, this app setting does not work with Windows Communication Foundation (WCF) apps.

다음 단계Next steps

비프로덕션 슬롯에 대한 액세스 차단Block access to non-production slots