Configuración de entornos de ensayo en Azure App ServiceSet up staging environments in Azure App Service

Al implementar la aplicación web, la aplicación web en Linux, el back-end móvil o la aplicación API en Azure App Service, puede implementarlas en una ranura de implementación independiente en lugar de en la ranura de producción predeterminada si realiza la ejecución en el nivel de plan Estándar, Premium o Aislado de 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. Las ranuras de implementación son aplicaciones activas con sus propios nombres de host.Deployment slots are live apps with their own host names. Los elementos de contenido y configuraciones de aplicaciones se pueden intercambiar entre dos ranuras de implementación, incluida la ranura de producción.App content and configurations elements can be swapped between two deployment slots, including the production slot.

La implementación de la aplicación en un espacio que no sea de producción ofrece las siguientes ventajas:Deploying your application to a non-production slot has the following benefits:

  • Puede validar los cambios en la aplicación en una ranura de implementación de ensayo antes de intercambiarla con la ranura de producción.You can validate app changes in a staging deployment slot before swapping it with the production slot.
  • La implementación de una aplicación en un espacio y su posterior paso a producción garantiza que todas las instancias del espacio están preparadas antes de dicho paso a producción.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. Esto elimina tiempos de inactividad a la hora de implementar la aplicación.This eliminates downtime when you deploy your app. El redireccionamiento del tráfico es perfecta y no se pierde ninguna solicitud en las operaciones de intercambio.The traffic redirection is seamless, and no requests are dropped because of swap operations. Todo este flujo de trabajo se puede automatizar mediante la configuración del intercambio automático cuando no sea necesario realizar ninguna validación antes del intercambio.You can automate this entire workflow by configuring auto swap when pre-swap validation isn't needed.
  • Después del intercambio, la ranura con la aplicación de ensayo anterior ahora ocupa la aplicación de producción anterior.After a swap, the slot with previously staged app now has the previous production app. Si las modificaciones que se han intercambiado en el espacio de producción no son los que esperaba, puede volver a realizar un intercambio inmediatamente para tener el "último sitio que sabe que funciona correctamente".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.

Cada nivel del plan de App Service admite un número distinto de ranuras de implementación.Each App Service plan tier supports a different number of deployment slots. El uso de las ranuras de implementación no tiene costo adicional.There's no additional charge for using deployment slots. Para averiguar el número de ranuras que admite el nivel de la aplicación, consulte Límites de App Service.To find out the number of slots your app's tier supports, see App Service limits.

Para escalar la aplicación a un nivel diferente, asegúrese de que el nivel de destino admite el número de ranuras que la aplicación ya usa.To scale your app to a different tier, make sure that the target tier supports the number of slots your app already uses. Por ejemplo, si la aplicación tiene más de cinco, no se puede reducir verticalmente al nivel Estándar, ya que este nivel solo admite cinco ranuras de implementación.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.

Incorporación de una ranuraAdd a slot

