java - AWS Lambda Java/Kotlin 向 SQS 发送消息

标签 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 即可工作。我已尝试将 try/catch 添加到 sendMessage() 方法,但 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()

最佳答案

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

关于java - AWS Lambda Java/Kotlin 向 SQS 发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47948745/

相关文章:

amazon-web-services - 如何将 AWS SAM CLI 本地 HttpAPI 与 JWT 承载 token 离线身份验证结合使用?

android - Kotlin协程:与工作计划有关。(invokeOnCompletion)

java - Liquibase,在Oracle中创建外键,前提条件

java - firebase数据库读取问题

java - 对象模拟不起作用(其 null)并在方法调用时返回 NullPointerException

java - 由于 Android 消息 `Viewing full screen, To exit, swipe down from the top`,Espresso 测试失败

java - 像谷歌助手一样通过语音命令启动 Android 应用程序

java - Spring MVC 如何返回 <select> 值作为表单/模型值?

python - 从 EC2 实例访问 Amazon S3 Bucket

通过Bash命令插入时Mysql不工作,但手动插入时工作