Información general

Las funciones de periferia son potentes herramientas para desarrolladores que permiten agregar lógica personalizada en la periferia con CloudFront. Las funciones de periferia permiten a los desarrolladores enriquecer las aplicaciones web a la vez que reducen la latencia y crean aplicaciones completamente distribuidas. Las funciones de periferia se pueden utilizar para:

  • Implementación lógica HTTP avanzada. CloudFront le proporciona reglas nativas como la redirección de HTTP a HTTP, el enrutamiento a diferentes orígenes en función de la ruta de la solicitud, etc. Las funciones de periferia le permiten ir más allá de las reglas nativas de CloudFront para implementar lógica HTTP avanzada, como la normalización de claves de caché, la reescritura de URL, las operaciones HTTP CRUD, etc.
  • Reducción de la latencia de la aplicación Cierta lógica de aplicación puede descargarse del origen a la periferia para beneficiarse del almacenamiento en caché (por ejemplo, pruebas A/B) o para ejecutarse más cerca de los usuarios (por ejemplo, redirecciones HTTP, acortamiento de URL, renderización HTML). En una arquitectura de microservicios o de microfrentes, puede utilizar funciones de periferia para implementar la lógica común (por ejemplo, autorización y autenticación) una vez en el punto de entrada de la aplicación, en lugar de implementarla en cada componente por separado.
  • Protección del perímetro de la aplicación. Las funciones de periferia pueden utilizarse para aplicar controles de seguridad como el control de acceso y el bloqueo geográfico avanzado en la periferia. Esto le permite reducir la superficie expuesta a ataques de su origen y eliminar costos de escalado innecesarios.
  • Enrutamiento de solicitudes. Puede utilizar funciones de periferia para dirigir cada solicitud HTTP a un origen específico en función de la lógica de la aplicación. Esta función puede ser útil para escenarios como la conmutación por error avanzada, el equilibrio de carga de origen, las arquitecturas multirregión, las migraciones, el enrutamiento de aplicaciones, etc.
     

Tipos de funciones de periferia con CloudFront

CloudFront le proporciona dos tipos de funciones de periferia: CloudFront Functions y Lambda@Edge. CloudFront Functions ofrece tiempos de inicio inferiores a un milisegundo y se escala inmediatamente para administrar millones de solicitudes por segundo, lo que lo hace ideal para lógica ligera (normalización de caché, reescritura de URL, manipulación de solicitudes, autorización, etc...). Lambda@Edge es una extensión de AWS Lambda, ejecutada de forma distribuida a través de cachés regionales de periferia. Lambda@Edge ofrece más potencia de computación y funcionalidades avanzadas, como llamadas a redes externas, aunque por un costo y una sobrecarga de latencia mayores. Esta documentación ofrece información detallada sobre las diferencias entre ambos tiempos de ejecución.

Las funciones de periferia se pueden utilizar para manipular solicitudes y respuestas HTTP en tiempo de ejecución, o simplemente para finalizar solicitudes y generar respuestas en lugar de hacerlas pasar hacia arriba en CloudFront. Las funciones de periferia se pueden configurar para que se ejecuten en diferentes eventos durante el ciclo de vida de una solicitud en CloudFront:

  • Eventos de espectador: se ejecutan para cada solicitud, antes de comprobar la caché de CloudFront. Es ideal para normalizar la caché, autorizar o colocar cookies únicas. CloudFront Functions solo se permite en eventos de espectador.
  • Eventos de origen: se ejecutan cuando se pierde la caché, antes de ir al origen para obtener los archivos. Es ideal para generar contenido o manipular respuestas antes de almacenarlo en caché, y dirigir solicitudes dinámicamente a diferentes orígenes.

Considere las siguientes prácticas recomendadas:

  • Asocie una función de periferia al comportamiento de caché más específico, para evitar un costo de ejecución de funciones innecesario.
  • Elija CloudFront Functions en los casos de uso que se ejecutan en eventos de espectador, y Lambda@Edge en los casos de uso que se ejecutan en eventos de origen.
  • Utilice Lambda@Edge en eventos de espectador solo cuando las capacidades de CloudFront Functions no puedan cumplir los requisitos de su lógica.
  • En los eventos de espectador, puede utilizar Lambda@Edge o CloudFront Functions, pero no ambos (por ejemplo, Lambda@Edge en el evento de solicitud de espectador y CloudFront Functions en el evento de respuesta de espectador).
  • Obtenga información sobre las restricciones de las funciones de periferia cuando diseñe su aplicación.