Para poder habilitar varias espacios de implementación, la aplicación debe ejecutarse en los niveles Estándar, Premium o Aislado.The app must be running in the Standard, Premium, or Isolated tier in order for you to enable multiple deployment slots.

  1. En Azure Portal, abra la página de recursos de la aplicación.In the Azure portal, open your app's resource page.

  2. En el panel izquierdo, seleccione Ranuras de implementación > Agregar ranura.In the left pane, select Deployment slots > Add Slot.

    Agregar una nueva ranura de implementación

    Nota

    Si la aplicación no está aún en los niveles Estándar, Premium o Aislado, recibirá un mensaje que indica los niveles compatibles para habilitar la publicación almacenada provisionalmente.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. Llegados a este punto, tiene la opción de seleccionar Actualizar e ir a la pestaña Escala de la aplicación antes de continuar.At this point, you have the option to select Upgrade and go to the Scale tab of your app before continuing.

  3. En el cuadro de diálogo Agregar ranura, asígnele un nombre a la ranura y seleccione si desea que la configuración de la aplicación se clone de otra ranura de implementación.In the Add a slot dialog box, give the slot a name, and select whether to clone an app configuration from another deployment slot. Haga clic en Agregar para continuar.Select Add to continue.

    Origen de la configuración

    La configuración se puede clonar de una ranura existente.You can clone a configuration from any existing slot. La configuración que se puede clonar incluye los valores de la aplicación, las cadenas de conexión, versiones del marco del lenguaje, los sockets web, la versión de HTTP y el valor de bits de la plataforma.Settings that can be cloned include app settings, connection strings, language framework versions, web sockets, HTTP version, and platform bitness.

  4. Tras agregar la ranura, seleccione Cerrar para cerrar el cuadro de diálogo.After the slot is added, select Close to close the dialog box. La nueva ranura se muestra en la página Ranuras de implementación.The new slot is now shown on the Deployment slots page. De forma predeterminada, en la nueva ranura el valor de Tráfico % es 0 y todo el tráfico de los clientes se enruta a la ranura de producción.By default, Traffic % is set to 0 for the new slot, with all customer traffic routed to the production slot.

  5. Seleccione la nueva ranura de implementación para abrir su página de recursos.Select the new deployment slot to open that slot's resource page.

    Título de la ranura de implementación

    Como las restantes aplicaciones de App Service, el espacio de ensayo tiene una página de administración.The staging slot has a management page just like any other App Service app. La configuración del espacio se puede cambiar.You can change the slot's configuration. El nombre del espacio se muestra en la parte superior de la página para recordarle que está viendo el espacio de implementación.The name of the slot is shown at the top of the page to remind you that you're viewing the deployment slot.

  6. Seleccione la dirección URL de la aplicación en la página de recursos de la ranura.Select the app URL on the slot's resource page. La ranura de implementación tiene su propio nombre de host y es también una aplicación activa.The deployment slot has its own host name and is also a live app. Para limitar el acceso público a la ranura de implementación, consulte el artículo sobre Restricciones de IP de Azure App Service.To limit public access to the deployment slot, see Azure App Service IP restrictions.

El nuevo espacio de implementación no tiene contenido, aunque se clone la configuración de otro espacio.The new deployment slot has no content, even if you clone the settings from a different slot. Por ejemplo, puede publicar en esta ranura mediante Git.For example, you can publish to this slot with Git. La implementación en el espacio se puede realizar desde otra rama del repositorio o desde otro repositorio.You can deploy to the slot from a different repository branch or a different repository.

Qué ocurre durante un intercambioWhat happens during a swap

Pasos del intercambioSwap operation steps

Al intercambiar dos ranuras (normalmente de una ranura de ensayo a la ranura de producción), App Service hace lo siguiente para asegurarse de que la ranura de destino no experimente tiempo de inactividad: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. Aplique las siguientes opciones de configuración de la ranura de destino (por ejemplo, la de producción) a todas las instancias de la ranura de origen:Apply the following settings from the target slot (for example, the production slot) to all instances of the source slot:

    Cualquiera de estos casos desencadena el reinicio de todas las instancias de la ranura de origen.Any of these cases trigger all instances in the source slot to restart. Durante el intercambio con vista previa, esta marca el final de la primera fase.During swap with preview, this marks the end of the first phase. La operación de intercambio se pausará y podrá validar que la ranura de origen funciona correctamente con la configuración de la ranura de destino.The swap operation is paused, and you can validate that the source slot works correctly with the target slot's settings.

  2. Espere a que todas las instancias de la ranura de origen se hayan reiniciado.Wait for every instance in the source slot to complete its restart. Si el reinicio no se puede realizar en alguna instancia, el intercambio revierte todos los cambios en la ranura de origen y detiene la operación.If any instance fails to restart, the swap operation reverts all changes to the source slot and stops the operation.

  3. Si la caché local está habilitada, desencadene la inicialización de la caché local mediante una solicitud HTTP a la raíz de la aplicación ("/") en cada instancia de la ranura de origen.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. Espere a que todas las instancias devuelvan cualquier respuesta HTTP.Wait until each instance returns any HTTP response. La inicialización de la caché local produce otro reinicio en cada instancia.Local cache initialization causes another restart on each instance.

  4. Si el intercambio automático está habilitado con preparación personalizada, desencadene la inicialización de la aplicación mediante una solicitud HTTP a la raíz de la aplicación ("/") en cada instancia de la ranura de origen.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.

    Si applicationInitialization no se especifica, desencadene una solicitud HTTP a la raíz de la aplicación de la ranura de origen en cada instancia.If applicationInitialization isn't specified, trigger an HTTP request to the application root of the source slot on each instance.

    Si una instancia devuelve cualquier respuesta HTTP, se considera que se ha preparado.If an instance returns any HTTP response, it's considered to be warmed up.

  5. Si todas las instancias de la ranura de origen se han preparado correctamente, intercambie las dos ranuras; para ello, cambie las reglas de enrutamiento de las dos ranuras.If all instances on the source slot are warmed up successfully, swap the two slots by switching the routing rules for the two slots. Después de este paso, la ranura de destino (por ejemplo, la de producción) tendrá la aplicación que se preparó previamente en la ranura de origen.After this step, the target slot (for example, the production slot) has the app that's previously warmed up in the source slot.

  6. Ahora que la ranura de origen tiene la aplicación que se preparó previamente antes del intercambio, realice la misma operación; aplique la configuración y reinicie las instancias.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.

