Java Лямбда-функция зависла при публикации на AWS IoT - PullRequest
1 голос
/ 23 января 2020

Я пытаюсь опубликовать sh в AWS -IoT Topi c из лямбды, написанной с использованием Spring-boot. Я использую следующие зависимости:

<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 topi c.

    @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, он длится до publi sh и никогда не получает ответ более 40 секунд, и лямбда в конечном итоге истекает. К лямбда-роли прикреплены политики AWSIoTFullAccess, AWSLambdaVPCAccessExecutionRole. Таким образом, любое руководство здесь будет оценено. Спасибо.

Вот группа исходящей безопасности моего VP C. К нему также прикреплен IGW. IGW также связан с подсетями, в которых работает лямбда. enter image description here

1 Ответ

2 голосов
/ 23 января 2020

Лямбда-функция в VP C не может напрямую использовать шлюз Inte rnet, поскольку лямбда-функции никогда не будет назначен общедоступный c IP-адрес. Лямбда-функция в VP C должна быть в частном su bnet VP C с маршрутом к шлюзу NAT, чтобы получить доступ к Inte rnet. Поскольку служба AWS IoT еще не поддерживается конечными точками VP C, единственным вариантом является использование шлюза NAT, если функция Lambda должна находиться в VP C.

...