是否可以使用网关 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
我有一个应用程序接受网关 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