Tutorial: creación de una función de Lambda@Edge básica - Amazon CloudFront

Tutorial: creación de una función de Lambda@Edge básica

En este tutorial, se muestra cómo comenzar a utilizar Lambda@Edge mediante la creación y configuración de una función de Node.js de ejemplo que se ejecuta en CloudFront. En el ejemplo se agregan encabezados HTTP de seguridad a una respuesta cuando CloudFront recupera un archivo. (Esto puede mejorar la seguridad y la privacidad de un sitio web).

No necesita su propio sitio web para este tutorial. Sin embargo, si decide crear su propia solución de Lambda@Edge, seguirá pasos similares y elegirá entre las mismas opciones.

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

Si aún no lo ha hecho, regístrese para conseguir una Cuenta de AWS. Para obtener más información, consulte Registro en una Cuenta de AWS.

Paso 2: Cree una distribución de CloudFront

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

En este ejemplo, creará una distribución de CloudFront 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 distribución de CloudFront con un origen de 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 distribución de CloudFront y agregue el bucket de S3 como un origen, siguiendo los pasos que se describen Crear una distribución web de CloudFront. 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, al agregar un desencadenador de CloudFront para la función, debe 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 esquema en la consola de Lambda. La función agrega código para actualizar los encabezados de seguridad de su distribución de CloudFront.

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 de AWS Este de EE. UU.-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 Create function (Crear función), elija Use a blueprint (Usar un proyecto) y, a continuación, filtre los proyectos de CloudFront especificando cloudfront en el campo de búsqueda.

    nota

    Los proyectos de CloudFront solo están disponibles en la región US-East-1 (N. Virginia) (EE. UU. Este (Norte de Virginia) (us-east-1).

  4. Elija el esquema Modificar encabezado de respuesta HTTP como la plantilla para la función.

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

    Nombre de la función

    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 la plantilla de política Permisos básicos de Lambda@Edge, ya que usted ha elegido un esquema de CloudFront como base de la función. Esta plantilla de política agrega permisos de rol de ejecución que permiten a CloudFront ejecutar su función de Lambda en ubicaciones de CloudFront en 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).

  7. En el panel Implementar en Lambda@Edge que aparece, elija Cancelar. (Para este tutorial, debe modificar el código de la función antes de implementarla en Lambda@Edge).

  8. Desplácese hacia abajo hasta la sección Código fuente.

  9. 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.request; 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); };
  10. Elija Archivo, Guardar para guardar el código actualizado.

Continúe con la siguiente sección para agregar un desencadenador de CloudFront para ejecutar la función.

Paso 4: Agregue un desencadenador de CloudFront para ejecutar la función

Ahora que tiene una función de Lambda para actualizar los encabezados de seguridad, configure el desencadenador de CloudFront para ejecutar la función que va a agregar los encabezados a cualquier respuesta que CloudFront reciba desde el origen de la distribución.

Para configurar el desencadenador CloudFront para su función
  1. En la consola de Lambda, en la página Información general de la función de la función, seleccione Agregar desencadenador.

  2. En Configuración del desencadenador, elija CloudFront.

  3. Elija Implementar en Lambda @Edge.

  4. En el panel Implementar en Lambda@Edge, en Configurar desencadenador de CloudFront, escriba lo siguiente:

    Distribución

    El ID de distribución de CloudFront que se debe 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 Referencia de configuración de la distribución.

    Evento CloudFront

    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 desde el origen. Por lo tanto, en la lista desplegable, elija Respuesta de origen. Para obtener más información, consulte Adición de desencadenadores para una función de Lambda@Edge.

  5. Seleccione la casilla de verificación Confirmar implementación en Lambda @Edge.

  6. Seleccione Deploy (Implementar) para añadir el desencadenador y replicar la función a ubicaciones de AWS en todo el mundo.

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

    Para comprobar si la replicación ha terminado, vaya a la consola de CloudFront y consulte la distribución. Espere a que el estado de la distribución cambie de Implementando a una fecha y hora, 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 de Lambda y que ha configurado un desencadenador para que la ejecute en una distribución de CloudFront, asegúrese de que la función se comporta según lo previsto. En este ejemplo, comprobamos los encabezados HTTP que devuelve CloudFront, para asegurarnos de que se agregan 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 dominio de CloudFront que se debe utilizar en la URL del archivo, consulte Personalización del formato de URL para 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 algún error o hay otros problemas, continúe con el paso siguiente para solucionar los problemas.

Paso 6: Solucione problemas

Si CloudFront devuelve errores o no agrega los encabezados de seguridad según lo previsto, puede investigar la ejecución de la función consultando los CloudWatch Logs. 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, pruebe a cambiar la región en la consola de CloudWatch a UE (Londres).

Para examinar los registros de CloudWatch para su función de Lambda@Edge
  1. Inicie sesión en la AWS Management Console y abra la consola de CloudWatch 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 Monitoreo de métricas de CloudFront con Amazon CloudWatch.

Paso 7: Elimine los recursos del ejemplo

Si ha creado un bucket de Amazon S3 y una distribución de CloudFront solo para este tutorial, elimine los recursos de AWS asignados para que no se le apliquen 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.

Para eliminar la función de Lambda

Para obtener instrucciones sobre cómo eliminar la asociación de función de Lambda y, opcionalmente, la propia función, consulte Eliminación de réplicas y funciones de Lambda@Edge.

Eliminar la distribución de CloudFront

Antes de eliminar una distribución de CloudFront, debe desactivarla. 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 desactivar y eliminar una distribución de CloudFront, realice las siguientes acciones:
  1. Abra la consola de CloudFront en https://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: