在docker容器内从lambda发布mqtt消息时出现异常



我正在docker容器内运行aws SAM Lambda,并试图使用aws示例代码中的pubSub类(用于JAVA的aws iot SDK)发布MQTT消息。当我在lambda之外使用相同的类/方法时,它可以工作。当我从lambda内部运行它时,我得到以下异常:

software.amazon.awssdk.crt。CrtRuntimeException: aws_tls_ctx_options_init_client_mtls_from_path failed (aws_last_error: AWS_ERROR_FILE_INVALID_PATH(44), Invalid file path.)未知(1)

我认为这是因为docker容器无法访问证书。所以我将其添加到docker配置中的文件共享设置中,并且仍然是相同的例外。我遗漏了什么?

Like "我的意思是,信息很清楚。证书文件无法识别,因为Lambda运行在Docker容器中,而Docker容器无法访问本地硬盘上的文件——包括证书。有两种解决方案可以工作:

  1. 使用MQTT Over WebSocket - Sig4代替直接使用MQTT,它使用IAM凭证而不是证书。https://github.com/aws/aws-iot-device-sdk-java build-the-sdk-from-the-github-source

  2. 根据您的用例,使用HTTPS - IotDataPlaneClient而不是MQTT来发布消息甚至可能更有意义,特别是如果多个Lambdas试图使用相同的证书可能存在并发问题。https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/iotdataplane/IotDataPlaneClient.html

我最终做的是选项1 - IDK,如果有一种方法将文件包括在docker容器的范围内,但这是一个很好的解决方案。

最新更新