2017-03-09 10 views
2

I eine einfache Lambda-Funktion haben, wieMit AWS SDK von Lambda ausgeführt wird in VPC

var AWS = require("aws-sdk"); 

exports.handler = (event, context, callback) => { 

var ec2 = new AWS.EC2({region:'us-east-1'}); 
return ec2.describeRegions({}).promise() 
.then(function(regionResponse) { 
    console.log(regionResponse.Regions) 
    callback(null, regionResponse.Regions); 
}) 
.catch(
    function (err) { 
     console.log({"error" : err}); 
     callback(err, null); 
    } 
) 

} folgt;

Ich kann diese Funktion außerhalb einer VPC erfolgreich ausführen.

Ich erstelle eine VPC mit dem VPC-Assistenten und erstellen Sie eine VPC mit einem einzelnen öffentlichen Subnetz und einem Internet-Gateway. Ich stelle die Funktion in die VPC und gebe ihr eine Ausführungsrolle mit Lambda VPC Execution rights. Es schlägt jetzt mit einer Zeitüberschreitung, die ich auf 10 Sekunden festgelegt habe (normale Ausführung 1 Sek.)

Was fehlt mir in meiner Konfiguration, die verhindert, dass die Funktion auf das AWS SDK innerhalb der VPC zugreifen?

+0

Diese Frage wird hier mindestens einmal pro Woche gestellt. Bitte lesen Sie die Antworten auf einige der anderen Fragen wie diese: http://stackoverflow.com/questions/38188532/why-aws-lambda-within-vpc-can-not-send-message-to-sns http: // stackoverflow.com/questions/35423246/adding-aws-lambda-with-vpc-configuration- causes-timeout-when-accessing-s3 –

+0

@MarkB die Tatsache, dass dies so oft gefragt wird, nur um zu zeigen, dass es eine ordnungsgemäße dokumentiert benötigt Anwendungsfall oder Beispiele von Amazon. Ich habe diese Routen schon vorher mit diesen anderen Antworten durchgespielt, so dass ich etwas übersehen oder etwas durcheinander gebracht habe. Ich werde wieder beginnen und sehen, ob ich etwas Erfolg haben kann – ajmcgarry

+1

AWS hat dies in vielen Orten dokumentiert, wie hier: http://docs.aws.amazon.com/lambda/latest/dg/vpc.html und dem offiziellen Lambda VPC Ankündigung hier: https://aws.amazon.com/blogs/aws/new-access-resources-in-a-vpc-from-your-lambda-functions/ Was speziell wollen Sie von ihnen, dass sie nicht sind Ihnen zur Verfügung stellen? Wie auch immer, das ist Feedback, das Sie brauchen, um Amazon zur Verfügung zu stellen, anstatt es hier zu veröffentlichen, wo sie es nie sehen werden. –

Antwort

0
  1. Sie setzen Rückruf nach Return-Anweisung. Natürlich wird es nie ausgeführt, weil Sie von der Funktion zurückgekehrt sind.

  2. Wenn das Subnetz, das Sie ausführen, das Lambda nicht öffentlich ist oder kein NAT-Gateway hat, kann es keine Verbindung zum Internet herstellen, also zu AWS-APIs.

+0

Hallo @ Çağatay Gürtürk, ja ein dummer Fehler, weil ich den Boilerplate-Code nehme, um mein Problem zu demonstrieren und die Callback-Funktion nicht richtig aufzurufen. Ich habe das bearbeitet und behoben. Dies ist jedoch nicht das Problem, und wie ich schon sagte, funktionierte es außerhalb von VPC und wurde in beiden Fällen nicht vorzeitig beendet. Ich nehme Ihre Empfehlung und fügen Sie eine NAT zum Subnetz hinzu – ajmcgarry

+0

Sie können Internet-Gateway Ihrem Subnetz hinzufügen und das Problem lösen, aber dann wird Ihr Subnetz ein öffentliches Subnetz sein. Solange das Subnetz einen Internetzugang hat, sollten Sie kein Problem haben. –

+0

Wie die ursprüngliche Frage. Ich habe bereits ein einzelnes öffentliches Subnetz mit einem Internet-Gateway. Ich habe versucht, es gegen eine NAT zu tauschen, da ich nur eine einzige Routentabelle in der VPC habe und es keinen Unterschied machte.Könnten Sie versuchen, meinen Code auszuführen, wie Sie sagen, es kann getan werden, weil ich glaube nicht, dass dies die Antwort ist – ajmcgarry

Verwandte Themen