Tutorial: Desarrollo de una API de REST Hello World con integración de proxy de Lambda - Amazon API Gateway

Tutorial: Desarrollo de una API de REST Hello World con integración de proxy de Lambda

La integración de proxy de Lambda es un tipo de integración de API de API Gateway ligera y flexible que le permite integrar un método de API, o la totalidad de la API, con una función de Lambda. La función de Lambda se puede escribir en cualquier lenguaje que admitida Lambda. Debido a que se trata de una integración de proxy, puede cambiar la implementación de la función de Lambda en cualquier momento sin tener que volver a implementar la API.

En este tutorial, aprenderá a hacer lo siguiente:

  • Creación de una función Hello, World! Función de Lambda para que sea el backend de la API.

  • Creación y prueba de una función "Hello, World!" API con integración de proxy de Lambda.

Creación de una función Hello, World! Función de Lambda

Para crear un "Hello, World!" Función de Lambda en la consola de Lambda
  1. Inicie sesión en la consola de Lambda en https://console.aws.amazon.com/lambda/.

  2. En la barra de navegación de AWS, elija una Región de AWS.

    nota

    Anote la región en la que ha creado la función de Lambda. La necesitará al crear la API.

  3. Elija Functions (Funciones) en el panel de navegación.

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

  5. Elija Author from scratch (Crear desde cero).

  6. Bajo Basic information (Información básica), haga lo siguiente:

    1. Bajo Function name (Nombre de función), escriba GetStartedLambdaProxyIntegration.

    2. En Tiempo de ejecución, elija el último tiempo de ejecución de Node.js o Python compatible.

    3. En Permissions (Permisos), expanda Change default execution role(Cambiar rol de ejecución predeterminado). En Rol de ejecución, elija Crear un nuevo rol desde las plantillas de políticas de AWS.

    4. En Role name (Nombre del rol), escriba GetStartedLambdaBasicExecutionRole.

    5. Deje el campo Policy templates (Plantillas de política) en blanco.

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

  7. En Function code (Código de la función), en el editor de código integrado, copie/pegue el código siguiente:

    Node.js
    export const handler = function(event, context, callback) { console.log('Received event:', JSON.stringify(event, null, 2)); var res ={ "statusCode": 200, "headers": { "Content-Type": "*/*" } }; var greeter = 'World'; if (event.greeter && event.greeter!=="") { greeter = event.greeter; } else if (event.body && event.body !== "") { var body = JSON.parse(event.body); if (body.greeter && body.greeter !== "") { greeter = body.greeter; } } else if (event.queryStringParameters && event.queryStringParameters.greeter && event.queryStringParameters.greeter !== "") { greeter = event.queryStringParameters.greeter; } else if (event.multiValueHeaders && event.multiValueHeaders.greeter && event.multiValueHeaders.greeter != "") { greeter = event.multiValueHeaders.greeter.join(" and "); } else if (event.headers && event.headers.greeter && event.headers.greeter != "") { greeter = event.headers.greeter; } res.body = "Hello, " + greeter + "!"; callback(null, res); };
    Python
    import json def lambda_handler(event, context): print(event) greeter = 'World' try: if (event['queryStringParameters']) and (event['queryStringParameters']['greeter']) and ( event['queryStringParameters']['greeter'] is not None): greeter = event['queryStringParameters']['greeter'] except KeyError: print('No greeter') try: if (event['multiValueHeaders']) and (event['multiValueHeaders']['greeter']) and ( event['multiValueHeaders']['greeter'] is not None): greeter = " and ".join(event['multiValueHeaders']['greeter']) except KeyError: print('No greeter') try: if (event['headers']) and (event['headers']['greeter']) and ( event['headers']['greeter'] is not None): greeter = event['headers']['greeter'] except KeyError: print('No greeter') if (event['body']) and (event['body'] is not None): body = json.loads(event['body']) try: if (body['greeter']) and (body['greeter'] is not None): greeter = body['greeter'] except KeyError: print('No greeter') res = { "statusCode": 200, "headers": { "Content-Type": "*/*" }, "body": "Hello, " + greeter + "!" } return res
  8. Elija Deploy (Implementar).

Creación de una función Hello, World! API

Ahora cree una API para la función de Lamba "Hello, World!" La función de Lambda utilizando la consola de API Gateway.

Para crear un "Hello, World!" API
  1. Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway.

  2. Si es la primera vez que utiliza API Gateway, verá una página en la que aparecen las características del servicio. En REST API, elija Build (Compilación). Cuando aparezca el menú emergente Create Example API (Crear API de ejemplo), elija OK (Aceptar).

    Si esta no es la primera vez que utiliza API Gateway, elija Create API (Crear API). En REST API, elija Build (Compilación).

  3. En API name (Nombre de la API), escribaLambdaProxyAPI.

  4. (Opcional) En Description (Descripción), introduzca una descripción.

  5. Mantenga Tipo de punto de conexión de la API establecido en Regional.

  6. Seleccione Crear API.

Después de crear una API, se crea un recurso. Normalmente, los recursos de la API están organizados en un árbol de recursos de acuerdo con la lógica de la aplicación. Para este ejemplo, creará un recurso /helloworld.

Para crear un recurso
  1. Seleccione el recurso / y, a continuación, elija Crear recurso.

  2. Mantenga Recurso proxy desactivado.

  3. Mantenga Ruta del recurso en /.

  4. En Nombre del recurso, escriba helloworld.

  5. Mantenga desactivado CORS (uso compartido de recursos entre orígenes).

  6. Elija Crear recurso.

En una integración de proxy, toda la solicitud se envía a la función de Lambda del backend tal y como está, a través de un método catch-all ANY que representa cualquier método HTTP. El método HTTP real lo especifica el cliente en tiempo de ejecución. El método ANY le permite usar una sola configuración de métodos de API para todos los métodos HTTP admitidos: DELETE, GET, HEAD, OPTIONS, PATCH, POST y PUT.

Para crear un método ANY
  1. Seleccione el recurso /helloworld y, a continuación, elija Crear método.

  2. En Tipo de método, seleccione CUALQUIERA.

  3. En Tipo de integración, seleccione Función de Lambda.

  4. Active Integración de proxy de Lambda.

  5. En Función de Lambda, seleccione la Región de AWS en la que creó la función de Lambda y, a continuación, introduzca el nombre de la función.

  6. Si desea utilizar el valor predeterminado del tiempo de espera, que es de 29 segundos, mantenga activado el Tiempo de espera predeterminado. Para establecer un tiempo de espera personalizado, elija Tiempo de espera predeterminado e ingrese un valor de tiempo de espera comprendido entre 50 y 29000 milisegundos.

  7. Elija Crear método.

Implementación y pruebas de API

Para implementar su API
  1. Elija Deploy API (Implementar API).

  2. En Etapa, seleccione Nueva etapa.

  3. En Stage name (Nombre de etapa), escriba test.

  4. (Opcional) En Description (Descripción), introduzca una descripción.

  5. Elija Implementar.

  6. En Detalles de la etapa, elija el icono de copia para copiar la URL de invocación de la API.

Uso del navegador y cURL para probar una API con integración de proxy de Lambda

Puede utilizar un navegador o cURL para probar la API.

Para probar solicitudes GET mediante solo los parámetros de cadena de consulta, puede ingresar la URL para el recurso helloworld de la API en la barra de direcciones del navegador.

Para crear la URL del recurso helloworld de la API, agregue el recurso helloworld y el parámetro de cadena de consulta ?greeter=John a la URL de invocación. La URL debería tener el siguiente aspecto.

https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld?greeter=John

Para otros métodos, debe utilizar utilidades de prueba de la API de REST más avanzadas, tales como POSTMAN o cURL. En este tutorial se utiliza cURL. Los ejemplos de comandos de cURL que aparecen a continuación se presupone que cURL está instalado en su equipo.

Para probar la API implementada mediante cURL:
  1. Abra una ventana de terminal.

  2. Copie el siguiente comando cURL y péguelo en la ventana de terminal. Sustituya la URL de invocación por la que copió en el paso anterior y añada /helloworld al final de la URL.

    nota

    Si está ejecutando el comando en Windows, utilice esta sintaxis:

    curl -v -X POST "https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld" -H "content-type: application/json" -d "{ \"greeter\": \"John\" }"
    1. Para llamar a la API con el parámetro de cadena de consulta de ?greeter=John:

      curl -X GET 'https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld?greeter=John'
    2. Para llamar a la API con el parámetro de encabezado de greeter:John:

      curl -X GET https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld \ -H 'content-type: application/json' \ -H 'greeter: John'
    3. Para llamar a la API con un cuerpo de {"greeter":"John"}:

      curl -X POST https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld \ -H 'content-type: application/json' \ -d '{ "greeter": "John" }'

    En todos estos casos, la salida es una respuesta 200 con el siguiente cuerpo de respuesta:

    Hello, John!