是否可以使用网关 URL 直接向 DynamoDB table 发出 POST 请求?

Is it possible to make a POST request directly to a DynamoDB table using a gateway URL?

我有一个应用程序接受网关 url 并使用一些数据直接向 URL 发出 POST 请求。我想知道是否有一个特定的 url 用于向 DynamoDB 发出 POST 请求。

我联系了 AWS 支持,他们将我链接到此 article 但我仍然对如何操作感到困惑。

更多 details 在应用程序上并通过它发出 POST 请求。

您发布的文章我相信有您需要的信息

请求格式 DynamoDB low-level API 接受 HTTP(S) POST 请求作为输入。 AWS 开发工具包为您构建这些请求。

假设您有一个名为 Pets 的 table,其键模式由 AnimalType(分区键)和 Name(排序键)组成。这两个属性都是字符串类型。要从 Pets 检索项目,AWS SDK 构造以下请求。

POST / HTTP/1.1
Host: dynamodb.<region>.<domain>;
Accept-Encoding: identity
Content-Length: <PayloadSizeBytes>
User-Agent: <UserAgentString>
Content-Type: application/x-amz-json-1.0
Authorization: AWS4-HMAC-SHA256 Credential=<Credential>, SignedHeaders=<Headers>, Signature=<Signature>
X-Amz-Date: <Date> 
X-Amz-Target: DynamoDB_20120810.GetItem

{
    "TableName": "Pets",
    "Key": {
        "AnimalType": {"S": "Dog"},
        "Name": {"S": "Fido"}
    }
}

您很可能无法将 Ruuvi 网关 post 数据直接传输到您的 DynamoDB table。

虽然任何可以发出 HTTP 请求的客户端都可以与 DynamoDB 交互,但发出成功请求的一个要求是请求包含有效的 AWS SigV4 签名。这个签名是针对每个请求的,必须根据请求的内容生成,包括headers,并且还必须与请求时间相关。

要了解有关如何自己生成 SigV4 签名的更多信息,请参阅 AWS 文档中的一些信息:https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html

还有一个演练,您可以按照它来准确理解所需要的内容:https://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html

因此,除非 Ruuvi 网关能够代表您生成 SigV4 签名,否则您将需要一些中间技术来接收数据并 post 到 Dynamo。

例如,您可以设置一个由 Lambda 函数支持的 AWS API 网关来接收数据,进行任何您想要的转换,然后 post 到 DynamoDB。或者,您可以启动一个微型 EC2 实例,部署一个 Nginx 反向代理并将请求提供给您选择的一些股票(节点、Python、PHP、Java、.NET)和过程..

您必须考虑的一件事是如何验证来自 Ruuvi 网关的这些请求,以免垃圾进入您的系统。 Api 网关有一些不错的功能,比如限制规则,甚至支持授权过程,但再次不确定 Ruuvi 网关如何与任何需要身份验证密钥的东西集成等。也许他们至少有办法通过一些header 中的某种秘密,只要您将摄取端点公开为 SSL 端点,您就会获得一些保护。 YMMV