Escenarios de migración avanzada - AWS Elastic Beanstalk

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Escenarios de migración avanzada

En esta sección se describen los escenarios de migración avanzada para implementaciones de IIS complejas.

Migraciones de varios sitios con enrutamiento de solicitudes de aplicaciones (ARR)

El eb migrate comando detecta y conserva automáticamente las configuraciones de ARR durante la migración. Cuando identifica la configuración de ARR en su IISapplicationHost.config, genera los PowerShell scripts necesarios para volver a instalar y configurar ARR en las EC2 instancias de destino.

Detección de configuración de ARR

El proceso de migración examina tres secciones clave de configuración en IIS:

  • system.webServer/proxy: Configuración principal del proxy ARR

  • system.webServer/rewrite: Reglas de reescritura de URL

  • system.webServer/caching: Configuración de almacenamiento en caché

Por ejemplo, considere una configuración ARR común en la que una RouterSite ejecución en el puerto 80 envía solicitudes a los puertos 8081 APIService y AdminPortal 8082 y 8082, respectivamente:

<!-- Original IIS ARR Configuration --> <rewrite> <rules> <rule name="Route to API" stopProcessing="true"> <match url="^api/(.*)$" /> <action type="Rewrite" url="http://backend:8081/api/{R:1}" /> </rule> <rule name="Route to Admin" stopProcessing="true"> <match url="^admin/(.*)$" /> <action type="Rewrite" url="http://backend:8082/admin/{R:1}" /> </rule> </rules> </rewrite>

El siguiente diagrama muestra cómo estas reglas se ocultan detrás del puerto 80 del servidor IIS y no se exponen a través de los EC2 grupos de seguridad. El Application Load Balancer solo tiene acceso al puerto 80 y todo el tráfico procedente de él se enruta al grupo de destino en el puerto 80.

Arquitectura de Elastic Beanstalk con enrutamiento de solicitudes de aplicaciones (ARR)

El siguiente comando puede migrar esta configuración:

PS C:\migrations_workspace> eb migrate --sites "RouterSite,APIService,AdminPortal" ` --copy-firewall-config

Proceso de migración a ARR

El proceso de migración conserva la configuración de ARR mediante varios pasos.

Exportación de la configuración

La herramienta exporta los ajustes de ARR existentes de las tres secciones clave de configuración a archivos XML independientes almacenados en el ebmigrateScripts directorio:

ebmigrateScripts\ ├── arr_config_proxy.xml ├── arr_config_rewrite.xml └── arr_config_caching.xml
Scripts de instalación

Se generan dos PowerShell scripts para gestionar la configuración de ARR:

  1. arr_msi_installer.ps1: Descarga e instala el módulo ARR

  2. arr_configuration_importer_script.ps1: Importa la configuración ARR exportada

Integración del manifiesto de despliegue

Los scripts se integran en el proceso de despliegue mediante entradas enaws-windows-deployment-manifest.json:

{ "manifestVersion": 1, "deployments": { "custom": [ { "name": "WindowsProxyFeatureEnabler", "scripts": { "install": { "file": "ebmigrateScripts\\windows_proxy_feature_enabler.ps1" } } }, { "name": "ArrConfigurationImporterScript", "scripts": { "install": { "file": "ebmigrateScripts\\arr_configuration_importer_script.ps1" } } } ] } }

Integración del balanceador de carga

El proceso de migración convierte las reglas de ARR en reglas de escucha de Application Load Balancer (ALB) siempre que es posible. Por ejemplo, la configuración de ARR anterior da como resultado reglas de ALB que enrutan el tráfico en función de los patrones de rutas de URL y, al mismo tiempo, mantienen el enrutamiento interno en las instancias. EC2

El entorno resultante mantiene la lógica de enrutamiento ARR y, al mismo tiempo, aprovecha la infraestructura elástica AWS de la empresa. Sus aplicaciones seguirán funcionando como antes: ARR gestiona el enrutamiento interno mientras que Application Load Balancer gestiona la distribución del tráfico externo.

Migraciones de varios sitios sin ARR mediante enrutamiento basado en host

Si bien el enrutamiento de solicitudes de aplicaciones (ARR) es un enfoque común para administrar varios sitios en IIS, también puede migrar las implementaciones de varios sitios directamente a Elastic Beanstalk sin ARR aprovechando las capacidades de enrutamiento basado en host de Application Load Balancer. Este enfoque puede reducir la complejidad y mejorar el rendimiento al eliminar una capa de enrutamiento adicional.

Descripción general del enrutamiento basado en host

En este enfoque, cada sitio de IIS se expone fuera de la EC2 instancia y el Application Load Balancer dirige el tráfico directamente al puerto correspondiente en función del encabezado del host. Esto elimina la necesidad de utilizar ARR y, al mismo tiempo, mantiene la separación entre las aplicaciones.

Considere una configuración de IIS multisitio con tres sitios, cada uno con su propio enlace de nombre de host:

<sites> <site name="Default Web Site" id="1"> <bindings> <binding protocol="http" bindingInformation="*:8081:www.example.com" /> </bindings> </site> <site name="InternalAPI" id="2"> <bindings> <binding protocol="http" bindingInformation="*:8082:api.internal" /> </bindings> </site> <site name="ReportingPortal" id="3"> <bindings> <binding protocol="http" bindingInformation="*:8083:reports.internal" /> </bindings> </site> </sites>

Estos sitios están expuestos en los puertos 8081, 8082 y 8083 a través de los grupos de seguridad. EC2 El Application Load Balancer se dirige a ellos en función de la configuración de la regla de escucha del Load Balancer.

Arquitectura de Elastic Beanstalk sin enrutamiento de solicitudes de aplicaciones (ARR)

Proceso de migración

Para migrar esta configuración a Elastic Beanstalk sin usar ARR, eb migrate utilice el comando del siguiente ejemplo:

PS C:\migrations_workspace> eb migrate --sites "Default Web Site,InternalAPI,ReportingPortal"

El proceso de migración configura automáticamente el Application Load Balancer con reglas de enrutamiento basadas en el host que dirigen el tráfico al grupo objetivo adecuado en función del encabezado del host. Cada grupo objetivo reenvía el tráfico al puerto correspondiente de las instancias: EC2

  1. Encabezado de host www.example.com → Grupo objetivo en el puerto 8081

  2. Cabecera de host api.internal → Grupo objetivo en el puerto 8082

  3. Encabezado de host: reports.internal → Grupo objetivo en el puerto 8083

Configuración de SSL/TLS

Para proteger sus aplicaciones con SSL/TLS, siga estos pasos:

  1. Solicite certificados para sus dominios a través AWS Certificate Manager de (ACM).

  2. Configure los oyentes HTTPS en su Application Load Balancer con estos certificados.

  3. Actualice la configuración de su entorno para incluir los agentes de escucha HTTPS con las siguientes opciones de configuración.

    option_settings: aws:elb:listener:443: ListenerProtocol: HTTPS SSLCertificateId: arn:aws:acm:region:account-id:certificate/certificate-id InstancePort: 80 InstanceProtocol: HTTP

Con esta configuración, la terminación de SSL se produce en el balanceador de cargas y el tráfico se reenvía a las instancias a través de HTTP. Esto simplifica la administración de los certificados y, al mismo tiempo, mantiene las conexiones seguras con los clientes.

Prácticas recomendadas

Grupos de seguridad

Configure los grupos de seguridad para permitir el tráfico entrante solo en los puertos que utilizan los sitios de IIS (8081, 8082, 8083 en este ejemplo) desde el grupo de seguridad Application Load Balancer.

Comprobaciones de estado

Configure las comprobaciones de estado para cada grupo de destino a fin de garantizar que el tráfico solo se dirija a las instancias en buen estado. Cree puntos finales de comprobación de estado para cada aplicación si aún no existen.

Monitorización

Configure CloudWatch alarmas para supervisar el estado y el rendimiento de cada grupo objetivo por separado. Esto le permite identificar los problemas específicos de las aplicaciones individuales.

Escalado

Tenga en cuenta los requisitos de recursos de todas las aplicaciones al configurar las políticas de autoescalado. Si una aplicación tiene necesidades de recursos significativamente diferentes, considere la posibilidad de migrarla a un entorno diferente.

Administración de directorios virtuales

El eb migrate comando conserva las estructuras de directorios virtuales al migrar las aplicaciones de IIS a Elastic Beanstalk.

Configuración de permisos predeterminada

Al migrar directorios virtuales, eb migrate establece un conjunto básico de permisos al conceder ReadAndExecute acceso a:

  • IIS_IUSRS

  • IUSR

  • Usuarios autenticados

Por ejemplo, considere una estructura de directorios virtuales típica:

<site name="CorporatePortal"> <application path="/" applicationPool="CorporatePortalPool"> <virtualDirectory path="/" physicalPath="C:\sites\portal" /> <virtualDirectory path="/shared" physicalPath="C:\shared\content" /> <virtualDirectory path="/reports" physicalPath="D:\reports" /> </application> </site>

Directorios virtuales protegidos con contraseña

Cuando eb migrate encuentra directorios virtuales protegidos por contraseña, emite advertencias y requiere una intervención manual.

El siguiente ejemplo de configuración generará la respuesta de advertencia que sigue al ejemplo.

<virtualDirectory path="/secure" physicalPath="C:\secure\content" userName="DOMAIN\User" password="[encrypted]" />
[WARNING] CorporatePortal/secure is hosted at C:\secure\content which is password-protected and won't be copied.

Para mantener la protección mediante contraseña, cree un script de despliegue personalizado como el siguiente:

# PS C:\migrations_workspace> cat secure_vdir_config.ps1 $vdirPath = "C:\secure\content" $siteName = "CorporatePortal" $vdirName = "secure" $username = "DOMAIN\User" $password = "SecurePassword" # Ensure directory exists if (-not (Test-Path $vdirPath)) { Write-Host "Creating directory: $vdirPath" New-Item -Path $vdirPath -ItemType Directory -Force } # Configure virtual directory with credentials Write-Host "Configuring protected virtual directory: $vdirName" New-WebVirtualDirectory -Site $siteName -Name $vdirName ` -PhysicalPath $vdirPath -UserName $username -Password $password # Set additional permissions as needed $acl = Get-Acl $vdirPath $rule = New-Object System.Security.AccessControl.FileSystemAccessRule( $username, "ReadAndExecute", "ContainerInherit,ObjectInherit", "None", "Allow" ) $acl.AddAccessRule($rule) Set-Acl $vdirPath $acl

Añada este script a su despliegue incluyéndolo en el manifiesto:

{ "manifestVersion": 1, "deployments": { "custom": [ { "name": "SecureVirtualDirectory", "scripts": { "install": { "file": "secure_vdir_config.ps1" } } } ] } }

Administración de permisos personalizada

El eb migrate comando proporciona un marco para que los scripts de permisos personalizados se adapten a las aplicaciones que requieren permisos distintos de los predeterminados.

$paths = @( "C:\sites\portal\uploads", "C:\shared\content" ) foreach ($path in $paths) { if (-not (Test-Path $path)) { Write-Host "Creating directory: $path" New-Item -Path $path -ItemType Directory -Force } $acl = Get-Acl $path # Add custom permissions $customRules = @( # Application Pool Identity - Full Control [System.Security.AccessControl.FileSystemAccessRule]::new( "IIS AppPool\CorporatePortalPool", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow" ), # Custom Service Account [System.Security.AccessControl.FileSystemAccessRule]::new( "NT SERVICE\CustomService", "Modify", "ContainerInherit,ObjectInherit", "None", "Allow" ) ) foreach ($rule in $customRules) { $acl.AddAccessRule($rule) } Set-Acl $path $acl Write-Host "Custom permissions applied to: $path" }

Prácticas recomendadas

Siga estas prácticas recomendadas para planificar, ejecutar, supervisar y verificar la migración.

Planificación previa a la migración

Documente los requisitos de autenticación y permisos existentes antes de la migración. Pruebe los scripts de permisos personalizados en un entorno de desarrollo antes de implementarlos en producción.

Administración de contenido compartido

En el caso de los directorios de contenido compartido, asegúrese de que todos los permisos necesarios del sistema de archivos estén configurados correctamente mediante scripts personalizados. Considere la posibilidad de utilizar Amazon FSx for Windows File Server para los requisitos de almacenamiento compartido.

Supervisión y verificación

Supervise los registros de las aplicaciones después de la migración para verificar el acceso correcto a los directorios virtuales. Presta especial atención a las siguientes áreas:

  • Acceso a la identidad del grupo de aplicaciones

  • Permisos de cuentas de servicio personalizadas

  • Conectividad de red compartida

  • Errores de autenticación

Configuración personalizada del grupo de aplicaciones

De forma predeterminada, el eb migrate comando no copia la configuración personalizada del grupo de aplicaciones. Para conservar las configuraciones personalizadas del grupo de aplicaciones, siga este procedimiento para crear y aplicar una sección de manifiesto personalizada.

  1. Cree un archivo de sus artefactos de migración.

    PS C:\migrations_workspace> eb migrate --archive
  2. Cree un PowerShell script personalizado para configurar los grupos de aplicaciones.

    # PS C:\migrations_workspace> cat .\migrations\latest\upload_target\customize_application_pool_config.ps1 $configPath = "$env:windir\System32\inetsrv\config\applicationHost.config" [xml]$config = Get-Content -Path $configPath $newPoolXml = @" <!-- Original IIS Configuration --> <applicationPools> <add name="CustomPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated"> <processModel identityType="SpecificUser" userName="AppPoolUser" password="[encrypted]" /> <recycling> <periodicRestart time="00:00:00"> <schedule> <add value="02:00:00" /> <add value="14:00:00" /> </schedule> </periodicRestart> </recycling> </add> </applicationPools> "@ $newPoolXmlNode = [xml]$newPoolXml # Find the applicationPools section $applicationPools = $config.SelectSingleNode("//configuration/system.applicationHost/applicationPools") # Import the new node into the document $importedNode = $config.ImportNode($newPoolXmlNode.DocumentElement, $true) $applicationPools.AppendChild($importedNode) # Save the changes $config.Save($configPath) Write-Host "ApplicationHost.config has been updated successfully."
  3. Actualice el aws-windows-deployment-manifest.json archivo para incluir su script personalizado.

    { "manifestVersion": 1, "deployments": { ... "custom": [ ..., { "name": "ModifyApplicationPoolConfig", "description": "Modify application pool configuration from source machine to remove", "scripts": { "install": { "file": "customize_application_pool_config.ps1" }, "restart": { "file": "ebmigrateScripts\\noop.ps1" }, "uninstall": { "file": "ebmigrateScripts\\noop.ps1" } } } ] } }
  4. Cree un entorno con el directorio de archivos actualizado.

    PS C:\migrations_workspace> eb migrate ` --archive-dir '.\migrations\latest\upload_target\'

El --archive-dir argumento indica eb migrate que hay que utilizar el código fuente que creó previamente, evitando la creación de nuevos archivos.

Despliegue de versiones anteriores

eb migrateMantiene un historial de sus migraciones a través de directorios con marca de tiempo y versiones de aplicaciones en Elastic Beanstalk. Cada migración crea un archivo zip único que se puede implementar si es necesario.

PS C:\migrations_workspace> ls .\migrations\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d----l 3/18/2025 10:34 PM latest d----- 3/16/2025 5:47 AM migration_1742104049.479849 d----- 3/17/2025 9:18 PM migration_1742246303.18056 d----- 3/17/2025 9:22 PM migration_1742246546.565739 ... d----- 3/18/2025 10:34 PM migration_1742337258.30742

El enlace latest simbólico siempre apunta al directorio de artefactos de migración creado más recientemente. Además de los registros de aplicaciones y errores relevantes, cada directorio de artefactos de migración también contiene un upload_target.zip archivo que puede implementar en Elastic Beanstalk.

PS C:\migrations_workspace> ls .\migrations\latest\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 3/18/2025 10:34 PM upload_target -a---- 3/18/2025 10:34 PM 13137 application.log -a---- 3/18/2025 10:34 PM 0 error.log -a---- 3/18/2025 10:34 PM 1650642 upload_target.zip

Puede implementar el archivo mediante: upload_target.zip eb migrate

PS C:\migrations_workspace> eb migrate --zip .\migrations\latest\upload_target.zip