https://d226lax1qjow5r.cloudfront.net/blog/blogposts/using-amazon-sqs-for-queuing-messages-using-aws-lambda-and-python/Blog_Send-Incoming-SMS_1200x600.png

Uso de Amazon SQS para poner en cola mensajes con AWS Lambda y Python

Publicado el November 6, 2020

Tiempo de lectura: 9 minutos

Cuando se espera recibir grandes cantidades de mensajes, asegurarse de que se reciben todos puede ser problemático. Una forma de sortear estos escollos es utilizar una cola de mensajes, como AWS SQS.

En este ejemplo, crearás un microservicio sin servidor en AWS Lambda utilizando esta aplicación Python disponible en Github que utiliza Flasky sin servidor. La aplicación tiene dos propósitos: Añade mensajes a AWS SQS y luego facilita el envío real a través de Vonage SMS según lo solicitado.

Requisitos previos

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

Instrucciones de instalación

Clonar el nexmo-community/sms-aws-sqs-python-receiver de GitHub y navega hasta el directorio recién creado para continuar.

Medio ambiente

Cambie el nombre de .env.default a .env y añada valores a VONAGE_API_KEY y VONAGE_API_SECRET proporcionados por su Panel de API de Vonage.

Configuración de AWS

Deberá crear credenciales de AWS como indica Serverless. Actualice el .env con estas credenciales.

Además, cree una nueva cola SQS FIFO utilizando la configuración predeterminada y actualice .env con la URL de la cola SQS. Al utilizar FIFO, garantiza que los mensajes se envían en el orden en que se almacenaron.

Utilización

Para empezar, cree un virtualenv dentro de la raíz del proyecto para contener el proyecto a medida que avanza. A continuación, actívelo de la siguiente manera:

virtualenv venv --python=python3 source venv/bin/activate

A continuación, inicialice npm y siga las indicaciones seleccionando los valores predeterminados. A menos que desees cambiar alguno de ellos. Además, utiliza npm para instalar las dependencias necesarias para dev para permitir que Serverless y Lambda funcionen con la aplicación Flask.

npm init npm install --save-dev serverless-wsgi serverless-python-requirements

Ahora puede utilizar pip para instalar las dependencias de Python necesarias. Las dependencias ya están listadas en el requirements.txt, así que indica a pip que las use.

pip install -r requirements.txt

Correr localmente

Si desea ejecutar la aplicación localmente y probar las cosas, antes de implementar en AWS Lambda, puede servirla con el siguiente comando:

sls wsgi serve

Por defecto, la aplicación se servirá en http://localhost:5000. Si pulsa Ctrl+c se cerrará.

Despliegue en Lambda

Con todo lo anterior terminado con éxito, ahora puede utilizar Serverless para desplegar la aplicación en AWS Lambda.

sls deploy

IMPORTANTE: Esta aplicación no contiene ninguna autenticación para su uso. Por lo tanto, asegúrate de agregar autenticación delante de ella para evitar el uso público. Al dejarla abierta al público, podría dar lugar a cargos por uso en AWS y Vonage.

Puntos finales disponibles

Hay 4 puntos finales de URL disponibles con este cliente:

1 Petición HTTP GET a /

  • No realiza ninguna acción, pero proporciona una forma rápida de probar

2 Solicitud HTTP POST a /add

  • Esta acción almacena el mensaje en SQS.

  • Pase un POST con un cuerpo JSON como el siguiente. Sustituya los marcadores de posición, indicados con <> con sus datos.

  • El resultado contiene el SQS MessageId.

{
    "from": "<your_name_or_number>",
    "message": "<sms_message_contents>",
    "to": "<recipients_number>"
}

3 Petición HTTP GET a /get

  • Recupera el mensaje de la cola SQS FIFO.

  • Una vez recibido, el botón ReceiptHandle se puede utilizar para eliminarlo de la cola.

location=None, media_mode=relayed, archive_mode=manual

4 Solicitud HTTP POST a /delete

  • Esta acción borra el mensaje de SQS.

  • Pase un POST con un cuerpo JSON como el siguiente. Sustituya los marcadores de posición, indicados con <> con sus datos.

{
    "receipt_handle": "<your_receipt_handle>",
}
Ejemplos:

Vaya a la URL proporcionada por el proceso de despliegue. A continuación se muestran algunos ejemplos de solicitudes de muestra: (Su URL variará.)

GET https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/

El punto final / devuelve el mensaje genérico.

POST https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/add

El punto final add devolverá el SQS MessageId.

GET https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/get

El punto final get endpoint devolverá un mensaje para su uso.

GET https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/delete

La dirección delete borrará un mensaje de SQS.

Desactivar Virtualenv

Para salir del virtualenv puede desactivarlo, cuando lo desee.

deactivate

NOTA: Dependiendo del sistema operativo, puede que tenga que anteponer virtualenv al comando anterior.

Próximos pasos

Si tiene alguna pregunta o se encuentra con problemas, puede ponerse en contacto con @VonageDev en Twitter o consultar en la Comunidad de Vonage en Slack. Buena suerte.

Compartir:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam CulpAntiguos alumnos de Vonage

Adam es un desarrollador y consultor al que le gusta correr a toda velocidad, bloguear y ayudar a otros a domar la tecnología para conseguir cosas increíbles, con un deseo insaciable de servir de mentor y ayudar.