5

Я пытаюсь подключиться к моему экземпляру RDS из лямбды. Я писал лямбду локально и проверял на месте, и все работало персиковое. Я развертываю на лямбда, и внезапно это не сработает. Ниже приведен код, который я запускаю, и если это помогает, я вызываю лямбду через поток кинезий.AWS Lambda не может подключиться к экземпляру RDS, но я могу локально?

'use strict'; 

exports.handler = (event, context, handlerCallback) => { 
    console.log('Recieved request for kinesis events!'); 
    console.log(event); 
    console.log(context); 

    const connectionDetails = { 
     host:  RDS_HOST, 
     port:  5432, 
     database: RDS_DATABASE, 
     user:  RDS_USER, 
     password: RDS_PASSWORD 
    }; 

    const db = require('pg-promise')({promiseLib: require('bluebird')})(connectionDetails); 

    db 
      .tx(function() { 
       console.log('Beginning query'); 

       return this.query("SELECT 'foobar'") 
          .then(console.log) 
          .catch(console.log) 
          .finally(console.log); 
      }) 
      .finally(() => handlerCallback()); 
}; 

Вот бревно из облака часов, если это поможет:

START RequestId: *********-****-****-****-********* Version: $LATEST 
2016-05-31T20:58:25.086Z *********-****-****-****-********* Recieved request for kinesis events! 
2016-05-31T20:58:25.087Z *********-****-****-****-********* { Records: [ { kinesis: [Object], eventSource: 'aws:kinesis', eventVersion: '1.0', eventID: 'shardId-000000000000:**********************************', eventName: 'aws:kinesis:record', invokeIdentityArn: 'arn:aws:iam::******************:role/lambda_kinesis_role', awsRegion: 'us-east-1', eventSourceARN: 'arn:aws:kinesis:us-east-1:****************:stream/route-registry' } ] } 
2016-05-31T20:58:25.283Z *********-****-****-****-********* { callbackWaitsForEmptyEventLoop: [Getter/Setter], done: [Function], succeed: [Function], fail: [Function], logGroupName: '/aws/lambda/apiGatewayRouteRegistry-development', logStreamName: '2016/05/31/[$LATEST]******************', functionName: 'apiGatewayRouteRegistry-development', memoryLimitInMB: '128', functionVersion: '$LATEST', getRemainingTimeInMillis: [Function], invokeid: '*********-****-****-****-*********', awsRequestId: '*********-****-****-****-*********', invokedFunctionArn: 'arn:aws:lambda:us-east-1:*************:function:apiGatewayRouteRegistry-development' } 
END RequestId: *********-****-****-****-********* 
REPORT RequestId: *********-****-****-****-********* Duration: 20003.70 ms Billed Duration: 20000 ms Memory Size: 128 MB Max Memory Used: 22 MB 
2016-05-31T20:58:45.088Z *********-****-****-****-********* Task timed out after 20.00 seconds 
+0

Вы включили доступ VPC для своей лямбда-функции? –

+0

@MarkB nope. У меня есть раскрывающийся список, установленный на «Нет VPC» – LordZardeck

+0

Итак, у вас есть доступность с открытым доступом на вашем экземпляре RDS, и у вас есть группа безопасности экземпляров RDS, открытая для всего мира? –

ответ

9

@MarkB @ Michael-sqlbot были правильными в комментариях, это был вопрос группы безопасности.

Наконец-то я получил ответ поддержки AWS, чтобы указать, что группа безопасности RDS действительно была частной для определенного IP-адреса. Это не имеет смысла, поскольку я никогда не настраивал это, и я мог получить доступ к базе данных с моей локальной машины и эластичного бобового стебля. Я добавил 0.0.0.0/0 в группу безопасности, и теперь лямбда может подключиться. Спасибо за помощь ребята!

+0

Привет, Можете ли вы уточнить? Где и к чему вы добавили 0.0.0.0/0? – UncleAdam

+2

Но добавление 0.0.0.0/0 к входящему в группу безопасности означает открытие соединения с миром. Ты этого не боишься? – Nativ

+1

@ Натив это предназначалось для целей разработки и тестирования. Позже он был заблокирован для правильной группы безопасности. Да, открытие соединения с миром не было бы отличной идеей для использования в производстве. – LordZardeck

 Смежные вопросы

  • Нет связанных вопросов^_^