Durante intercambio, todo el trabajo de inicialización de las aplicaciones intercambiadas se realiza en la ranura de origen.At any point of the swap operation, all work of initializing the swapped apps happens on the source slot. La ranura de destino permanece en línea mientras la de origen se está preparando, independientemente de en qué punto el intercambio se realice o no correctamente.The target slot remains online while the source slot is being prepared and warmed up, regardless of where the swap succeeds or fails. Para intercambiar una ranura de ensayo con la de producción, asegúrese de que esta última es siempre la de destino.To swap a staging slot with the production slot, make sure that the production slot is always the target slot. De este modo, el intercambio no afecta a la aplicación de producción.This way, the swap operation doesn't affect your production app.

¿Qué configuración se intercambia?Which settings are swapped?

Cuando crea un clon de la configuración de otro espacio de implementación, la configuración clonada se puede editar.When you clone configuration from another deployment slot, the cloned configuration is editable. Algunos elementos de configuración siguen al contenido en los intercambios (no son específicos de la ranura), mientras que otros permanecen en la misma ranura después de este (específicos).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). Las listas siguientes muestran la configuración que cambia cuando se intercambian las ranuras.The following lists show the settings that change when you swap slots.

Configuraciones que se intercambian:Settings that are swapped:

  • Configuración general: por ejemplo, versión de Framework, 32 o 64 bits, Web SocketsGeneral settings, such as framework version, 32/64-bit, web sockets
  • Configuración de la aplicación (puede configurarse para ajustarse a un espacio)App settings (can be configured to stick to a slot)
  • Cadenas de conexión (puede configurarse para ajustarse a un espacio)Connection strings (can be configured to stick to a slot)
  • Asignaciones de controladorHandler mappings
  • Certificados públicosPublic certificates
  • Contenido de WebJobsWebJobs content
  • Conexiones híbridas *Hybrid connections *
  • Integración de la red virtual *Virtual network integration *
  • Puntos de conexión de servicio *Service endpoints *
  • Azure Content Delivery Network *Azure Content Delivery Network *

Se prevé que las características marcadas con un asterisco (*) no se intercambien.Features marked with an asterisk (*) are planned to be unswapped.

Valores que no se intercambian:Settings that aren't swapped:

  • Extremos de publicaciónPublishing endpoints
  • Nombres de dominio personalizadosCustom domain names
  • Certificados no públicos y configuración de TLS/SSLNon-public certificates and TLS/SSL settings
  • Configuración de escalaScale settings
  • Programadores de WebJobsWebJobs schedulers
  • Restricciones de IPIP restrictions
  • Always OnAlways On
  • Configuración del registro de diagnósticoDiagnostic log settings
  • Uso compartido de recursos entre orígenes (CORS)Cross-origin resource sharing (CORS)

Nota

Algunas configuraciones de aplicaciones que se aplican a configuraciones no intercambiadas no se intercambian.Certain app settings that apply to unswapped settings are also not swapped. Por ejemplo, como la configuración del registro de diagnóstico no se intercambia, las configuraciones de aplicaciones relacionada, como WEBSITE_HTTPLOGGING_RETENTION_DAYS y DIAGNOSTICS_AZUREBLOBRETENTIONDAYS tampoco lo hacen, aunque no se muestren como valores de ranura.For example, since diagnostic log 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.

Para configurar la aplicación o una cadena de conexión de esta para que se ajuste a una ranura específica (sin intercambio), vaya a la página Configuración de esa ranura.To configure an app setting or connection string to stick to a specific slot (not swapped), go to the Configuration page for that slot. Agregue configuración o modifíquela y seleccione configuración de ranura de implementación.Add or edit a setting, and then select deployment slot setting. Al seleccionar esta casilla se indica a App Service que la configuración no se puede intercambiar.Selecting this check box tells App Service that the setting is not swappable.

Configuración de espacios

Intercambio de dos espaciosSwap two slots

