Integre o Amazon API Gateway com o Amazon SQS para lidar com REST assíncrono APIs - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Integre o Amazon API Gateway com o Amazon SQS para lidar com REST assíncrono APIs

Natalia Colantonio Favero e Gustavo Martim, Amazon Web Services

Resumo

Quando você implanta o REST APIs, às vezes você precisa expor uma fila de mensagens que os aplicativos cliente possam publicar. Por exemplo, você pode ter problemas com a latência de terceiros APIs e atrasos nas respostas, ou talvez queira evitar o tempo de resposta das consultas ao banco de dados ou evitar escalar o servidor quando há um grande número de consultas simultâneas. APIs Nesses cenários, as aplicações clientes que publicam dados para a fila só precisam ter ciência de que a API os recebeu, sem precisar saber o que ocorre após o recebimento.

Esse padrão cria um endpoint da API REST usando o Amazon API Gateway para enviar uma mensagem ao Amazon Simple Queue Service (Amazon SQS). Ele cria uma easy-to-implement integração entre os dois serviços que evita o acesso direto à fila do SQS.

Pré-requisitos e limitações

Arquitetura

Arquitetura para integração do API Gateway com o Amazon SQS

O diagrama ilustra estas etapas:

  1. Uma solicitação é enviada a um endpoint da API REST via POST usando uma ferramenta como Postman, outra API ou outras tecnologias.

  2. O API Gateway publica uma mensagem na fila, que é recebida no corpo da solicitação.

  3. O Amazon SQS recebe a mensagem e envia uma resposta ao API Gateway com um código de êxito ou de falha.

Ferramentas

Épicos

TarefaDescriptionHabilidades necessárias

Crie sua fila.

Para criar uma fila do SQS que receba as mensagens provenientes da API REST:

  1. Faça login no Conta da AWS.

  2. Abra o console do Amazon SQS em. https://console.aws.amazon.com/sqs/

  3. Selecione Criar fila.

  4. Na página Criar fila, escolha a correta Região da AWS na lista suspensa Região.

  5. Em Tipo, mantenha a seleção padrão (Padrão).

  6. Insira um Name (Nome) para a fila.

  7. Mantenha os valores padrão para todas as demais configurações.

  8. Selecione Criar fila.

Desenvolvedor de aplicativos
TarefaDescriptionHabilidades necessárias

Criar um perfil do IAM.

Este perfil do IAM concede aos recursos do API Gateway acesso total ao Amazon SQS.

  1. Abra o console do IAM em https://console.aws.amazon.com/iam/.

  2. No painel de navegação, selecione Perfil e então, Criar perfil.

  3. Em Tipo de entidade confiável, escolha AWS service (Serviço da AWS).

  4. Em Caso de uso, escolha API Gateway na lista suspensa e, em seguida, clique em Próximo e em Próximo novamente.

  5. Em Nome da função, insira AWSGatewayRoleForSQS e uma descrição opcional e, em seguida, escolha Criar função.

  6. No painel Roles, pesquise por AWSGatewayRoleForSQS e marque sua caixa de seleção.

  7. Na seção Políticas de permissões, escolha Adicionar permissõesAnexar políticas.

  8. Pesquise o Amazon SQSFull Access e selecione-o.

  9. Escolha Adicionar permissões.

  10. Na seção Resumo do AWSGatewayRoleForSQS, copie o Amazon Resource Number (ARN). Você usará este ID em uma etapa posterior.

Desenvolvedor de aplicações e administrador da AWS
TarefaDescriptionHabilidades necessárias

Crie uma API REST.

Esta é a API REST à qual as solicitações HTTP são enviadas.

  1. Abra o console do API Gateway em https://console.aws.amazon.com/apigateway/.

  2. Na seção API REST, selecione Criar.

  3. Em Nome da API, digite um nome e, se desejar, uma descrição opcional para a API. Mantenha todas as demais configurações como padrão e, em seguida, escolha Criar API.

Desenvolvedor de aplicativos

Estabeleça a conexão entre o API Gateway e o Amazon SQS.

Essa etapa habilita o fluxo da mensagem do conteúdo do corpo da solicitação HTTP para o Amazon SQS.

  1. No console do API Gateway, selecione a API que você criou.

  2. Na página Recursos, na seção Métodos, selecione Criar método.

  3. Em Tipo de método, escolha POST

  4. Em Tipo de integração, escolha AWS service (Serviço da AWS).

  5. Em Região da AWS, selecione a região na qual você criou sua fila do SQS.

  6. Em AWS service (Serviço da AWS), escolha Simple Queue Service (SQS).

  7. Em Método HTTP, selecione POST.

  8. Em Tipo de ação, escolha Usar substituição de caminho.

  9. Em Substituição de caminho, insira <AWS account ID>/<name of SQS queue>.

  10. Em Perfil de execução, cole o ARN do perfil que você criou anteriormente.

  11. Escolha Criar método.

Desenvolvedor de aplicativos
TarefaDescriptionHabilidades necessárias

Teste a API REST.

Faça um teste para identificar configurações que estejam ausentes:

  1. No console do API Gateway, selecione a API REST que você criou.

  2. No painel Recursos, escolha o método POST.

  3. Selecione a guia Testar. (Caso a guia não seja exibida, use a seta para a direita.)

  4. Em Corpo da solicitação, cole o seguinte código JSON:

    { "message": "lorem ipsum" }
  5. Escolha Testar.

    Você receberá um erro semelhante ao seguinte:

    <UnknownOperationException/>
