将 Amazon API Gateway 与亚马逊集成SQS以处理异步问题 REST APIs - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 Amazon API Gateway 与亚马逊集成SQS以处理异步问题 REST APIs

由纳塔利娅·科兰托尼奥·法维罗 (AWS) 和古斯塔沃·马蒂姆 () 创作 AWS

摘要

部署时 RESTAPIs,有时需要公开客户端应用程序可以发布的消息队列。例如,您可能遇到第三方延迟APIs和响应延迟的问题,或者您可能希望避免数据库查询的响应时间,或者避免在存在大量并发请求时扩展服务器APIs。在这些情况下,发布到队列的客户端应用程序只需要知道自己API已收到数据,而不是在收到数据后会发生什么。

此模式通过使用 Amazon API Gateway 向亚马逊简单队列服务 (AmazonSQS) 发送消息来创建RESTAPI终端节点。它在两个服务之间创建了 easy-to-implement集成,从而避免了对SQS队列的直接访问。

先决条件和限制

架构

Gate API way 与 Amazon 集成的架构 SQS

该图说明了以下步骤:

  1. 使用 Postman、其他或其他技术等工具请求POSTRESTAPI端点。API

  2. APIGateway 在队列中发布一条消息,该消息在请求的正文中接收。

  3. Amazon SQS 收到消息并向 Gate API way 发送答案,并附上成功或失败代码。

工具

操作说明

任务描述所需技能

创建队列。

要创建接收来自的消息的SQS队列,请执行以下RESTAPI操作:

  1. 登录到您的 AWS 账户

  2. 打开 Amazon SQS 控制台,网址为https://console.aws.amazon.com/sqs/

  3. 选择创建队列

  4. 在 “创建队列” 页面上, AWS 区域 从 “区域” 下拉列表中选择正确的队列。

  5. 对于 “类型”,保留默认设置(标准)。

  6. 输入队列的名称

  7. 保留所有其他设置的默认值。

  8. 选择创建队列

应用程序开发人员
任务描述所需技能

创建一个 IAM 角色。

此IAM角色赋予API网关资源对 Amazon 的完全访问权限SQS。

  1. 从 IAM 打开 https://console.aws.amazon.com/iam/ 控制台。

  2. 在导航窗格中,选择 Roles(角色)和 Create role(创建角色)。

  3. 对于 Trusted entity type(可信实体类型),选择 AWS 服务

  4. 对于 “用例”,从下拉列表中选择 “API网关”,然后选择 “下一步”、“下一步”。

  5. 角色名称中,输入AWSGatewayRoleForSQS和可选描述,然后选择创建角色

  6. 在 “角色” 窗格中 AWSGatewayRoleForSQS,搜索并选中其复选框。

  7. 权限策略部分中,选择添加权限附加策略

  8. 搜索 A A mazonSQSFull cces s 并将其选中。

  9. 选择添加权限

  10. 在的 “摘要” 部分 AWSGatewayRoleForSQS,复制 Amazon 资源编号 (ARN)。您将在后面的步骤中使用此 ID。

应用程序开发者、AWS管理员
任务描述所需技能

创建一个 RESTAPI.

这是向RESTAPI其发送HTTP请求的。

  1. 打开API网关控制台,网址为https://console.aws.amazon.com/apigateway/

  2. 在该RESTAPI部分中,选择构建。

  3. 在 “API名称” 中,输入您的姓名和可选描述API,保留所有其他默认设置,然后选择 “创建” API。

应用程序开发人员

将 API Gateway 连接到亚马逊SQS。

此步骤允许消息从HTTP请求正文内部流向 Amazon SQS。

  1. API网关控制台上API,选择您创建的。

  2. 在 “资源” 页面的 “方法” 部分,选择 “创建方法”。

  3. 对于方法类型,选择 POST。 

  4. 对于集成类型,选择AWS 服务

  5. 对于 AWS 区域,请选择您创建SQS队列的区域。

  6. 对于 AWS 服务,选择简单队列服务 (SQS)

  7. 对于HTTP方法,请选择POST

  8. 对于 “操作类型”,选择 “使用路径覆盖”

  9. 对于路径覆盖,输入 < AWS 账户 ID>/< 队列名称>。SQS

  10. 对于执行角色,ARN粘贴您之前创建的角色。

  11. 选择创建方法

应用程序开发人员
任务描述所需技能

测试 RESTAPI.