Las ranuras de implementación se pueden intercambiar en las páginas Ranuras de implementación e Información general de la aplicación.You can swap deployment slots on your app's Deployment slots page and the Overview page. Para detalles técnicos sobre el intercambio de ranuras, consulte Qué ocurre durante un intercambio.For technical details on the slot swap, see What happens during swap.

Importante

Antes de intercambiar una aplicación de una ranura de implementación a producción, asegúrese de la de producción es la ranura de destino y de que todas las configuraciones de la ranura de origen son exactamente como las quiere en producción.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.

Para intercambiar ranuras de implementación:To swap deployment slots:

  1. Vaya a la página Ranuras de implementación y seleccione Intercambiar.Go to your app's Deployment slots page and select Swap.

    Botón Intercambiar

    El cuadro de diálogo Intercambiar muestra la configuración de la ranura de origen y de destino seleccionadas que se van a cambiar.The Swap dialog box shows settings in the selected source and target slots that will be changed.

  2. Seleccione los espacios Origen y Destino.Select the desired Source and Target slots. Por lo general, el destino suele ser el espacio de producción.Usually, the target is the production slot. Además, seleccione las pestañas Cambios de origen y Cambios de destino, y compruebe que los cambios en la configuración son los esperados.Also, select the Source Changes and Target Changes tabs and verify that the configuration changes are expected. En cuanto termine, puede intercambiar los espacios. Para ello solo debe seleccionar Intercambiar.When you're finished, you can swap the slots immediately by selecting Swap.

    Intercambio completo

    Para ver cómo funcionaría la ranura de destino con la nueva configuración antes de que se realice el intercambio, no seleccione Intercambiar, siga las instrucciones de Intercambio con vista previa.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. Cuando haya terminado, seleccione Cerrar para cerrar el cuadro de diálogo.When you're finished, close the dialog box by selecting Close.

Si tiene problemas, consulte Solución de problemas con los intercambios.If you have any problems, see Troubleshoot swaps.

Intercambio con vista previa (intercambio en varias fases)Swap with preview (multi-phase swap)

Antes de cambiar a producción como ranura de destino, valide que la aplicación se ejecute con la configuración intercambiada.Before you swap into production as the target slot, validate that the app runs with the swapped settings. La ranura de origen también se ha preparado antes de que finalice el intercambio, algo que es conveniente para las aplicaciones críticas.The source slot is also warmed up before the swap completion, which is desirable for mission-critical applications.

Al realizarse un intercambio con vista previa, App Service realiza el mismo intercambio, pero se detiene tras el primer paso.When you perform a swap with preview, App Service performs the same swap operation but pauses after the first step. En ese momento puede comprobar el resultado en la ranura de ensayo antes de completar el intercambio.You can then verify the result on the staging slot before completing the swap.

Si cancela el intercambio, App Service vuelve a aplicar los elementos de configuración en la ranura de origen.If you cancel the swap, App Service reapplies configuration elements to the source slot.

Para realizar el intercambio con vista previa:To swap with preview:

  1. Siga los pasos que se indican en Intercambio de ranuras de implementación, pero seleccione Realizar intercambio con versión preliminar .Follow the steps in Swap deployment slots but select Perform swap with preview.

    Intercambio con vista previa

    El cuadro de diálogo muestra cómo cambia la configuración de la ranura de origen en la fase 1 y cómo cambian tanto la ranura de origen como la de destino en la fase 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. Cuando esté listo para iniciar el intercambio, seleccione Iniciar intercambio.When you're ready to start the swap, select Start Swap.

    Cuando se complete la fase 1, se le notificará en el cuadro de diálogo.When phase 1 finishes, you're notified in the dialog box. Vaya a https://<app_name>-<source-slot-name>.azurewebsites.net para obtener una vista previa del intercambio en la ranura de origen.Preview the swap in the source slot by going to https://<app_name>-<source-slot-name>.azurewebsites.net.

  3. Cuando esté listo para completar el intercambio pendiente, seleccione Completar intercambio en Acción de intercambio y seleccioneCompletar intercambio.When you're ready to complete the pending swap, select Complete Swap in Swap action and select Complete Swap.

    Para cancelar un intercambio pendiente, seleccione Cancelar intercambio en su lugar.To cancel a pending swap, select Cancel Swap instead.

  4. Cuando haya terminado, seleccione Cerrar para cerrar el cuadro de diálogo.When you're finished, close the dialog box by selecting Close.

