AWS Lambda Java / Kotlin向SQS发送消息

时间:2017-12-23 00:24:50

标签: java amazon-web-services kotlin aws-lambda amazon-sqs

我一直在使用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。我尝试了各种方法来创建客户端(包括已弃用的选项)以及EnvironmentVariableCredentialsProviderDefaultAWSCredentialsProviderChain

我也尝试将超时时间增加到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()

1 个答案:

答案 0 :(得分:1)

检查安全组以获取sqs端点的端口80和443上的出站和入站安全组。你提到node.js正在运行 - 但是配置可能有所不同。