https://a.storyblok.com/f/270183/29307/c3f7822801/blog_send-incoming-sms_1200x600.png

Utilizando o Amazon SQS para enfileirar mensagens com o AWS Lambda e Python

Publicado em November 6, 2020

Tempo de leitura: 9 minutos

Quando se espera receber grandes volumes de mensagens, garantir que todas sejam recebidas pode ser problemático. Uma maneira de contornar essas dificuldades é usar uma fila de mensagens, como o AWS SQS.

Neste exemplo, você criará um microsserviço sem servidor no AWS Lambda usando este aplicativo em Python disponível no GitHub que utiliza o Flaske Serverless. O aplicativo tem duas finalidades: ele insere mensagens no AWS SQS e, em seguida, facilita o envio propriamente dito por meio do SMS da Vonage , conforme solicitado.

Pré-requisitos

Instruções de configuração

Clone o repositório nexmo-community/sms-aws-sqs-python-receiver do GitHub e acesse o diretório recém-criado para continuar.

Meio ambiente

Renomear .env.default para .env e adicione valores a VONAGE_API_KEY e VONAGE_API_SECRET fornecidos pelo seu Painel da API da Vonage.

Configuração da AWS

Você precisará criar credenciais da AWS conforme indicado pelo Serverless. Atualize o .env arquivo com essas informações.

Além disso, crie uma nova fila FIFO do SQS usando as configurações padrão e atualize .env com a URL da fila SQS. O uso do FIFO garante que as mensagens sejam enviadas na ordem em que foram armazenadas.

Uso

Para começar, crie um virtualenv na raiz do projeto para abrigar o projeto à medida que você for avançando. Em seguida, ative-o da seguinte maneira:

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

Em seguida, inicialize o npm e siga as instruções, selecionando as opções padrão. A menos que você queira alterar alguma delas. Além disso, use o npm para instalar as dependências necessárias para o desenvolvimento, a fim de permitir que o Serverless e o Lambda funcionem com o aplicativo Flask.

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

Agora você pode usar o pip para instalar as dependências necessárias do Python. As dependências já estão listadas no arquivo requirements.txt; portanto, indique ao pip que ele deve usá-lo.

pip install -r requirements.txt

Executando localmente

Caso deseje executar o aplicativo localmente e testá-lo antes de implantá-lo no AWS Lambda, você pode executá-lo com o seguinte comando:

sls wsgi serve

Por padrão, isso disponibilizará o aplicativo em http://localhost:5000. Ao clicar em Ctrl+c fechará o aplicativo.

Implantar no Lambda

Depois de concluir com sucesso todas as etapas acima, agora você pode usar Serverless para implantar o aplicativo no AWS Lambda.

sls deploy

IMPORTANTE: Este aplicativo não possui nenhuma autenticação para uso. Portanto, certifique-se de adicionar uma autenticação antes de usá-lo para impedir o uso público. Deixá-lo aberto ao público pode resultar em cobranças pela AWS e pela Vonage.

Pontos de extremidade disponíveis

Existem 4 pontos de extremidade de URL disponíveis neste cliente:

1 solicitação HTTP GET para /

  • Não executa nenhuma ação, mas oferece uma maneira rápida de testar

2. Solicitação HTTP POST para /add

  • Essa ação armazena a mensagem no SQS.

  • Envie uma solicitação POST com um corpo JSON como o seguinte. Substitua os marcadores de lugar, indicados com <> , pelos seus dados.

  • O resultado contém o SQS MessageId.

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

3 Solicitação HTTP GET para /get

  • Recupera a mensagem da fila FIFO do SQS.

  • Assim que for recebido, o ReceiptHandle pode ser usado para removê-lo da fila.

location=None, media_mode=relayed, archive_mode=manual

4 Solicitação HTTP POST para /delete

  • Essa ação exclui a mensagem do SQS.

  • Envie uma solicitação POST com um corpo JSON como o seguinte. Substitua os marcadores de lugar, indicados com <> , pelos seus dados.

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

Acesse a URL fornecida pelo processo de implantação. Veja a seguir alguns exemplos de como podem ser essas solicitações: (Sua URL poderá variar.)

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

O / endpoint retorna a mensagem genérica.

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

O add ponto final retornará o SQS MessageId.

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

O get endpoint retornará uma mensagem para uso.

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

O delete endpoint excluirá uma mensagem do SQS.

Desativando o Virtualenv

Para sair do virtualenv, você pode desativá-lo quando quiser.

deactivate

NOTA: Dependendo do sistema operacional, talvez seja necessário adicionar virtualenv ao comando acima.

Próximos passos

Se você tiver alguma dúvida ou encontrar algum problema, entre em contato com @VonageDev no Twitter ou fazer sua pergunta na Comunidade Vonage no Slack. Boa sorte.

Compartilhar:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam CulpEx-funcionários da Vonage

Adam é um desenvolvedor e consultor que gosta de corridas de ultramaratona, escrever em blogs e gravar vlogs, além de ajudar outras pessoas a dominar a tecnologia para realizar coisas incríveis, movido por um desejo insaciável de orientar e ajudar.