Si tiene problemas, consulte Solución de problemas con los intercambios.If you have any problems, see Troubleshoot swaps.

Para automatizar un intercambio en varias fases, consulte Automatización con Azure PowerShell.To automate a multi-phase swap, see Automate with PowerShell.

Reversión de intercambiosRoll back a swap

Si aparecen errores en el espacio de destino (por ejemplo, el espacio de producción) después de un intercambio de espacios, restaure los espacios al estado que tenían antes del intercambio. Para ello, vuelva a intercambiarlos de inmediato.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.

Configuración del intercambio automáticoConfigure auto swap

Nota

El intercambio automático no se admite en las aplicaciones web en Linux.Auto swap isn't supported in web apps on Linux.

El intercambio automático optimiza los escenarios de Azure DevOps en los que se desee implementar una aplicación continuamente sin arranques en frío ni tiempos de inactividad para los clientes de la aplicación.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. Cuando se habilita el intercambio automático para una ranura a producción, cada vez que se insertan los cambios de código en esa ranura, App Service cambia automáticamente la aplicación a producción después de que se haya preparado en la de origen.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.

Nota

Antes de configurar el intercambio automático en la ranura de producción, considere la posibilidad de probarlo en una ranura de destino distinta de la de producción.Before you configure auto swap for the production slot, consider testing auto swap on a non-production target slot.

Para configurar el intercambio automático:To configure auto swap:

  1. Vaya a la página de recursos de la aplicación.Go to your app's resource page. Seleccione Ranuras de implementación > <ranura de origen deseada> > Configuración > Configuración general.Select Deployment slots > <desired source slot> > Configuration > General settings.

  2. Para Intercambio automático habilitado, seleccione Activado.For Auto swap enabled, select On. A continuación, seleccione la ranura de destino deseada como Ranura de implementación de intercambio automático y seleccione Guardar en la barra de comandos.Then select the desired target slot for Auto swap deployment slot, and select Save on the command bar.

    Selecciones para configurar el intercambio automático

  3. Ejecute una inserción de código en el espacio de origen.Execute a code push to the source slot. El intercambio automático se realiza al poco tiempo y la actualización se refleja en la dirección URL de la ranura de destino.Auto swap happens after a short time, and the update is reflected at your target slot's URL.

Si tiene problemas, consulte Solución de problemas con los intercambios.If you have any problems, see Troubleshoot swaps.

Especificación de Preparación personalizadaSpecify custom warm-up

Algunas aplicaciones pueden requerir acciones de preparación personalizadas para el intercambio.Some apps might require custom warm-up actions before the swap. El elemento de configuración applicationInitialization de web.config permite especificar acciones de inicialización personalizadas.The applicationInitialization configuration element in web.config lets you specify custom initialization actions. El intercambio espera hasta que se completa esta preparación personalizada para realizar el intercambio con la ranura de destino.The swap operation waits for this custom warm-up to finish before swapping with the target slot. He aquí un fragmento de ejemplo del archivo 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>

Para más información sobre la personalización del elemento applicationInitialization, consulte Most common deployment slot swap failures and how to fix them (Errores de intercambio de ranuras de implementación más comunes y soluciones).For more information on customizing the applicationInitialization element, see Most common deployment slot swap failures and how to fix them.

También puede personalizar el comportamiento de la preparación con una o ambas de las siguientes opciones de configuración de la aplicación:You can also customize the warm-up behavior with one or both of the following app settings:

  • WEBSITE_SWAP_WARMUP_PING_PATH: ruta de acceso para hacer ping y así preparar el sitio.WEBSITE_SWAP_WARMUP_PING_PATH: The path to ping to warm up your site. Agregue esta configuración de aplicación especificando una ruta de acceso personalizada que comience con una barra diagonal como valor.Add this app setting by specifying a custom path that begins with a slash as the value. Un ejemplo es /statuscheck.An example is /statuscheck. El valor predeterminado es /.The default value is /.
  • WEBSITE_SWAP_WARMUP_PING_STATUSES: códigos de respuesta HTTP válidos para la operación de preparación.WEBSITE_SWAP_WARMUP_PING_STATUSES: Valid HTTP response codes for the warm-up operation. Agregue esta configuración de aplicación con una lista de códigos HTTP separados por comas.Add this app setting with a comma-separated list of HTTP codes. Un ejemplo sería 200,202.An example is 200,202 . Si el código de estado devuelto no está en la lista, las operaciones de preparación e intercambio se detienen.If the returned status code isn't in the list, the warmup and swap operations are stopped. Por defecto, todos los códigos de respuesta son válidos.By default, all response codes are valid.

