Habilitación del acceso a Internet para funciones de Lambda conectadas a VPC - AWS Lambda

Habilitación del acceso a Internet para funciones de Lambda conectadas a VPC

De forma predeterminada, las funciones de Lambda se ejecutan en una VPC administrada por Lambda que tiene acceso a Internet. Para acceder a los recursos de una VPC de su cuenta, puede agregar una configuración de VPC a una función. Esto restringe la función a los recursos de esa VPC, a menos que la VPC tenga acceso a Internet. En esta página, se explica cómo proporcionar acceso a Internet a las funciones de Lambda conectadas por VPC.

Creación de la VPC

El Flujo de trabajo de creación de VPC crea todos los recursos de VPC necesarios para que una función de Lambda acceda a la Internet pública desde una subred privada, incluidas las subredes, la puerta de enlace NAT, la puerta de enlace de Internet y las entradas de la tabla de enrutamiento.

Para crear la VPC
  1. Abra la consola de Amazon VPC en https://console.aws.amazon.com/vpc/.

  2. En el panel, elija Crear VPC.

  3. En Recursos para crear, elija VPC y más.

  4. Configurar la VPC

    1. En Generación automática de etiquetas de nombre, ingrese un nombre para la VPC.

    2. En Bloque de CIDR IPv4, puede conservar la sugerencia predeterminada o, como alternativa, ingresar el bloque de CIDR necesario para su aplicación o red.

    3. Si la aplicación se comunica mediante direcciones IPv6, elija Bloque de CIDR IPv6, Bloque de CIDR IPv6 proporcionado por Amazon.

  5. Configurar las subredes

    1. Para Número de zonas de disponibilidad, elija 2. Se recomiendan como mínimo dos AZ para una alta disponibilidad.

    2. Para Número de subredes públicas, elija 2.

    3. Para Número de subredes privadas, elija 2.

    4. Puede conservar el bloque de CIDR predeterminado para la subred pública o, si lo prefiere, puede ampliar Personalizar los bloques de CIDR de la subred e introducir un bloque de CIDR. Para obtener más información, consulte Subred de bloques CIDR.

  6. En Puertas de enlace NAT, elija 1 por AZ para mejorar la resiliencia.

  7. Para Puerta de enlace de Internet de solo salida, elija si optó por incluir un bloque CIDR de IPv6.

  8. En Puntos de conexión de VPC, mantenga el valor predeterminado (Puerta de enlace de S3). Esta opción no tiene ningún costo. Para obtener más información, consulte Tipos de puntos de conexión de VPC de Amazon S3.

  9. Mantenga la configuración predeterminada para las opciones DNS.

  10. Seleccione Crear VPC.

Configuración de la función de Lambda

Para configurar una VPC al crear una función
  1. Abra la página de Functions (Funciones) en la consola de Lambda.

  2. Elija Crear función.

  3. En Basic information (Información básica), para Function name (Nombre de función), escriba un nombre para la función.

  4. Amplíe Configuración avanzada.

  5. Seleccione Habilitar VPC y, a continuación, elija una VPC.

  6. (Opcional) Para permitir el tráfico IPv6 saliente, seleccione Permitir tráfico IPv6 para subredes de doble pila.

  7. En Subredes, seleccione todas las subredes privadas. Las subredes privadas pueden obtener acceso a Internet a través de una puerta de enlace NAT. La conexión de una función a una subred pública no le concede acceso a Internet.

    nota

    Si seleccionó Permitir tráfico IPv6 para subredes de pila doble, todas las subredes seleccionadas deben tener un bloque de CIDR IPv4 y un bloque de CIDR IPv6.

  8. En el caso de los Grupos de seguridad, seleccione un grupo de seguridad que permita el tráfico saliente.

  9. Elija Crear función.

