我一直在使用Kotlin创建AWS Lambda函数。该功能运行良好但似乎无法将SQS消息发送到FIFO队列。我在Cloudwatch中收到以下消息:
REPORT RequestId: 9119da93-e775-11e7-820a-5bbbb7403f93 Duration: 10010.16 ms Billed Duration: 10000 ms Memory Size: 128 MB Max Memory Used: 54 MB
2017-12-23T00:09:49.483Z 9119da93-e775-11e7-820a-5bbbb7403f93 Task timed out after 10.01 seconds
我已经重写了我的代码以使用Node JS并且它执行得很好并且我已经为lambda函数设置了相关权限,通过控制台权限模拟器进行了测试,以便将消息放在指定的队列中。由于它在Node中完全正常,因此我必须假设我的Java / Kotlin版本有问题。
如果我删除下面的代码,函数到达结尾并返回ok。我尝试了各种方法来创建客户端(包括已弃用的选项)以及EnvironmentVariableCredentialsProvider
和DefaultAWSCredentialsProviderChain
。
我也尝试将超时时间增加到20秒,但这也没有任何区别。
任何想法都将不胜感激!
val sqs = AmazonSQSClientBuilder.standard()
.withRegion(Regions.US_WEST_2)
.withCredentials(DefaultAWSCredentialsProviderChain())
.build()
val sendMessageRequest = SendMessageRequest()
.withMessageDeduplicationId("deduplicationId")
.withMessageGroupId("test")
.withQueueUrl("https://sqs.us-west-2.amazonaws.com/00000000/test.fifo")
.withMessageBody("test")
val sendResult = sqs.sendMessage(sendMessageRequest)
更新:这是回到Lambda的响应代码。这段代码似乎无需调用SQS即可。我尝试在sendMessage()
方法中添加try / catch,Lambda仍然超时。
val responseBody = JsonObject()
responseBody.addProperty("message", "ok")
val headerJson = JsonObject()
headerJson.addProperty("test", "test")
val responseJson = JsonObject()
responseJson.addProperty("statusCode", 200)
responseJson.add("headers", headerJson)
responseJson.addProperty("body", responseBody.toString())
val writer = OutputStreamWriter(output, "UTF-8")
writer.write(responseJson.toString())
writer.close()
答案 0 :(得分:1)
检查安全组以获取sqs端点的端口80和443上的出站和入站安全组。你提到node.js正在运行 - 但是配置可能有所不同。