

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.

# Cómo modificar los encabezados HTTP al migrar de F5 a un equilibrador de carga de aplicación en AWS
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws"></a>

*Sachin Trivedi, Amazon Web Services*

## Resumen
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-summary"></a>

Cuando migra una aplicación que utiliza un equilibrador de carga de F5 a Amazon Web Services (AWS) y quiere usar un equilibrador de carga de aplicación en AWS, la migración de las reglas de F5 para las modificaciones de encabezados es un problema habitual. Un Application Load Balancer no admite modificaciones de encabezados, pero puedes usar Amazon CloudFront como red de entrega de contenido (CDN) y Lambda @Edge para modificar encabezados.

Este patrón describe las integraciones necesarias y proporciona un código de muestra para la modificación del encabezado mediante AWS CloudFront y Lambda @Edge.

## Requisitos previos y limitaciones
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-prereqs"></a>

**Requisitos previos **
+ Aplicación en las instalaciones que usa un equilibrador de carga de F5 con una configuración que reemplaza el valor del encabezado HTTP mediante el uso de `if, else`. Para obtener más información sobre esta configuración, consulte [Encabezado HTTP](https://clouddocs.f5.com/api/irules/HTTP__header.html) en la documentación del producto de F5. 

**Limitaciones**
+ Este patrón se aplica a la personalización del encabezado del equilibrador de carga de F5. Para otros equilibradores de carga de terceros, por favor consulte la documentación del equilibrador de carga para obtener información de soporte.
+ Las funciones de Lambda que utilice para Lambda@Edge deben estar en la región Este de EE. UU. (Norte de Virginia).

## Arquitectura
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-architecture"></a>

El siguiente diagrama muestra la arquitectura de AWS, incluyendo el flujo de integración entre la CDN y otros componentes de AWS.

![Arquitectura para la modificación de encabezados mediante Amazon CloudFront y Lambda @Edge](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/00abbe3c-2453-4291-9b24-b488dced4868/images/4ee9a19e-6da2-4c5a-a8bc-19d3918a166e.png)


## Tools (Herramientas)
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-tools"></a>

**Servicios de AWS**
+ [Equilibrador de carga de aplicación](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) ─ Un equilibrador de carga de aplicación es un servicio de equilibrio de carga totalmente gestionado por AWS que funciona en la séptima capa del modelo de interconexión de sistemas abiertos (OSI). Equilibra el tráfico entre varios destinos y admite solicitudes de enrutamiento avanzadas basadas en encabezados y métodos HTTP, cadenas de consulta y enrutamiento basado en el host o en la ruta.
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html): Amazon CloudFront es un servicio web que acelera la distribución de su contenido web estático y dinámico, como .html, .css, .js y archivos de imagen, a sus usuarios. CloudFront entrega su contenido a través de una red mundial de centros de datos denominados ubicaciones perimetrales para reducir la latencia y mejorar el rendimiento.
+ [Lambda @Edge ─](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html) Lambda @Edge es una extensión de AWS Lambda que le permite ejecutar funciones para personalizar el contenido que se entrega. CloudFront Puede crear funciones en la región EE.UU. Este (Virginia del Norte) y, después, asociarlas a una CloudFront distribución para replicar automáticamente el código en todo el mundo, sin aprovisionar ni administrar servidores. Esto reduce la latencia y mejora la experiencia del usuario.

**Código**

El siguiente código de ejemplo proporciona un plan para modificar los encabezados de CloudFront respuesta. Siga las instrucciones de la sección *Epics* para implementar el código.

```
exports.handler = async (event, context) => {
    const response = event.Records[0].cf.response;
    const headers = response.headers;


    const headerNameSrc = 'content-security-policy';
    const headerNameValue = '*.xyz.com';


    if (headers[headerNameSrc.toLowerCase()]) {
        headers[headerNameSrc.toLowerCase()] = [{
            key: headerNameSrc,
            value: headerNameValue,
        }];
        console.log(`Response header "${headerNameSrc}" was set to ` +
                    `"${headers[headerNameSrc.toLowerCase()][0].value}"`);
    }
    else {
            headers[headerNameSrc.toLowerCase()] = [{
            key: headerNameSrc,
            value: headerNameValue,
            }];
    }
    return response;
};
```

## Epics
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-epics"></a>

### Crear una distribución
<a name="create-a-cdn-distribution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una distribución CloudFront web.  | En este paso, crea una CloudFront distribución para indicar desde CloudFront dónde quiere que se entregue el contenido y los detalles sobre cómo realizar el seguimiento y gestionar la entrega del contenido.<br />Para crear una distribución mediante la consola, inicie sesión en la consola de administración de AWS, abra la [CloudFront consola](https://console.aws.amazon.com/cloudfront/v3/home) y, a continuación, siga los pasos de la [CloudFront documentación](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-creating-console.html). | Administrador de la nube | 

### Creación e implementación de la funcion Lambda@Edge
<a name="create-and-deploy-the-lambda-edge-function"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear e implementar la funcion Lambda@Edge. | Puede crear una función Lambda @Edge mediante un esquema para modificar CloudFront los encabezados de respuesta. (Hay otros blueprints disponibles para diferentes casos de uso; para obtener más información, consulte las funciones de [ejemplo de Lambda @Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html) en CloudFront la documentación). <br />Para crear una función de Lambda@Edge:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws.html) | Administrador de AWS | 
| Implemente la función de Lambda@Edge. | Siga las instrucciones del [paso 4](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-how-it-works-tutorial.html#lambda-edge-how-it-works-tutorial-add-trigger) del *tutorial: Creación de una función Lambda @Edge sencilla* de la CloudFront documentación de Amazon para configurar el CloudFront disparador e implementar la función. | Administrador de AWS | 

## Recursos relacionados
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-resources"></a>

**CloudFront documentación**
+ [Comportamiento de solicitudes y respuestas para orígenes personalizados](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html) 
+ [Trabajo con distribuciones](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-working-with.html) 
+ [Funciones de ejemplo de Lambda@Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html) 
+ [Personalización en la periferia con Lambda@Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html)
+ [Tutorial: Creación de una función de Lambda@Edge sencilla](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-how-it-works-tutorial.html)