Lambda crea automáticamente un rol de ejecución con la política AWSLambdaVPCAccessExecutionRole administrada por AWS. Los permisos de esta política solo son necesarios para crear interfaces de redes elásticas para la configuración de la VPC, no para invocar la función. Para aplicar permisos con privilegios mínimos, puede eliminar la política AWSLambdaVPCAccessExecutionRole de su rol de ejecución después de crear la función y la configuración de VPC. Para obtener más información, consulte Permisos de IAM necesarios.

Para configurar una VPC para una función existente

Para agregar una configuración de VPC a una función existente, el rol de ejecución de la función debe tener permiso para crear y administrar interfaces de redes elásticas. La política AWSLambdaVPCAccessExecutionRole administrada por AWS incluye los permisos requeridos. Para aplicar permisos con privilegios mínimos, puede eliminar la política AWSLambdaVPCAccessExecutionRole de su rol de ejecución después de crear la configuración de VPC.

  1. Abra la página de Funciones en la consola de Lambda.

  2. Elija una función.

  3. Elija la pestaña Configuración y, a continuación, elija VPC.

  4. En VPC, elija Edit (Editar).

  5. Seleccione la VPC.

  6. (Opcional) Para permitir el tráfico IPv6 saliente, seleccione Permitir tráfico IPv6 para subredes de doble pila.

  7. En Subredes, seleccione todas las subredes privadas. Las subredes privadas pueden obtener acceso a Internet a través de una puerta de enlace NAT. La conexión de una función a una subred pública no le concede acceso a Internet.

    nota

    Si seleccionó Permitir tráfico IPv6 para subredes de pila doble, todas las subredes seleccionadas deben tener un bloque de CIDR IPv4 y un bloque de CIDR IPv6.

  8. En el caso de los Grupos de seguridad, seleccione un grupo de seguridad que permita el tráfico saliente.

  9. Seleccione Guardar.

Prueba de la función

Use el siguiente código de ejemplo para confirmar que su función conectada a VPC puede llegar a la Internet pública. Si se ejecuta correctamente, el código devuelve un código de estado 200. Si no funciona, la función agota el tiempo de espera.

Node.js