Desenvolvedor de aplicativos

Altere a integração da API para encaminhar a solicitação corretamente para o Amazon SQS.

Conclua a configuração para corrigir o erro de integração:

  1. No console do API Gateway, selecione a API que você criou e, em seguida, escolha POST.

  2. A seção Execução de método mostra o mapeamento visual entre o API Gateway e o Amazon SQS. Nesta seção, selecione Solicitação de integração e, em seguida, escolha Editar.

  3. Expanda a seção Cabeçalhos HTTP e, em seguida, selecione Adicionar parâmetro de cabeçalho de solicitação.

    • Em Nome, especifique Content-Type.

    • Em Mapeado de, insira x-www-form-urlencoded'application/ '. Certifique-se de incluir as aspas simples.

    • Marque a caixa de seleção Armazenamento em cache.

  4. Expanda a seção Modelos de mapeamento.

    • Escolha Add mapping template (Adicionar modelo de mapeamento).

    • Em Tipo de conteúdo, digite application/json.

    • Em Corpo do modelo, cole este código:

      Action=SendMessage&MessageBody=$input.body
    • Escolha Salvar.

Desenvolvedor de aplicativos

Realize o teste e a validação da mensagem no Amazon SQS.

Execute um teste para confirmar que a execução do teste obteve êxito:

  1. No console do API Gateway, selecione a API REST que você criou.

  2. No painel Recursos, escolha o método POST.

  3. Selecione a guia Testar. (Caso a guia não seja exibida, use a seta para a direita.)

  4. Em Corpo da solicitação, cole o seguinte código JSON:

    { "message": "lorem ipsum" }
  5. Escolha Testar.

  6. Abra o console do Amazon SQS.

  7. No painel de navegação, selecione Filas e, em seguida, escolha sua fila.

  8. Escolha Enviar e receber mensagens.

  9. Escolha Poll for messages (Sondagem de mensagens).

  10. Selecione Messagem. O sistema deve mostrar o seguinte:

    Body { "message": "lorem ipsum" }
Desenvolvedor de aplicativos

Teste o API Gateway usando um caractere especial.

Execute um teste que inclua caracteres especiais (como &) que não são aceitos em uma mensagem:

  1. No console do API Gateway, selecione sua API.

  2. Repita o teste realizado na etapa anterior, usando o seguinte código JSON:

    { "message": "lorem ipsum &" }
  3. Escolha Testar.

    Você receberá um erro semelhante ao seguinte:

    { "Error": { "Code": "AccessDenied", "Message": "Access to the resource https://sqs.us-east-2.amazonaws.com/976166761794/Apg2 is denied.", "Type": "Sender" }, "RequestId": "e83c9c67-bcf6-5e9a-91e9-c737094b17ab" }

Isso ocorre porque, por padrão, caracteres especiais não são suportados no corpo da mensagem. Na próxima etapa, você configurará o API Gateway para fornecer suporte a caracteres especiais. Para obter mais informações sobre conversões de tipo de conteúdo, consulte a documentação do API Gateway.

Desenvolvedor de aplicativos

Altere a configuração da API para fornecer suporte a caracteres especiais.

Ajuste a configuração para aceitar caracteres especiais na mensagem:

  1. No console do API Gateway, selecione a API que você criou e, em seguida, escolha POST.

  2. Selecione Solicitação de integração e, depois, Editar.

  3. Altere o campo Manuseio de conteúdo para Converter em texto.

  4. Na seção Modelos de mapeamento:

    • Em Tipo de conteúdo, digite application/json.

    • Em Corpo do modelo, especifique:

      Action=SendMessage&MessageBody=$util.urlEncode($input.body)
    • Escolha Salvar.

  5. Selecione a guia Testar.

  6. Em Corpo da solicitação, insira o código JSON usado anteriormente:

    { " message": "lorem ipsum &" }
  7. Escolha Testar.

  8. Abra o console do Amazon SQS.

  9. Selecione a fila e, em seguida, escolha Enviar e receber mensagens, Pesquisar mensagens e Mensagem como na etapa anterior.

A nova mensagem deverá incluir o caractere especial.

Desenvolvedor de aplicativos
TarefaDescriptionHabilidades necessárias

Implantar a API.

Para implantar a API REST:

  1. Abra o console do API Gateway.

  2. Selecione a API.

  3. Escolha Implantar API. Para obter mais informações sobre esta etapa, consulte a documentação do API Gateway.

Desenvolvedor de aplicativos

Realize o teste usando uma ferramenta externa.

Execute um teste com uma ferramenta externa para confirmar que a mensagem foi recebida com êxito:

  1. Abra uma ferramenta, por exemplo Postman, Insomnia ou cURL.

  2. Execute sua API.

  3. Abra o console do Amazon SQS.

  4. Selecione sua fila.

  5. Carregue a lista de mensagens para conferir a nova mensagem.

Desenvolvedor de aplicativos
TarefaDescriptionHabilidades necessárias

Exclua a API.

No console do API Gateway, selecione a API que você criou e, em seguida, escolha Excluir.

Desenvolvedor de aplicativos

Exclua o perfil do IAM.

No console do IAM, no painel Roles, selecione AWSGatewayRoleForSQS e, em seguida, escolha Delete.

Desenvolvedor de aplicativos

Exclua a fila do SQS.

No console do Amazon SQS, no painel Filas, selecione a fila do SQS que você criou e, em seguida, escolha Excluir.

Desenvolvedor de aplicativos

Recursos relacionados