AWS лямбда время от времени подключается к S3 - PullRequest
0 голосов
/ 18 февраля 2020

Я n00b до AWS.

У меня есть лямбда, записанная в Java, которая обрабатывает события S3 из очереди SQS. События инициируются созданием файлов в указанном каталоге в корзине S3.

Лямбда-обработка одиночного события S3, полученного из очереди (т. Е. Создание одного файла), работает как ожидалось.

Если я создаю пакет из 5-10 файлов одновременно, запускается несколько экземпляров Lambda - обычно от 3 до 5 - для обработки результирующих событий. Некоторые из них будут работать без проблем, но по крайней мере один из них (а иногда и больше, чем один) даст сбой. Поведение является (несколько разочаровывающим) несовместимым.

Во время сбоя лямбды-ошибки возникает первая ошибка при попытке подключиться к AWS Secrets Manager:

com.amazonaws.http.conn.ssl.SdkTLSSocketFactory - connecting to secretsmanager.ap-southeast-2.amazonaws.com/<ip>:<port>
c.a.http.conn.ClientConnectionManagerFactory - java.lang.reflect.InvocationTargetException: null
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
... stack trace...
Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to secretsmanager.ap-southeast-2.amazonaws.com:<port> [secretsmanager.ap-southeast-2.amazonaws.com/<ip>, secretsmanager.ap-southeast-2.amazonaws.com/<ip>, secretsmanager.ap-southeast-2.amazonaws.com/<ip>] failed: connect timed out
... stack trace...
Caused by: java.net.SocketTimeoutException: connect timed out

Соединение повторяется несколько раз Lambda, но всегда терпит неудачу. Лямбда-код перехватывает исключение и пытается выполнить некоторую очистку, но затем также не может подключиться к корзине S3:

com.amazonaws.http.conn.ssl.SdkTLSSocketFactory - Connecting socket to <s3 bucket>.s3.ap-southeast-2.amazonaws.com/<ip>:<port> with timeout 10000
c.a.http.conn.ClientConnectionManagerFactory - java.lang.reflect.InvocationTargetException: null
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
... stack trace...
Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to <s3 bucket>.s3.ap-southeast-2.amazonaws.com:<port> [<s3 bucket>.s3.ap-southeast-2.amazonaws.com/<ip>] failed: connect timed out
... stack trace...
Caused by: java.net.SocketTimeoutException: connect timed out

Поскольку это поведение противоречиво, я не уверен в подходе к определению причины проблемы. это - я не могу понять, почему некоторые экземпляры Lambda полностью перестали работать, когда другие, работающие одновременно, работают без проблем.

Я использую следующие библиотеки из com.amazon aws в своем проекте Java:

aws-lambda-java-core: 1.2.0
aws-java-sdk-s3: 1.11.714
aws-java-sdk-events: 1.11.714
aws-java-sdk-secretsmanager: 1.11.718
aws-java-sdk-sqs: 1.11.719

Заранее благодарен за любую помощь.

1 Ответ

0 голосов
/ 18 февраля 2020

Проблема была в сетевой проблеме - в одной из частных подсетей, которые использует VP C Lambda, была неправильно настроенная таблица маршрутов, которая была назначена несуществующему шлюзу NAT.

После правильной настройки Добавлен NAT-шлюз, Lambda работает как положено.

Большое спасибо Джону Ротенштейну за помощь в диагностике этой проблемы.

...