我正在尝试从使用Spring-boot编写的Lambda发布到AWS-IoT主题。我使用了以下依赖项,
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>1.11.710</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-iot</artifactId>
<version>1.11.710</version>
</dependency>以下是必要的配置
@Bean
public AWSIotData awsIotDataClient() {
return AWSIotDataClient.builder().standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("https://<my-account-specific>.iot.us-west-1.amazonaws.com", Regions.US_WEST_1.getName()))
.withCredentials(DefaultAWSCredentialsProviderChain.getInstance())
.build();
}下面是我将数据发布到aws-Iot主题的实现。
@Autowired
private AWSIotData awsIotDataClient;
@Autowired
private ObjectMapper objectMapper;
@Override
public void publish(String topic, MyObject response) throws JsonProcessingException {
logger.info("Publishing to topic: {} and payload : {}", topic, response);
PublishRequest publishRequest = new PublishRequest().withPayload(
ByteBuffer.wrap(objectMapper.writeValueAsBytes(response))).withQos(1).withTopic(topic);
PublishResult result = awsIotDataClient.publish(publishRequest);
logger.info("Successfully published message to topic: {} and payload: {}, with result: ", topic, response, result);
}当我在本地运行时,这个实现工作得很好。但当我在AWS-Lambda中运行它时,它会到达发布,并且在超过40秒的时间内从未得到响应,而lambda最终超时。lambda角色附加了AWSIoTFullAccess和AWSLambdaVPCAccessExecutionRole策略。因此,这里的任何指导都将不胜感激。谢谢。
这里是我的私有网络的出站安全组。它还附加了一个IGW。IGW还与lambda在其中运行的子网相关联。

发布于 2020-01-23 08:36:53
私有网络中的Lambda函数不能直接使用公网网关,因为Lambda函数永远不会分配公网IP地址。私有网络中的Lambda函数必须位于私有网络的内网中,并具有通往NAT网关的路由,才能访问Internet。由于VPC端点尚不支持亚马逊网络服务IoT服务,因此如果Lambda功能必须驻留在VPC中,您唯一的选择就是使用NAT网关。
https://stackoverflow.com/questions/59869550
复制相似问题