Неверное разрешение от Lambda на MongoDB в EC2 - PullRequest
0 голосов
/ 07 мая 2018

Я создал лямбда-функцию, которая предназначена для подключения к MongoDB, работающей на EC2.

Я следовал некоторым учебникам и гарантировал, что:

  • Лямбда и EC2 работают в одном и том же VPC
  • Lambda настроил подсеть EC2
  • Lambda имеет собственную группу безопасности my-lambda-sg
  • Группа безопасности Lambda разрешена в правилах привязки группы безопасности EC2 для порта MongoDB как «Пользовательское правило TCP»
  • Роль лямбды получила разрешение AWSLambdaVPCAccessExecutionRole

Однако я все еще не могу подключиться с лямбды к MongoDB в EC2. Когда я запускаю тест в лямбде, я получаю:

START RequestId: f0869292-5207-11e8-85d2-cba0eb99208c Version: $LATEST
2018-05-07T15:04:29.117Z    567951c4-5207-11e8-ba43-0314179d2bf5    { MongoNetworkError: failed to connect to server [IP:port] on first connect [MongoNetworkError: connection 0 to IP:port timed out]
    at Pool.<anonymous> (/var/task/node_modules/mongodb-core/lib/topologies/server.js:503:11)
    at emitOne (events.js:116:13)
    at Pool.emit (events.js:211:7)
    at Connection.<anonymous> (/var/task/node_modules/mongodb-core/lib/connection/pool.js:326:12)
    at Object.onceWrapper (events.js:317:30)
    at emitTwo (events.js:126:13)
    at Connection.emit (events.js:214:7)
    at Socket.<anonymous> (/var/task/node_modules/mongodb-core/lib/connection/connection.js:256:10)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:106:13)
    at Socket.emit (events.js:208:7)
    at Socket._onTimeout (net.js:420:8)
    at ontimeout (timers.js:482:11)
    at tryOnTimeout (timers.js:317:5)
    at Timer.listOnTimeout (timers.js:277:5)
  name: 'MongoNetworkError',
  message: 'failed to connect to server [IP:port] on first connect [MongoNetworkError: connection 0 to IP:port timed out]' }
END RequestId: f0869292-5207-11e8-85d2-cba0eb99208c

Из API Gateway я получаю

You do not have permission to perform this action

А из браузера я получаю:

{"message": "Endpoint request timed out"}

Другие лямбды, не имеющие доступа к EC2, работают нормально.

Есть идеи, чего мне не хватать?

1 Ответ

0 голосов
/ 07 мая 2018

Я нашел ответ. Все реквизиты выше в порядке. Мне просто нужно было использовать внутренний IP-адрес EC2 вместо внешнего в URL-подключении MongoDB, чтобы считать его вызовом в VPC, как я обнаружил здесь AWS Lambda не может получить доступ к порту EC2 в том же VPC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...