En este ejemplo, se utiliza fetch, que está disponible en el tiempo de ejecución de nodejs18.x y posteriores.

  1. En el panel Código fuente de la consola de Lambda, pegue el siguiente código en el archivo index.mjs. La función realiza una solicitud HTTP GET a un punto de conexión público y devuelve el código de respuesta HTTP para comprobar si la función tiene acceso a la Internet pública.

    Editor de código de la consola de Lambda.
    ejemplo — Solicitud HTTP con async/await
    const url = "https://aws.amazon.com/"; export const handler = async(event) => { try { // fetch is available with Node.js 18 and later runtimes const res = await fetch(url); console.info("status", res.status); return res.status; } catch (e) { console.error(e); return 500; } };
  2. Elija Implementar.

  3. Elija la pestaña Prueba.

    Pestaña Prueba de la consola de Lambda.
  4. Seleccione Probar.

  5. La función devuelve un código de estado 200. Esto significa que la función tiene acceso saliente a Internet.

    Pestaña Prueba de la consola de Lambda.

    Si la función no puede acceder a la Internet pública, aparecerá un mensaje de error como este:

    { "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds" }
Python
  1. En el panel Código fuente de la consola de Lambda, pegue el siguiente código en el archivo lambda_function.py. La función realiza una solicitud HTTP GET a un punto de conexión público y devuelve el código de respuesta HTTP para comprobar si la función tiene acceso a la Internet pública.

    Editor de código de la consola de Lambda.
    import urllib.request def lambda_handler(event, context): try: response = urllib.request.urlopen('https://aws.amazon.com') status_code = response.getcode() print('Response Code:', status_code) return status_code except Exception as e: print('Error:', e) raise e
  2. Elija Implementar.

  3. Elija la pestaña Prueba.

    Pestaña Prueba de la consola de Lambda.
  4. Seleccione Probar.

  5. La función devuelve un código de estado 200. Esto significa que la función tiene acceso saliente a Internet.

    Pestaña Prueba de la consola de Lambda.

    Si la función no puede acceder a la Internet pública, aparecerá un mensaje de error como este:

    { "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds" }

Si ya tiene una VPC, pero necesita configurar el acceso público a Internet para una función de Lambda, siga estos pasos. Este procedimiento supone que la VPC tiene, como mínimo, dos subredes. Si no tiene dos subredes, consulte Crear una subred en la Guía del usuario de Amazon VPC.

Verifique la configuración de la tabla de enrutamiento

  1. Abra la consola de Amazon VPC en https://console.aws.amazon.com/vpc/.

  2. Elija el ID de la VPC.

    Lista de VPC de la consola de VPC.
  3. Desplácese hasta la sección Mapa de recursos. Tenga en cuenta las asignaciones de tablas de enrutamiento. Abra cada tabla de enrutamiento que esté mapeada a una subred.

    Sección de mapas de recursos de la consola de VPC
  4. Desplácese hasta la pestaña Rutas. Revise las rutas para determinar si se cumple una de las siguientes opciones. Cada uno de estos requisitos debe cumplirse mediante una tabla de enrutamiento independiente.

    • El tráfico con destino a Internet (0.0.0.0/0 para IPv4, ::/0 para IPv6) se enruta a una puerta de enlace de Internet (igw-xxxxxxxxxx). Esto significa que la subred asociada a la tabla de enrutamiento es una subred pública.

      nota

      Si su subred no tiene un bloque CIDR de IPv6, solo verá la ruta IPv4 (0.0.0.0/0).

      ejemplo tabla de enrutamiento de la subred pública
      Tabla de enrutamiento de subredes públicas con ruta a la puerta de enlace de Internet
    • El tráfico con destino a Internet para IPv4 (0.0.0.0/0) se enruta a una puerta de enlace NAT (nat-xxxxxxxxxx) que está asociada a una subred pública. Esto significa que la subred es privada y puede obtener acceso a Internet a través de una puerta de enlace NAT.

      nota

      Si la subred tiene un bloque de CIDR IPv6, la tabla de enrutamiento también debe direccionar el tráfico IPv6 entrante (::/0) a una puerta de enlace de Internet de solo salida (eigw-xxxxxxxxxx). Si su subred no tiene un bloque CIDR de IPv6, solo verá la ruta IPv4 (0.0.0.0/0).

      ejemplo tabla de enrutamiento de subred privada
      Tabla de enrutamiento de subred privada con ruta a la puerta de enlace NAT
  5. Repita el paso anterior hasta que haya revisado cada tabla de enrutamiento asociada a una subred en su VPC y haya confirmado que tiene una tabla de enrutamiento con una puerta de enlace de Internet y una tabla de enrutamiento con una puerta de enlace NAT.

    Si no tiene dos tablas de enrutamiento, una con una ruta a una puerta de enlace de Internet y otra con una ruta a una puerta de enlace NAT, siga estos pasos para crear los recursos y las entradas de la tabla de enrutamiento que faltan.

Siga estos pasos para crear una tabla de enrutamiento y asociarla a una subred.

Creación de una tabla de enrutamiento personalizada mediante la consola de Amazon VPC
  1. Abra la consola de Amazon VPC en https://console.aws.amazon.com/vpc/.

  2. En el panel de navegación, elija Tablas de enrutamiento.

  3. Elija Create Route Table (Crear tabla de enrutamiento).

  4. (Opcional) En Name (Etiqueta), escriba el nombre de la tabla de enrutamiento.

  5. En VPC, elija su VPC.

  6. (Opcional) Para agregar una etiqueta, elija Add new tag (Agregar etiqueta nueva) e ingrese la clave y el valor de la etiqueta.

  7. Elija Create Route Table (Crear tabla de enrutamiento).

  8. En la pestaña Subnet associations (Asociaciones de subred), elija Edit subnet associations (Editar asociaciones de subred).

    Conectar puerta de enlace de Internet a VPC
  9. Seleccione la casilla de verificación para la subred que desee asociar a la tabla de enrutamiento.

  10. Seleccione Save associations (Guardar asociaciones).

Siga estos pasos para crear una puerta de enlace de Internet, adjuntarla a su VPC y agregarla a la tabla de enrutamiento de la subred pública.

Para crear una puerta de enlace de Internet
  1. Abra la consola de Amazon VPC en https://console.aws.amazon.com/vpc/.

  2. En el panel de navegación, elija Internet Gateways (Puertas de enlace de Internet).

  3. Elija Crear puerta de enlace de Internet.

  4. (Opcional) Ingrese un nombre para la puerta de enlace de Internet.

  5. (Opcional) Para agregar una etiqueta, elija Agregar etiqueta nueva e ingrese la clave y el valor de la etiqueta.

  6. Elija Crear puerta de enlace de Internet.

  7. Elija Asociar a una VPC en el banner de la parte superior de la pantalla, seleccione una VPC disponible y, a continuación, elija Conectar puerta de enlace de Internet.

    Conectar puerta de enlace de Internet a VPC
  8. Elija el ID de la VPC.

    Página de detalles de la puerta de enlace de Internet
  9. Elija el ID de la VPC para abrir la página de detalles de VPC.

    Lista de VPC filtrada
  10. Desplácese hacia abajo hasta la sección Mapa de recursos y, a continuación, elija una subred. Los detalles de la subred se mostrarán en una nueva pestaña.

    Mapa de recursos de la consola de VPC con una lista de subredes.
  11. Elija el enlace en Tabla de enrutamiento.

    Enlace a la tabla de enrutamiento en la página de detalles de la subred
  12. Elija el ID de la tabla de enrutamiento para abrir la página de detalles de la tabla de enrutamiento.

    Lista de tablas de enrutamiento filtrada
  13. En Rutas, elija Editar rutas.

    Lista de rutas con el botón Editar rutas
  14. Seleccione Agregar ruta y, a continuación, introduzca 0.0.0.0/0 en el cuadro Destino.

    Adición de destino para la nueva ruta
  15. En Objetivo, seleccione Puerta de enlace de Internet y, a continuación, elija la puerta de enlace de Internet que creó anteriormente. Si la subred tiene un bloque de CIDR IPv6, también debe agregar una ruta ::/0 para la misma puerta de enlace de Internet.

    Adición de destino para la nueva ruta
  16. Elija Guardar cambios.

Siga estos pasos para crear una puerta de enlace NAT, asociarla a una subred pública y, a continuación, agregarla a la tabla de enrutamiento de la subred privada.

Creación de una puerta de enlace NAT y asociación a una subred pública
  1. En el panel de navegación, elija Puertas de enlace de NAT.

  2. Elija Crear una puerta de enlace de NAT.

  3. (Opcional) Ingrese un nombre para la puerta de enlace NAT.

  4. En Subred, seleccione la subred pública de su VPC. (Una subred pública es una subred que tiene una ruta directa a una puerta de enlace de Internet en su tabla de enrutamiento).

    nota

    Las puertas de enlace NAT están asociadas a una subred pública, pero la entrada de la tabla de enrutamiento se encuentra en la subred privada.

  5. Para el ID de asignación de IP elástica, seleccione una dirección IP elástica o elija Asignar IP elástica.

  6. Elija Crear una puerta de enlace de NAT.

Adición de una ruta a la puerta de enlace NAT en la tabla de enrutamiento de la subred privada
  1. En el panel de navegación, elija Subnets (Subredes).

  2. Seleccione una subred privada en su VPC. (La subred privada es una subred que no dispone de una ruta a una puerta de enlace de Internet en su tabla de enrutamiento).

  3. Elija el enlace en Tabla de enrutamiento.

    Enlace a la tabla de enrutamiento en la página de detalles de la subred
  4. Elija el ID de la tabla de enrutamiento para abrir la página de detalles de la tabla de enrutamiento.

    Lista de tablas de enrutamiento filtrada
  5. Desplácese hacia abajo y elija la pestaña Rutas y, a continuación, Editar rutas

    Pestaña Rutas en la página de detalles de la tabla de enrutamiento
  6. Seleccione Agregar ruta y, a continuación, introduzca 0.0.0.0/0 en el cuadro Destino.

    Adición de destino para la nueva ruta
  7. En Destino, seleccione Puerta de enlace NAT y, a continuación, elija la puerta de enlace NAT que creó anteriormente.

    Adición de destino para la nueva ruta
  8. Elija Guardar cambios.

Siga estos pasos para crear una puerta de enlace de Internet de solo salida y agregar la tabla de enrutamiento de su subred privada.

Para crear una gateway de internet de solo salida
  1. En el panel de navegación, elija Puertas de enlace de Internet de solo salida.

  2. Elija Crear puerta de enlace de Internet de solo salida.

  3. (Opcional) Escriba un nombre.

  4. Seleccione la VPC en la que desea crear el puerto de enlace a Internet de solo salida.

  5. Elija Crear puerta de enlace de Internet de solo salida.

  6. Elija el enlace que aparece en el ID de VPC asociada.

    Página de detalles de la puerta de enlace de Internet de solo salida
  7. Seleccione el enlace en el ID de la VPC para abrir la página de detalles de VPC.

  8. Desplácese hacia abajo hasta la sección Mapa de recursos y, a continuación, elija una subred privada. (La subred privada es una subred que no dispone de una ruta a una puerta de enlace de Internet en su tabla de enrutamiento). Los detalles de la subred se mostrarán en una nueva pestaña.

    Mapa de recursos de la consola de VPC con una lista de subredes.
  9. Elija el enlace en Tabla de enrutamiento.

    Enlace a la tabla de enrutamiento en la página de detalles de la subred
  10. Elija el ID de la tabla de enrutamiento para abrir la página de detalles de la tabla de enrutamiento.

    Lista de tablas de enrutamiento filtrada
  11. En Rutas, elija Editar rutas.

    Lista de rutas con el botón Editar rutas
  12. Seleccione Agregar ruta y, a continuación, introduzca ::/0 en el cuadro Destino.

    Adición de destino para la nueva ruta
  13. En Destino, seleccione Puerta de enlace de Internet de solo salida y, a continuación, elija la puerta de enlace que creó anteriormente.

    Adición de destino para la nueva ruta
  14. Elija Guardar cambios.

Configuración de la función de Lambda

Para configurar una VPC al crear una función
  1. Abra la página de Functions (Funciones) en la consola de Lambda.

  2. Elija Crear función.

  3. En Basic information (Información básica), para Function name (Nombre de función), escriba un nombre para la función.

  4. Amplíe Configuración avanzada.

  5. Seleccione Habilitar VPC y, a continuación, elija una VPC.

  6. (Opcional) Para permitir el tráfico IPv6 saliente, seleccione Permitir tráfico IPv6 para subredes de doble pila.

  7. En Subredes, seleccione todas las subredes privadas. Las subredes privadas pueden obtener acceso a Internet a través de una puerta de enlace NAT. La conexión de una función a una subred pública no le concede acceso a Internet.

    nota

    Si seleccionó Permitir tráfico IPv6 para subredes de pila doble, todas las subredes seleccionadas deben tener un bloque de CIDR IPv4 y un bloque de CIDR IPv6.

  8. En el caso de los Grupos de seguridad, seleccione un grupo de seguridad que permita el tráfico saliente.

  9. Elija Crear función.

Lambda crea automáticamente un rol de ejecución con la política AWSLambdaVPCAccessExecutionRole administrada por AWS. Los permisos de esta política solo son necesarios para crear interfaces de redes elásticas para la configuración de la VPC, no para invocar la función. Para aplicar permisos con privilegios mínimos, puede eliminar la política AWSLambdaVPCAccessExecutionRole de su rol de ejecución después de crear la función y la configuración de VPC. Para obtener más información, consulte Permisos de IAM necesarios.

Para configurar una VPC para una función existente

Para agregar una configuración de VPC a una función existente, el rol de ejecución de la función debe tener permiso para crear y administrar interfaces de redes elásticas. La política AWSLambdaVPCAccessExecutionRole administrada por AWS incluye los permisos requeridos. Para aplicar permisos con privilegios mínimos, puede eliminar la política AWSLambdaVPCAccessExecutionRole de su rol de ejecución después de crear la configuración de VPC.

  1. Abra la página de Funciones en la consola de Lambda.

  2. Elija una función.

  3. Elija la pestaña Configuración y, a continuación, elija VPC.

  4. En VPC, elija Edit (Editar).

  5. Seleccione la VPC.

  6. (Opcional) Para permitir el tráfico IPv6 saliente, seleccione Permitir tráfico IPv6 para subredes de doble pila.

  7. En Subredes, seleccione todas las subredes privadas. Las subredes privadas pueden obtener acceso a Internet a través de una puerta de enlace NAT. La conexión de una función a una subred pública no le concede acceso a Internet.

    nota

    Si seleccionó Permitir tráfico IPv6 para subredes de pila doble, todas las subredes seleccionadas deben tener un bloque de CIDR IPv4 y un bloque de CIDR IPv6.

  8. En el caso de los Grupos de seguridad, seleccione un grupo de seguridad que permita el tráfico saliente.

  9. Seleccione Guardar.

Prueba de la función

Use el siguiente código de ejemplo para confirmar que su función conectada a VPC puede llegar a la Internet pública. Si se ejecuta correctamente, el código devuelve un código de estado 200. Si no funciona, la función agota el tiempo de espera.

Node.js

En este ejemplo, se utiliza fetch, que está disponible en el tiempo de ejecución de nodejs18.x y posteriores.

  1. En el panel Código fuente de la consola de Lambda, pegue el siguiente código en el archivo index.mjs. La función realiza una solicitud HTTP GET a un punto de conexión público y devuelve el código de respuesta HTTP para comprobar si la función tiene acceso a la Internet pública.

    Editor de código de la consola de Lambda.
    ejemplo — Solicitud HTTP con async/await
    const url = "https://aws.amazon.com/"; export const handler = async(event) => { try { // fetch is available with Node.js 18 and later runtimes const res = await fetch(url); console.info("status", res.status); return res.status; } catch (e) { console.error(e); return 500; } };
  2. Elija Implementar.

  3. Elija la pestaña Prueba.

    Pestaña Prueba de la consola de Lambda.
  4. Seleccione Probar.

  5. La función devuelve un código de estado 200. Esto significa que la función tiene acceso saliente a Internet.

    Pestaña Prueba de la consola de Lambda.

    Si la función no puede acceder a la Internet pública, aparecerá un mensaje de error como este:

    { "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds" }
Python
  1. En el panel Código fuente de la consola de Lambda, pegue el siguiente código en el archivo lambda_function.py. La función realiza una solicitud HTTP GET a un punto de conexión público y devuelve el código de respuesta HTTP para comprobar si la función tiene acceso a la Internet pública.

    Editor de código de la consola de Lambda.
    import urllib.request def lambda_handler(event, context): try: response = urllib.request.urlopen('https://aws.amazon.com') status_code = response.getcode() print('Response Code:', status_code) return status_code except Exception as e: print('Error:', e) raise e
  2. Elija Implementar.

  3. Elija la pestaña Prueba.

    Pestaña Prueba de la consola de Lambda.
  4. Seleccione Probar.

  5. La función devuelve un código de estado 200. Esto significa que la función tiene acceso saliente a Internet.

    Pestaña Prueba de la consola de Lambda.

    Si la función no puede acceder a la Internet pública, aparecerá un mensaje de error como este:

    { "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds" }