【问题标题】:Create endpoint url for boto3 using API Gateway使用 API Gateway 为 boto3 创建端点 url
【发布时间】:2017-09-11 02:19:21
【问题描述】:

目前我的应用程序使用 boto3 访问 AWS 资源。但是,我想改用 API Gateway 来前置所使用的 AWS 服务,以便所有内容都通过 API Gateway 汇集,而不是直接发送到服务。

我的 API 网关正常工作,但我如何告诉 boto3 使用这个新端点,因为 API 网关端点是基于每个操作设置的。即,有一个用于 ListQueues,另一个用于 CreateQueue。

将 boto3 与 endpoint-url 参数一起使用会给我这个错误:

botocore.parsers.ResponseParserError:无法解析响应(格式不正确(无效令牌):第 1 行,第 0 列),收到无效 XML: {"message":"凭证的范围应该是正确的服务:'execute-api'。"}

【问题讨论】:

  • 如果您使用的是 boto3,您想要使用 API 网关端点的原因是什么?这有什么好处?好像……给你妈妈打电话,让她把手机交给你哥哥,而不是用他自己的电话给你哥哥打电话。您能否通过 API Gateway 汇集事物来帮助我们了解您要解决的问题?我并不是说没有有效的用例……但我还没有看到。
  • 这是为了让我们的防火墙规则保持简单,只允许 API 网关流量。
  • 我想你会发现这是徒劳的。您的端点没有固定地址。
  • 在 API 网关上作为 AWS 服务的单一入口点 - 我觉得 @vonec 的想法是合理的 - API Gwy 将允许统一/应用您定义明确的安全过滤器来访问 AWS 资源和服务。更少的事情需要管理,不是吗?

标签: python amazon-web-services aws-api-gateway boto3


【解决方案1】:

在创建客户端时,您可以传递关键字参数 endpoint_url,它可以让您覆盖默认 URL botocore 否则将为目标服务构建。

import boto3

client = boto3.client('sqs', endpoint_url="https://your.api.gateway.url.here")

您需要在此处进行一些管理,因为听起来您有只读 API 网关端点,然后还有一些具有写入功能。

【讨论】:

  • 谢谢。我试过了,但看起来我需要一些关于如何设置 API Gateway 端点的帮助。您能否指出一些有关如何设置 API 网关的信息?
  • 哪一部分给您带来了问题?实际的 API 网关 URL?还是客户端响应错误?
  • 如果我直接从 REST 客户端访问,API 网关似乎没问题,只是当我将它用作端点 URL 时,我得到一个错误(我已添加到 OP)
  • @vonec 看起来 boto 无法正确验证。您是否还要代理所有身份验证,还是需要完全跳过凭据?
  • 我在 API Gateway 中使用 AWS_IAM 身份验证。我应该使用不同的设置吗?因为我没有看到任何代理身份验证的选项。
【解决方案2】:

在做了更多研究之后,真正的答案是这实际上是不可能的,因为 boto3 库不支持 API Gateway 作为它提供的服务之一。

请看这里: https://github.com/boto/botocore/issues/1140

目前有一个开放的功能请求允许 boto3 调用 API 网关资源: https://github.com/boto/boto3/issues/1246

如果有人知道我不知道的事情,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 2016-10-29
    • 1970-01-01
    • 2019-09-22
    • 2019-12-21
    • 2019-11-23
    • 1970-01-01
    相关资源
    最近更新 更多