Nota

<applicationInitialization> es parte del inicio de cada aplicación, donde estas dos configuraciones de aplicación solo van dirigidas a los intercambios de ranura.<applicationInitialization> is part each app start-up, where as these two app settings apply only to slot swaps.

Si tiene problemas, consulte Solución de problemas con los intercambios.If you have any problems, see Troubleshoot swaps.

Supervisión de un intercambioMonitor a swap

Si el intercambio tarda mucho tiempo en completarse, puede obtener información sobre su estado en el registro de actividad.If the swap operation takes a long time to complete, you can get information on the swap operation in the activity log.

En la página de recursos de la aplicación del portal, en el panel izquierdo, seleccione Registro de actividad.On your app's resource page in the portal, in the left pane, select Activity log.

Una operación de intercambio aparece en la consulta de registro como Swap Web App Slots.A swap operation appears in the log query as Swap Web App Slots. Puede expandirla y seleccionar una de los suboperaciones o errores para ver los detalles.You can expand it and select one of the suboperations or errors to see the details.

Enrutamiento del tráficoRoute traffic

De forma predeterminada, todas las solicitudes que realiza el cliente a la dirección URL de producción de la aplicación (http://<app_name>.azurewebsites.net) se enrutan al espacio de producción.By default, all client requests to the app's production URL (http://<app_name>.azurewebsites.net) are routed to the production slot. Una parte del tráfico se puede enrutar a otro espacio.You can route a portion of the traffic to another slot. Esta característica es útil si se necesitan los comentarios de los usuarios al respecto de una nueva actualización, pero dicha actualización aún no está lista para enviarla a producción.This feature is useful if you need user feedback for a new update, but you're not ready to release it to production.

Enrutamiento automático del tráfico de producciónRoute production traffic automatically

Para enrutar automáticamente el tráfico de producción:To route production traffic automatically:

  1. Vaya a la página de recursos de la aplicación y seleccione Ranuras de implementación.Go to your app's resource page and select Deployment slots.

  2. En la columna Tráfico % del espacio que se desea enrutar, especifique un porcentaje (entre 0 y 100) que represente la cantidad del tráfico total que desea enrutar.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. Seleccione Guardar.Select Save.

    Configuración de un porcentaje de tráfico

Una vez guardado el valor, el porcentaje especificado de clientes se enruta aleatoriamente a la ranura que no es de producción.After the setting is saved, the specified percentage of clients is randomly routed to the non-production slot.

Una vez enrutado un cliente automáticamente a una ranura concreta, permanece "anclado" en esa ranura todo el tiempo que dure su sesión.After a client is automatically routed to a specific slot, it's "pinned" to that slot for the life of that client session. En el explorador del cliente, para ver a qué espacio está anclada la sesión debe examinar la cookie x-ms-routing-name en los encabezados HTTP.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. Las solicitudes que se enrutan a al espacio "de ensayo" tienen la cookie x-ms-routing-name=staging.A request that's routed to the "staging" slot has the cookie x-ms-routing-name=staging. Las solicitudes que se enrutan al espacio de producción tienen la cookie x-ms-routing-name=self.A request that's routed to the production slot has the cookie x-ms-routing-name=self.

Enrutamiento manual del tráfico de producciónRoute production traffic manually

Además del enrutamiento automático del tráfico, App Service puede enrutar solicitudes a un espacio concreto.In addition to automatic traffic routing, App Service can route requests to a specific slot. Esto es útil cuando desee que los usuarios puedan escoger el enrutamiento a la aplicación beta, o la exclusión voluntaria de esta.This is useful when you want your users to be able to opt in to or opt out of your beta app. Para enrutar el tráfico de producción de manera manual se usa el parámetro de consulta x-ms-routing-name.To route production traffic manually, you use the x-ms-routing-name query parameter.

Para permitir que los usuarios opten por la exclusión del enrutamiento a la aplicación beta, por ejemplo, puede poner este vínculo en la página web: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>

La cadena x-ms-routing-name=self especifica la ranura de producción.The string x-ms-routing-name=self specifies the production slot. Cuando el explorador del cliente accede al vínculo, se le redirige a la ranura de producción.After the client browser accesses the link, it's redirected to the production slot. Cada solicitud posterior tiene la cookie x-ms-routing-name=self que ancla la sesión a la ranura de producción.Every subsequent request has the x-ms-routing-name=self cookie that pins the session to the production slot.

Para permitir a los usuarios participar en la aplicación de la versión beta, establezca el mismo parámetro de consulta con el nombre de la ranura que no es de producción.To let users opt in to your beta app, set the same query parameter to the name of the non-production slot. Este es un ejemplo:Here's an example:

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

De forma predeterminada, las ranuras nuevas tienen una regla de enrutamiento del 0%, en gris.By default, new slots are given a routing rule of 0%, shown in grey. Cuando se establece explícitamente este valor en 0% (en negro), los usuarios pueden acceder a la ranura de ensayo manualmente mediante el parámetro de consulta 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. Pero no se les enrutará automáticamente a la ranura, ya que el porcentaje se ha establecido en 0.But they won't be routed to the slot automatically because the routing percentage is set to 0. Se trata de un escenario avanzado donde puede "ocultar" su ranura de ensayo del público y permitir que los equipos internos prueben los cambios en la ranura al mismo tiempo.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.

Eliminación de una ranuraDelete a slot

Vaya a la página de recursos de la aplicación.Go to your app's resource page. Seleccione Ranuras de implementación > <ranura para eliminar> > Información general.Select Deployment slots > <slot to delete> > Overview. En la barra de comandos, seleccione Eliminar.Select Delete on the command bar.

Eliminación de una ranura de implementación

Automatización con PowerShellAutomate with PowerShell

Nota

Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Aún puede usar el módulo de AzureRM que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Para más información acerca del nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module (Presentación del nuevo módulo Az de Azure PowerShell).To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Para obtener instrucciones sobre la instalación del módulo Az, consulte Instalación de Azure PowerShell.For Az module installation instructions, see Install Azure PowerShell.

Azure PowerShell es un módulo que proporciona cmdlets para administrar Azure mediante Windows PowerShell, incluida la compatibilidad para administrar ranuras de implementación de 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.

Para obtener información acerca de cómo instalar y configurar Azure PowerShell y cómo autenticar Azure PowerShell con su suscripción de Azure, consulte Instalación y configuración de 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.


Creación de una aplicación webCreate a web app

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

Creación de una ranuraCreate a slot

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

Inicio de un intercambio con vista previa (intercambio en varias fases) y aplicación de configuración de la ranura de destino a la ranura de origenInitiate 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

Cancelación de un intercambio pendiente (intercambio con vista previa) y restauración de configuración de la ranura de origenCancel 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

Intercambio de ranuras de implementaciónSwap 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

Supervisión de los eventos de intercambio en el registro de actividadMonitor swap events in the activity log

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

Eliminación de una ranuraDelete a slot

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

Automatización con las plantillas de ARMAutomate with ARM templates

Las Plantillas ARM son archivos JSON declarativos que se usan para automatizar la implementación y la configuración de los recursos de Azure.ARM Templates are declarative JSON files used to automate the deployment and configuration of Azure resources. Para intercambiar ranuras mediante plantillas de ARM, establecerá dos propiedades en los recursos Microsoft.Web/sites/slots y Microsoft.Web/sites:To swap slots using ARM templates, you will set two properties on the Microsoft.Web/sites/slots and Microsoft.Web/sites resources:

  • buildVersion: esta es una propiedad de cadena que representa la versión actual de la aplicación implementada en la ranura.buildVersion: this is a string property which represents the current version of the app deployed in the slot. Por ejemplo: "v1", "1.0.0.1" o "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: esta es una propiedad de cadena que especifica qué buildVersion debe tener la ranura.targetBuildVersion: this is a string property that specifies what buildVersion the slot should have. Si targetBuildVersion no es igual a la buildVersion actual, esto activará la operación de intercambio al encontrar la ranura que tiene la buildVersion especificada.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.

Ejemplo de plantilla de ARMExample ARM Template

La siguiente plantilla de ARM actualizará el buildVersion de la ranura de preparación y establecerá el targetBuildVersion en la ranura de producción.The following ARM template will update the buildVersion of the staging slot and set the targetBuildVersion on the production slot. Esto intercambiará las dos ranuras.This will swap the two slots. La plantilla supone que ya tiene una aplicación web creada con una ranura llamada "almacenamiento provisional".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')]"
            }
        }        
    ]
}