运行测试以检查是否缺少配置:

  1. API网关控制台上 RESTAPI,选择您创建的。

  2. 资源窗格中,选择POST方法。

  3. 选择测试选项卡。(如果未显示选项卡,请使用右箭头。)

  4. 请求正文中,粘贴以下JSON代码:

    { "message": "lorem ipsum" }
  5. 选择测试

    您将收到类似于以下内容的错误:

    <UnknownOperationException/>
应用程序开发人员

更改API集成,将请求正确转发给 Amazon SQS。

完成配置以修复集成错误:

  1. API网关控制台上,选择API您创建的,然后选择POST

  2. 方法执行” 部分显示了 API Gateway 和 Amazon 之间的直观映射SQS。在此部分中,选择集成请求,然后选择编辑

  3. 展开标HTTP头部分,然后选择添加请求标头参数。

    • 在 “名称” 中,指定 “内容类型”。

    • 对于 “映射来源”,输入 “应用程序/ x-www-form-urlencoded”。确保包括单引号。

    • 选中 “缓存” 复选框。

  4. 展开 “映射模板” 部分。

    • 选择 Add mapping template (添加映射模板)

    • 对于内容类型,输入 application /j son。

    • 对于模板正文,请粘贴以下代码:

      Action=SendMessage&MessageBody=$input.body
    • 选择保存

应用程序开发人员

在 Amazon 中测试并验证消息SQS。

运行测试以确认测试成功完成:

  1. API网关控制台上,选择RESTAPI您创建的。

  2. 资源窗格中,选择 POST 方法。

  3. 选择测试选项卡。(如果未显示选项卡,请使用右箭头。)

  4. 请求正文中,粘贴以下JSON代码:

    { "message": "lorem ipsum" }
  5. 选择测试

  6. 打开亚马逊SQS控制台

  7. 在导航窗格中,选择队列,然后选择您的队列。

  8. 选择发送和接收消息

  9. 选择轮询消息

  10. 选择消息。它应显示以下内容:

    Body { "message": "lorem ipsum" }
应用程序开发人员

使用特殊字符测试API网关。

运行包含消息中不可接受的特殊字符(例如 &)的测试:

  1. API网关控制台上,选择您的API。

  2. 使用以下JSON代码重复前面步骤中的测试:

    { "message": "lorem ipsum &" }
  3. 选择测试

    您将收到如下错误消息:

    { "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" }

这是因为默认情况下,邮件正文中不支持特殊字符。在下一步中,您将配置 API Gateway 以支持特殊字符。有关内容类型转换的更多信息,请参阅 APIGateway 文档

应用程序开发人员

更改API配置以支持特殊字符。

调整配置以接受消息中的特殊字符:

  1. API网关控制台上,选择API您创建的,然后选择POST

  2. 选择集成请求,然后选择编辑

  3. 将 “内容处理” 更改为 “转换为文本”。

  4. 在 “映射模板” 部分中:

    • 对于内容类型,输入 application /j son。

    • 模板正文中,指定:

      Action=SendMessage&MessageBody=$util.urlEncode($input.body)
    • 选择保存

  5. 选择测试选项卡。

  6. 请求正文中,输入之前的JSON代码:

    { " message": "lorem ipsum &" }
  7. 选择测试

  8. 打开亚马逊SQS控制台

  9. 选择您的队列,然后依次选择 “发送和接收消息”、“轮询留言”、“像以前一样留言”。

新消息应包含特殊字符。

应用程序开发人员
任务描述所需技能

部署API。

要部署,请执行以下RESTAPI操作:

  1. 打开API网关控制台

  2. 选择您的 API。

  3. 选择部署API。有关此步骤的更多信息,请参阅 APIGateway 文档

应用程序开发人员

使用外部工具进行测试。

使用外部工具运行测试以确认消息已成功接收:

  1. 打开诸如 Postman、Insomnia 或 c 之类的工具。URL

  2. 运行你的API.

  3. 打开亚马逊SQS控制台

  4. 选择您的队列。

  5. 加载消息以查看新消息。

应用程序开发人员
任务描述所需技能

删除 API。

API网关控制台上,选择API您创建的,然后选择删除

应用程序开发人员

删除该IAM角色。

IAM控制台的 “角色” 窗格中,选择 AWSGatewayRoleForSQS,然后选择 “删除”。

应用程序开发人员

删除队SQS列。

Amazon SQS 控制台队列窗格中,选择您创建的SQS队列,然后选择删除

应用程序开发人员

相关资源