CloudFront Functions

Las CloudFront Functions se escriben en JavaScript, se pueden crear y probar completamente en la consola y las API de CloudFront, y se pueden registrar en los registros de CloudWatch en la región us-east-1. Como desarrollador, tiene que escribir funciones con un uso de computación inferior al 80 %. CloudFront limitará las ejecuciones que superen las cuotas de uso de computación, lo que se puede supervisar mediante las métricas de CloudWatch.

Esta guía del modelo de programación le ayudará a escribir CloudFront Functions. A continuación, se muestra una función de ejemplo para redirigir a los usuarios procedentes de Alemania al contenido localizado en alemán:

function handler(event) {
  var request = event.request;
  var headers = request.headers;
  var host = request.headers.host.value;
  var country = 'DE';
  var newurl = `https://${host}/de/index.html`;

  if (headers['cloudfront-viewer-country']) {
    var countryCode = headers['cloudfront-viewer-country'].value;
    if (countryCode === country) {
      var response = {
        statusCode: 302,
        statusDescription: 'Found',
        headers: { location: { value: newurl } },
      };

      return response;
    }
  }
  return request;
}

CloudFront Functions también ofrece la capacidad de desacoplar y almacenar datos persistentes de forma independiente del código mediante CloudFront KeyValueStore. KeyValueStore es particularmente ideal en situaciones en las que los datos incrustados, como las asignaciones de redireccionamiento masivas, podrían superar la cuota de tamaño de la función. También tiene la ventaja de que permite actualizar los datos persistentes sin tener que modificar la función.

Personalización en la periferia con Amazon CloudFront Functions

Lambda@Edge

Las funciones de Lambda@Edge se pueden escribir en Node.js o Python. Con ellas, se puede aprovechar la potencia de un contenedor de Lambda con memoria configurable (hasta 10 GB) Al estar basada en AWS Lambda, una función de Lambda@Edge se crea en la consola de Lambda, y exclusivamente en us-east-1. Cuando termina de crearla e implementarla en su distribución de CloudFront, CloudFront se replica globalmente en sus cachés de periferia regionales. Para asociar una función de Lambda@Edge con un comportamiento de caché de CloudFront, primero debe publicar una nueva versión de esta y, a continuación, implementarla en su comportamiento de caché de destino. Cada actualización de la función de Lambda@Edge desencadena una implementación de CloudFront (a diferencia de CloudFront Functions, donde solo la asociación inicial desencadena una implementación de CloudFront). Al desarrollar funciones de Lambda@Edge, tenga en cuenta lo siguiente:

  • Más información sobre las prácticas recomendadas para usar Lambda@Edge, especialmente en torno a la administración de la concurrencia de ejecución. La simultaneidad mide el número de contenedores de Lambda que se ejecutan simultáneamente por región de caché de periferia regional. En cada región, la simultaneidad de Lambda@Edge tiene cuotas en términos de velocidad de ráfaga y límite absoluto.
  • Más información sobre las prácticas recomendadas para obtener datos externos de su función de Lambda@Edge.
  • Los registros de Lambda@Edge se envían a los registros de CloudWatch en la región en la que se ejecutaron con un nombre de grupo de registro precedido por us-east-1. Si necesita centralizar los registros de Lambda@Edge en una única región, considere la siguiente solución de agregador de registros de Lambda@Edge. Tenga en cuenta que cada ejecución de función genera registros en Registros de CloudWatch (a diferencia de CloudFront Functions, donde los registros solo se generan cuando se escriben explícitamente en el código de la función). Puede deshabilitar los registros de Lambda@Edge si elimina los permisos para enviar registros a CloudWatch de su rol de IAM asociado.

Esta guía del modelo de programación le ayuda a escribir funciones de Lambda@Edge. A continuación se muestra una función de ejemplo que dirige las solicitudes procedentes de usuarios alemanes a un servidor con sede en Alemania por motivos normativos:

'use strict';

exports.handler = (event, context, callback) => {
  const request = event.Records[0].cf.request;

  if (request.headers['cloudfront-viewer-country']) {
    const countryCode = request.headers['cloudfront-viewer-country'][0].value;
    if (countryCode === 'DE') {
      const domainName = 'origin.example.de';
      request.origin.custom.domainName = domainName;
      request.headers['host'] = [{ key: 'host', value: domainName }];
    }
  }

  return request;
};
How to Set up a Lambda@Edge Function

Recursos

¿Le resultó útil esta página?