Tutorial: Creación de una función de Lambda@Edge simple - Amazon CloudFront

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.

Tutorial: Creación de una función de Lambda@Edge simple

En este tutorial, se muestra cómo comenzar a utilizar Lambda@Edge; para ello, se le ayuda a crear y añadir una función de Node.js de ejemplo que se ejecuta en CloudFront. En el ejemplo que se muestra, se añaden encabezados HTTP de seguridad a una respuesta, lo que puede mejorar la seguridad y privacidad de un sitio web. No necesita un sitio web para este tutorial. En él, simplemente añadimos encabezados de seguridad a una respuesta cuando CloudFront recuperamos un archivo.

En este ejemplo se describen los pasos para crear y configurar una función Lambda@Edge. Seguirá pasos similares y elegirá entre las mismas opciones cuando cree su propia solución de Lambda@Edge.

Paso 1: Regístrese para obtener una Cuenta de AWS

Si aún no lo ha hecho, regístrese en Amazon Web Services en http://aws.amazon.com. Elija Sign Up Now (Inscríbase ahora) e introduzca la información que se le pida.

Paso 2: Crear una distribución de CloudFront

Antes de crear la función Lambda @Edge de ejemplo, debe disponer de un CloudFront entorno con el que trabajar que incluya un origen desde el que ofrecer contenido.

¿Eres nuevo en esto? CloudFront CloudFront entrega contenido a través de una red mundial de ubicaciones periféricas. Al configurar una función Lambda con CloudFront, la función puede personalizar el contenido más cerca de los espectadores, lo que mejora el rendimiento. Si no está familiarizado con ella CloudFront, tómese unos minutos antes de completar el tutorial para leer una breve descripción general y aprender un poco sobre cómo almacenar y publicar el contenido en CloudFront caché.

Para este ejemplo, debe crear una CloudFront distribución que utilice un bucket de Amazon S3 como origen de la distribución. Si ya dispone de un entorno, puede omitir este paso.

Para crear una CloudFront distribución con un origen en Amazon S3
  1. Cree un bucket de Amazon S3 con un archivo o dos, como, por ejemplo, archivos de imágenes para usarlos como contenido de muestra. Puede seguir los pasos que se detallan en Cargar su contenido en Amazon S3. Asegúrese de que establece permisos para conceder acceso de lectura público a los objetos del bucket.

  2. Cree una CloudFront distribución y añada su bucket de S3 como origen siguiendo los pasos que se indican en Crear una distribución CloudFront web. Si ya tiene una distribución, solo es necesario que añada el bucket como origen para esa distribución.

    sugerencia

    Tome nota del ID de distribución. Más adelante en este tutorial, cuando añada un CloudFront activador para su función, deberá elegir el ID de la distribución en una lista desplegable, por ejemplo, E653W22221KDDL.

Paso 3: Cree su función

En este paso, se crea una función de Lambda, a partir de una plantilla de proyecto que se proporciona en la consola de Lambda. La función agrega código para actualizar los encabezados de seguridad de la distribución. CloudFront

¿Es la primera vez que utiliza Lambda o Lambda@Edge? Lambda @Edge permite usar CloudFront activadores para invocar una función Lambda. Al asociar una CloudFront distribución a una función Lambda, CloudFront intercepta las solicitudes y respuestas en las ubicaciones de CloudFront borde y ejecuta la función. Las funciones de Lambda pueden mejorar la seguridad o personalizar la información según la ubicación de los lectores, para mejorar el rendimiento. La función que se crea en este tutorial actualiza los encabezados de seguridad de una respuesta de CloudFront.

Existen varios pasos que se deben dar al crear una función de Lambda. En este tutorial, se parte de una plantilla de proyecto para crear la función y, a continuación, se actualiza la función con código que establece los encabezados de seguridad. Por último, se agrega e implementa un CloudFront activador para ejecutar la función.

Para crear una función Lambda, realice el siguiente procedimiento:
  1. Inicie sesión en la AWS Management Console y abra la consola de AWS Lambda en https://console.aws.amazon.com/lambda/.

    importante

    Asegúrese de que está en la región US-East-1 (N. Virginia) (US-East-1 [Norte de Virginia]) (us-east-1). Debe estar en esta región para crear funciones de Lambda@Edge.

  2. Elija Create function (Crear función).

  3. En la página Crear función, seleccione Usar un esquema y, a continuación, filtre los CloudFront esquemas introduciéndolos cloudfront en el campo de búsqueda. Se muestra la palabra clave: cloudfront y se muestran todos los planos etiquetados. CloudFront

    nota

    CloudFront Los planos solo están disponibles en la región US-East-1 (Virginia del Norte) (us-east-1).

  4. Elija el cloudfront-modify-response-headerplano como plantilla para su función.

  5. Escriba la siguiente información sobre su función:

    Nombre

    Escriba un nombre para la función.

    Rol de ejecución

    Elija cómo se deben establecer los permisos para la función. Para utilizar la plantilla de política de permisos de Lambda@Edge básica recomendada, elija Create a new role from policy templates (Crear un nuevo rol a partir de plantillas de política de AWS).

    Role name (Nombre de rol)

    Escriba un nombre para el rol que crea la plantilla de política.

    Policy templates (Plantillas de política)

    Lambda agrega automáticamente los permisos básicos de Lambda de Edge a la plantilla de políticas porque usted eligió un CloudFront blueprint como base para su función. Esta plantilla de políticas añade permisos de rol de ejecución que le CloudFront permiten ejecutar la función Lambda por usted en CloudFront ubicaciones de todo el mundo. Para obtener más información, consulte Configuración de permisos y roles de IAM para Lambda@Edge.

  6. Elija Create function (Crear función). Lambda crea la función, y en la página siguiente verá la configuración de su función.

  7. En la sección Designer (Diseñador) de la página, elija el nombre de la función, como se muestra en la siguiente imagen. En este ejemplo, el nombre de la función es ExampleFunction.

    
								Página de funciones Lambda de la consola de Lambda en la que se muestra la sección del diseñador con el nombre de la función seleccionado.
  8. Desplácese hacia abajo hasta la sección Function code (Código de función) de la página, como se muestra en la siguiente imagen.

    
								Página de funciones Lambda de la consola de Lambda en la que se muestra la sección de código de función.

    Reemplace el código de la plantilla por una función que modifique los encabezados de seguridad que devuelve el origen. Por ejemplo, puede utilizar código similar al siguiente:

    'use strict'; exports.handler = (event, context, callback) => { //Get contents of response const response = event.Records[0].cf.response; const headers = response.headers; //Set new headers headers['strict-transport-security'] = [{key: 'Strict-Transport-Security', value: 'max-age= 63072000; includeSubdomains; preload'}]; headers['content-security-policy'] = [{key: 'Content-Security-Policy', value: "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'"}]; headers['x-content-type-options'] = [{key: 'X-Content-Type-Options', value: 'nosniff'}]; headers['x-frame-options'] = [{key: 'X-Frame-Options', value: 'DENY'}]; headers['x-xss-protection'] = [{key: 'X-XSS-Protection', value: '1; mode=block'}]; headers['referrer-policy'] = [{key: 'Referrer-Policy', value: 'same-origin'}]; //Return modified response callback(null, response); };
  9. Elija Save (Guardar) para guardar el código actualizado.

Continúe con la siguiente sección para añadir un CloudFront disparador para ejecutar la función.

Paso 4: Añade un CloudFront disparador para ejecutar la función

Ahora que tiene una función Lambda para actualizar los encabezados de seguridad, configure el CloudFront desencadenador para que ejecute su función y añada los encabezados en cualquier respuesta que CloudFront reciba del origen de su distribución.

Para configurar el desencadenador de CloudFront de una función
  1. En la sección Designer (Diseñador) de la página, elija CloudFront, como se muestra en la siguiente imagen.

    
								Página de funciones Lambda en la consola de Lambda, que muestra la sección del diseñador con la opción seleccionada.  CloudFront
  2. Desplácese hacia abajo hasta la sección Configure triggers (Configurar desencadenadores) de la página y, a continuación, elija Deploy to Lambda@Edge (Implementar en Lambda@Edge).

  3. En la página Deploy to Lambda@Edge (Implementar en Lambda@Edge), en Configure CloudFront trigger (Configurar desencadenador de), escriba lo siguiente:

    Distribución

    El identificador CloudFront de distribución que se va a asociar a la función. En la lista desplegable, elija el ID de distribución.

    Comportamiento de la caché

    El comportamiento de la caché que se debe utilizar con el disparador. En este ejemplo, deje el valor establecido en *, es decir, el comportamiento de caché predeterminado de la distribución. Para obtener más información, consulte Configuración del comportamiento de la caché en el tema Valores que deben especificarse al crear o actualizar una distribución.

    CloudFront evento

    El desencadenador que especifica cuándo se ejecutará la función. Queremos que la función de encabezados de seguridad se ejecute siempre que CloudFront devuelva una respuesta del origen. Por lo tanto, en la lista desplegable, elija Origin response (Respuesta de origen). Para obtener más información, consulte Agregado de desencadenadores para una función de Lambda@Edge.

  4. En Confirm deploy to Lambda@Edge (Confirmar implementación en Lambda@Edge), active la casilla para confirmar que el desencadenador se implementará y ejecutará la función en todas las ubicaciones de AWS.

  5. Seleccione Deploy (Implementar) para añadir el desencadenador y replicar la función a ubicaciones de AWS en todo el mundo. A continuación, si es necesario, cierre la página Deploy to Lambda @Edge (Implementar en Lambda@Edge).

  6. Espere a que la función se replique. Esta operación suele tardar varios minutos.

    Para comprobar si la replicación ha finalizado, vaya a la CloudFront consola y consulte su distribución. Espere a que el estado de la distribución cambie de In Progress (En curso) a Deployed (Implementada), lo que significa que la función se ha replicado. Para comprobar que la función es correcta, realice los pasos de la siguiente sección.

Paso 5: Verifique que la función se ejecuta

Ahora que ha creado la función Lambda y ha configurado un activador para ejecutarla en una CloudFront distribución, compruebe que la función cumple lo que esperaba. En este ejemplo, comprobamos los encabezados HTTP CloudFront devueltos para asegurarnos de que se han agregado los encabezados de seguridad.

Para verificar que la función de Lambda@Edge añade los encabezados de seguridad
  1. En un navegador, escriba la dirección URL de un archivo de su bucket de S3. Por ejemplo, puede utilizar una URL similar a https://d111111abcdef8.cloudfront.net/image.jpg.

    Para obtener más información sobre el nombre de CloudFront dominio que se debe usar en la URL del archivo, consulte. Personalizar el formato de URL de los archivos en CloudFront

  2. Abra la barra de herramientas para desarrolladores web del navegador. Por ejemplo, en la ventana del navegador Chrome, abra el menú contextual (haga clic con el botón derecho) y, a continuación, elija Inspeccionar.

  3. Elija la pestaña Network (Red).

  4. Vuelva a cargar la página para ver la imagen y, a continuación, elija una solicitud HTTP en el panel izquierdo. Verá que los encabezados HTTP se muestran en un panel independiente.

  5. Examine la lista de encabezados HTTP para verificar que incluye los encabezados de seguridad esperados. Por ejemplo, es posible que vea encabezados similares a los que se muestran en la siguiente captura de pantalla.

    
								Lista de encabezados HTTP con los encabezados de seguridad esperados resaltados.

Si los encabezados de seguridad se incluyen en la lista de encabezados, ¡estupendo! Significa que ha creado correctamente su primera función de Lambda@Edge. Si CloudFront devuelve errores o hay otros problemas, continúe con el siguiente paso para solucionar los problemas.

Paso 6: Solucione problemas

Si CloudFront devuelve errores o no añade los encabezados de seguridad como esperabas, puedes investigar la ejecución de la función consultando los registros. CloudWatch Asegúrese de utilizar los registros almacenados en la ubicación de AWS más cercana a la ubicación en que se ejecuta la función.

Por ejemplo, si ve el archivo desde Londres, intente cambiar la región de la CloudWatch consola a Europa (Londres).

Para examinar CloudWatch los registros de la función Lambda @Edge
  1. Inicie sesión en la CloudWatch consola AWS Management Console y ábrala en https://console.aws.amazon.com/cloudwatch/.

  2. Cambie Región (Región) a la ubicación que se muestra al ver el archivo en el navegador. Aquí es donde se está ejecutando la función.

  3. En el panel izquierdo, elija Logs para ver los logs de la distribución.

Para obtener más información, consulte Monitorización CloudFront de métricas con Amazon CloudWatch.

Paso 7: Elimine los recursos del ejemplo

Si ha creado un bucket y una CloudFront distribución de Amazon S3 solo para este tutorial, elimine los AWS recursos que ha asignado para que no siga acumulando cargos. Después de eliminar los recursos de AWS, el contenido que haya agregado dejará de estar disponible.

Tareas

Elimine el bucket de S3

Antes de eliminar su bucket de Amazon S3, asegúrese de que la función de registro esté desactivada para el bucket. De lo contrario, AWS seguirá escribiendo registros en el bucket mientras lo elimina.

Para deshabilitar el registro en el bucket
  1. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3.

  2. Seleccione el bucket y, luego, seleccione Properties (Propiedades).

  3. En Properties (Propiedades), elija Logging (Registro).

  4. Elimine la selección del recuadro Enabled (Habilitado).

  5. Seleccione Guardar.

Ahora ya puede eliminar el bucket. Para obtener más información, consulte Eliminación de un bucket en la Guía del usuario de la consola de Amazon Simple Storage Service.

Elimine la distribución CloudFront

Antes de eliminar una CloudFront distribución, debe deshabilitarla. Una distribución deshabilitada ya no es funcional y no acumula cargos. Puede habilitar una distribución deshabilitada en cualquier momento. Después de eliminar una distribución deshabilitada, esta deja de estar disponible.

Para deshabilitar y eliminar una distribución de CloudFront
  1. Abra la CloudFront consola enhttps://console.aws.amazon.com/cloudfront/v4/home.

  2. Seleccione la distribución que desea deshabilitar y elija Disable (Deshabilitar).

  3. Cuando se le indique que confirme, seleccione Yes, Disable (Sí, deshabilitar).

  4. Seleccione la distribución desactivada y después Delete (Eliminar).

  5. Cuando se le indique que confirme, seleccione Yes, Delete.

Recursos para obtener más información

Ahora que tiene una idea básica de cómo funcionan las funciones de Lambda@Edge, puede obtener más información leyendo los temas siguientes: