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

Criado por Natalia Colantonio Favero (AWS) e Gustavo Martim (AWS)

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, os aplicativos cliente que publicam na fila só precisam saber que a API recebeu os dados, não o que acontece depois que os dados são recebidos.

Esse padrão cria um endpoint da API REST usando o Amazon API Gateway para enviar uma mensagem para o 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 integrar o API Gateway com o Amazon SQS

O diagrama ilustra essas etapas:

  1. Solicite um endpoint da API POST REST usando uma ferramenta como o Postman, outra API ou outras tecnologias.

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

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

Ferramentas

Épicos

TarefaDescriçãoHabilidades necessárias

Crie sua fila.

Para criar uma fila SQS que receba as mensagens 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. Para Tipo, mantenha a configuração padrão (Padrão).

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

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

  8. Selecione Criar fila.

Desenvolvedor de aplicativos
TarefaDescriçãoHabilidades necessárias

Criar um perfil do IAM.

Essa função do IAM dá 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 escolha Avançar, Avançar.

  5. Em Nome da função, insira AWSGatewayRoleForSQS e uma descrição opcional e 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á esse ID em uma etapa posterior.

Desenvolvedor de aplicativos, administrador da AWS
TarefaDescriçãoHabilidades necessárias

Crie uma API REST.

Essa é a API REST para a 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, escolha Construir.

  3. Em Nome da API, insira um nome e uma descrição opcional para sua API, mantenha todas as outras configurações padrão e escolha Criar API.

Desenvolvedor de aplicativos

Conecte o API Gateway ao Amazon SQS.

Essa etapa permite que a mensagem flua de dentro do corpo da solicitação HTTP para o Amazon SQS.

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

  2. Na página Recursos, na seção Métodos, escolha 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. Para Região da AWS, escolha a região em que você criou sua fila SQS.

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

  7. Para o método HTTP, escolha POST.

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

  9. <name of SQS queue>Em Path override, insira/<AWS account ID>.

  10. Em Função de execução, cole o ARN da função que você criou anteriormente.

  11. Escolha Criar método.

Desenvolvedor de aplicativos
TarefaDescriçãoHabilidades necessárias

Teste a API REST.

Execute um teste para verificar a falta de configuração:

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

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

  3. Selecione a guia Testar. (Use a seta para a direita se a guia não for exibida.)

  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, escolha a API que você criou e, em seguida, escolha POST.

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

  3. Expanda a seção de cabeçalhos HTTP e escolha o parâmetro Adicionar cabeçalho de solicitação.

    • Em Nome, especifique Content-Type.

    • Em Mapeado de, digite 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, insira application/json.

    • Para o corpo do modelo, cole este código:

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

Desenvolvedor de aplicativos

Teste e valide a mensagem no Amazon SQS.

Execute um teste para confirmar que o teste foi concluído com êxito:

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

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

  3. Selecione a guia Testar. (Use a seta para a direita se a guia não for exibida.)

  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, escolha Filas e escolha sua fila.

  8. Escolha Enviar e receber mensagens.

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

  10. Selecione Messagem. Ele deve exibir o seguinte:

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

Teste o API Gateway com um caractere especial.

Execute um teste que inclua caracteres especiais (como &) que não sejam aceitáveis em uma mensagem:

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

  2. Repita o teste da etapa anterior usando o seguinte código JSON:

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

    Você receberá um erro como o 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 caracteres especiais não são suportados por padrão no corpo da mensagem. Na próxima etapa, você configurará o API Gateway para oferecer 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 oferecer suporte a caracteres especiais.

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

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

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

  3. Altere o tratamento de conteúdo para converter em texto.

  4. Na seção Modelos de mapeamento:

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

    • Para 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 anterior:

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

  8. Abra o console do Amazon SQS.

  9. Selecione sua fila e, em seguida, escolha Enviar e receber mensagens, Sondagem de mensagens, Mensagem como anteriormente.

A nova mensagem deve incluir o caractere especial.

Desenvolvedor de aplicativos
TarefaDescriçãoHabilidades 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 essa etapa, consulte a documentação do API Gateway.

Desenvolvedor de aplicativos

Teste com uma ferramenta externa.

Execute um teste com uma ferramenta externa para confirmar se a mensagem foi recebida com sucesso:

  1. Abra uma ferramenta como Postman, Insomnia ou cURL.

  2. Execute sua API.

  3. Abra o console do Amazon SQS.

  4. Selecione sua fila.

  5. Carregue mensagens para ver a nova mensagem.

Desenvolvedor de aplicativos
TarefaDescriçãoHabilidades necessárias

Exclua a API.

No console do API Gateway, escolha 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 escolha Delete.

Desenvolvedor de aplicativos

Exclua a fila SQS.

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

Desenvolvedor de aplicativos

Recursos relacionados