Estoy tratando de lograr la redirección desde el frente de la nube a la puerta de enlace API en función de la ruta. Tengo mi interfaz de usuario con una distribución frente a la nube con la fuente siendo el cubo S3 alojado en, por ejemplo.

www.example.com

Y atiende las solicitudes.

Quiero las URL con el patrón

www.example.com/share/*

Para ser redirigido a API Gateway. API Gateway tiene una redirección interna donde apunta a otras URL.

Si utilizo el punto final de la puerta de enlace API directamente en el navegador, obtiene el resultado esperado.

No estoy seguro de cómo redirigir desde Cloudfront a API Gateway. He puesto registros de cloudwatch en API Gateway y puedo ver que Cloudfront to API Gateway Redirection no funciona.

Intenté agregar API Gateway como origen y agregué lo mismo que un comportamiento en cloudfront, pero no tuve éxito.

1
Vishesh 24 jun. 2020 a las 10:04

2 respuestas

Una forma sería utilizar lambda @ edge para un solicitud del espectador para devolver 302 HTTP código para el cliente con URL de redireccionamiento.

En python, una lambda como esta podría verse (de los documentos):

 def lambda_handler(event, context):
 
     # logic to check the url and generate new url.
     
     response = {
         'status': '302',
         'statusDescription': 'Found',
         'headers': {
             'location': [{
                 'key': 'Location',
                 'value': '<your-api-gateway-url>'
             }]
         }
     }
     
     return response
0
Marcin 24 jun. 2020 a las 07:52

Puede redirigir usando Lambda @ Edge en CloudFront. AWS proporciona una función de redireccionamiento de ejemplo aquí.

Ejemplo a continuación

'use strict';

exports.handler = (event, context, callback) => {
    /*
     * Generate HTTP redirect response with 302 status code and Location header.
     */
    const response = {
        status: '302',
        statusDescription: 'Found',
        headers: {
            location: [{
                key: 'Location',
                value: 'http://URL/PATH',
            }],
        },
    };
    callback(null, response);
};

Sin embargo, parece que quizás, en lugar de hacer una redirección, debería considerar usar un origen secundario diferente en su distribución de CloudFront para servir la ruta API Gateway si es parte de su aplicación.

Para hacer esto, deberá agregar una personalizado dominio a su API Gateway con el nombre de dominio de su sitio y luego en CloudFront agregue un origen con un patrón coincidente de /share para reenviar a su API Gateway.

Lea esta página para obtener más información .

0
Chris Williams 24 jun. 2020 a las 07:13