按照此处接受的答案,我尝试配置 API 网关以使用 POST 而不是 GET(我能够使 GET 工作)向 SQS 发送消息。使用 POST 时,我得到以下响应:
<AccessDeniedException>
<Message>Unable to determine service/operation name to be authorized</Message>
</AccessDeniedException>
Run Code Online (Sandbox Code Playgroud)
这是我的映射模板的配置方式
#set($clientKey = $input.params('clientkey'))
#set($url = "https://sqs.us-east-2.amazonaws.com/XXXXXXXX/SomeQueuePrefix-${clientKey}-SomeQueueEnvironment.fifo")
Action=SendMessage##
&QueueUrl=$util.urlEncode($url)##
&MessageGroupId=$input.params('messageGroupId')##
&MessageDeduplicationId=1##
&MessageBody=$util.urlEncode($input.body)
Run Code Online (Sandbox Code Playgroud)
看起来它正确地映射了身体
Wed Nov 14 20:39:44 UTC 2018 : Endpoint request body after transformations: Action=SendMessage&QueueUrl=https%3A%2F%2Fsqs.us-east-2.amazonaws.com%2FXXXXXXXXX%2FSomeQueuePrefix-TEST-SomeQueueEnvironment.fifo&MessageGroupId=3&MessageDeduplicationId=1&MessageBody=%7B%0A++++%22configurationId%22%3A+1%0A%7D
Wed Nov 14 20:39:44 UTC 2018 : Sending request to https://sqs.us-east-1.amazonaws.com//
Run Code Online (Sandbox Code Playgroud)
我的 IAM 政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Resource": [
"arn:aws:sqs:us-east-1:XXXXXXXXX:CADAUTO-*-DEV.fifo"
],
"Action": [
"sqs:SendMessage", …Run Code Online (Sandbox Code Playgroud) 我已经按照本教程连接了一个 Api 网关方法来推送到 SQS 队列。
https://dzone.com/articles/creating-aws-service-proxy-for-amazon-sqs
这一切都很好,但我想使用一些路径参数向我的消息添加一些消息属性,但我无法让它工作。
这是教程中的当前映射模板。
Action=SendMessage&MessageBody=$util.urlEncode($util.escapeJavaScript($input.json('$')))
Run Code Online (Sandbox Code Playgroud)
我试图保留“application/x-www-form-urlencoded”格式,并通过将其更改为(现在使用静态值)将 MessageAttributes 添加到此
Action=SendMessage&MessageBody=$util.urlEncode($util.escapeJavaScript($input.json('$')))
&MessageAttribute[0][Name]=foo&MessageAttribute[0][Type]=String&MessageAttribute[0][Value]=bar
Run Code Online (Sandbox Code Playgroud)
但我得到了这个错误
{
"Error": {
"Code": "MalformedQueryString",
"Message": "Keys may not contain [",
"Type": "Sender"
},
"RequestId": "ea121e6e-ca37-5d14-b92b-4a2c6fedf403"
}
Run Code Online (Sandbox Code Playgroud)
我应该如何在不使用“[”的情况下对 MessageAttribues 数组进行编码
我正在尝试将 API 网关 WebSocket 路由与 SQS 集成。
我已使用以下属性配置了 SQS 集成
AWS 区域:ap-southeast-1 AWS 服务:SQS HTTP 方法:POST 路径覆盖:111111110111/my-queue
配置请求模板为
“操作=SendMessage&MessageBody=$util.urlEncode($input.body)##
当我尝试将数据发送到 SQS 时,它失败并出现以下错误
错误:
(VK1mEHZSyQ0FlZg=) 转换后的端点请求正文:Action=SendMessage&MessageBody=foobar (VK1mEHZSyQ0FlZg=) 正在将请求发送到https://sqs.ap-southeast-1.amazonaws.com/111111110111/my-queue (VK1mEHZSyQ0FlZg=) 已收到响应。集成延迟:16 毫秒 (VK1mEHZSyQ0FlZg=) 转换前的端点响应正文:无法确定要授权的服务/操作名称
我有一个网站,该网站将客户端的消息写入Amazon SQS队列。每个人都可以写到队列中。我们有一个服务器端进程,该进程读取队列消息并进行处理。
队列配置了对所有人的写访问权限,这是其策略:
{
"Version": "2012-10-17",
"Id": "arn:aws:sqs:.../SQSDefaultPolicy",
"Statement": [{
"Sid": "Sid1537097246229",
"Effect": "Allow",
"Principal": "*",
"Action": "SQS:SendMessage",
"Resource": "arn:aws:sqs:..."
}]
}
Run Code Online (Sandbox Code Playgroud)
但是,如果没有访问密钥和秘密密钥,我们似乎无法写入队列。AWS开发工具包返回错误,指出未提供凭证。我们正在使用AWS SQS文档中描述的代码。