Esta plantilla de ARM es idempotente, lo que significa que puede ejecutarse repetidamente y producir el mismo estado de las ranuras.This ARM template is idempotent, meaning that it can be executed repeatedly and produce the same state of the slots. Después de la primera ejecución, targetBuildVersion coincidirá con el buildVersion actual, por lo que no se activará un intercambio.After the first execution, targetBuildVersion will match the current buildVersion, so a swap will not be triggered.

Automatización con la CLIAutomate with the CLI

Para información sobre los comandos de la CLI de Azure que se usan con las ranuras de implementación, consulte az webapp deployment slot.For Azure CLI commands for deployment slots, see az webapp deployment slot.

Solución de problemas con los intercambiosTroubleshoot swaps

Si se produce algún error durante un intercambio de ranuras, se registra en D:\home\LogFiles\eventlog.xml.If any error occurs during a slot swap, it's logged in D:\home\LogFiles\eventlog.xml. También se archiva en el registro de errores específicos de la aplicación.It's also logged in the application-specific error log.

Estos son algunos errores de intercambio habituales:Here are some common swap errors:

  • Se superó el tiempo de una solicitud HTTP a la raíz de la aplicación.An HTTP request to the application root is timed. La operación de intercambio espera 90 segundos para cada solicitud HTTP y lo vuelve a intentar hasta 5 veces.The swap operation waits for 90 seconds for each HTTP request, and retries up to 5 times. Si se agota el tiempo de espera de todos los intentos, el intercambio se detiene.If all retries are timed out, the swap operation is stopped.

  • La inicialización de la caché local puede producir un error cuando el contenido de la aplicación supera la cuota de disco local especificada para la memoria caché local.Local cache initialization might fail when the app content exceeds the local disk quota specified for the local cache. Para más información, consulte la Introducción a la caché local.For more information, see Local cache overview.

  • Durante la preparación personalizada, las solicitudes HTTP se realizan internamente (sin pasar por la dirección URL externa).During custom warm-up, the HTTP requests are made internally (without going through the external URL). Pueden producirse errores en ciertas reglas de reescritura de dirección URL en Web.config. Por ejemplo, las reglas de redirección de nombres de dominio o la exigencia de HTTPS pueden impedir que las solicitudes de alcancen el código de la aplicación.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. Para solucionar este problema, modifique las reglas de reescritura mediante la incorporación de las dos siguientes condiciones: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>
    
  • Las reglas de reescritura de dirección URL sin preparación personalizada pueden bloquear las solicitudes HTTP.Without a custom warm-up, the URL rewrite rules can still block HTTP requests. Para solucionar este problema, modifique las reglas de reescritura mediante la incorporación de la siguiente condición:To work around this issue, modify your rewrite rules by adding the following condition:

    <conditions>
      <add input="{REMOTE_ADDR}" pattern="^100?\." negate="true" />
      ...
    </conditions>
    
  • Algunas reglas de restricción de IP pueden impedir que durante el intercambio se envíen solicitudes HTTP a la aplicación.Some IP restriction rules might prevent the swap operation from sending HTTP requests to your app. Los intervalos de direcciones IPv4 que empiezan por 10. y 100. son internos de la implementación.IPv4 address ranges that start with 10. and 100. are internal to your deployment. Debe permitir que se conecten a la aplicación.You should allow them to connect to your app.

  • Después de los intercambios de ranura, la aplicación puede experimentar reinicios inesperados.After slot swaps, the app may experience unexpected restarts. El motivo es que después de un intercambio, la configuración de enlace del nombre de host deja de estar sincronizada, lo que de por sí no provoca reinicios.This is because after a swap, the hostname binding configuration goes out of sync, which by itself doesn't cause restarts. Sin embargo, algunos eventos de almacenamiento subyacentes (como las conmutaciones por error de volúmenes de almacenamiento) pueden detectar estas discrepancias y forzar el reinicio de todos los procesos de trabajo.However, certain underlying storage events (such as storage volume failovers) may detect these discrepancies and force all worker processes to restart. Para reducir estos tipos de reinicios, establezca la configuración de la aplicación WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG=1 en todas las ranuras.To minimize these types of restarts, set the WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG=1 app setting on all slots. Sin embargo, esta configuración de la aplicación no funciona con aplicaciones de Windows Communication Foundation (WCF).However, this app setting does not work with Windows Communication Foundation (WCF) apps.

Pasos siguientesNext steps

Bloqueo del acceso a espacios que no sean de producciónBlock access to non-production slots