2016-09-11 3 views
0

Ich bin sehr neu in dem API-Gateway und AWS Lambda und ich versuche, sie in einem Szenario mit den folgenden Elementen zu verwenden:API-Gateway und Lambda-Funktion: erster Ansatz

  • eine VPC mit einem privaten und einem öffentliche Subnetz
  • ein AMI EC2 (Free Tier) mit Lampe installiert
  • eine einfache index.html-Seite mit Text (etwas zu sagen: „Das ist eine Testseite“)

Was möchte ich tun ist in der Lage,zu schlagendurch die Verwendung des API-Gateways und Lambda, wie es in der AWS-Dokumentation vorgeschlagen scheint. Ich habe dann das grundlegende Hello World Lambda-Beispiel (einen der AWS Blueprints) für meine erste Lambda-Funktion wieder verwendet und die VPC-Details (mit dem privaten Subnetz auch) wie im Assistenten angefordert. Ich habe auch eine Beispiel-API mit einer Ressource (in diesem Fall mein Beispiel) und der Get-Methode mit dem Lambda-Funktionsintegrationstyp und der Hello-World-Funktion erstellt. Laut der Dokumentation habe ich die richtigen Berechtigungen (http://docs.aws.amazon.com/apigateway/latest/developerguide/create-lambda-roles.html) erstellt. Ich habe die GET-Methode von meiner API getestet und gibt die Antwort "Hello World" gemäß dem bereits vorhandenen AWS-Entwurf korrekt zurück. Ich weiß, das klingt nach einer sehr naiven Frage, aber ich bin mir nicht sicher, ob ich wirklich bewiesen habe, dass ich meine VPC schlagen kann. Ich würde gerne den Beispieltext von meiner index.html Seite zurückgeben können, zum Beispiel, Ist das möglich? Habe ich den Zweck von AWS Lambda in diesem speziellen Szenario missverstanden?

Vielen Dank für Ihre Hilfe,

EDIT:

Also, ich habe zusammen 4.3 die folgenden in Knoten JS setzen:

'use strict'; 
console.log('We are about to send a Get Request'); 

exports.handler = function(event, context, callback) { 
    var http = require("http") 
    var request = http.get("http://domain/example/index.html") 
    console.log('"This is my request":"' + request + '"'); 
    callback(null, "The URL is succesfully retrieved") 
}; 

Der Test läuft erfolgreich, bin ich richtig zu sagen, dass es beweist, dass ich eine Seite, die auf einer VPC läuft, treffen kann?

Antwort

1

Sie haben Recht - Sie können eine HTTP-Anforderung an einen Endpunkt in Ihrer VPC über eine Lambda-Funktion senden, solange Ihre Lambda-Funktion für die Ausführung innerhalb derselben VPC konfiguriert ist.

So können Sie API-Gateway verwenden, um Lambda aufzurufen und eine Antwort von einem HTTP-Endpunkt innerhalb einer VPC zurückzugeben.

Das API-Gateway kann HTTP-Endpunkte in einer VPC nicht direkt aufrufen, daher ist der aktuelle Ansatz mit Lambda der empfohlene.

+0

danke dafür, sehr geschätzt. Wollte nur herausfinden, ob ich tatsächlich in die richtige Richtung gehe und ja der Test scheint zu funktionieren und ich kann diese Seite innerhalb der VPC treffen. Ich denke, ich kann eine ähnliche Sache mit einem REST-Endpunkt anstelle einer HTTP-Ressource machen. Ist das korrekt? – paranza

+0

Dieser Ansatz funktioniert, aber er ist nicht skalierbar, denn wenn Lambda auf eine Ressource in VPC zugreifen muss, benötigt es ENI (Elastic Network Interface) und eine ausreichende IP-Adresse und um sicherzustellen, dass dieses Zeug knifflig ist. Es würde empfehlen, sich vorher alle Bedenken auf http://docs.aws.amazon.com/lambda/latest/dg/vpc.html anzuschauen, um in diese Richtung zu gehen. –

+0

@paranza: Wie war Ihre Erfahrung mit diesem Ansatz? –

-1

Sie können Ihren EC2 mit einer privaten IP-Adresse innerhalb Ihrer Lambda-Funktion verbinden. Das bedeutet, dass Sie Ihre VPC von Ihrer Lambda-Funktion aus treffen können.

+1

Dies beantwortet nicht Benutzerproblem – error2007s

+0

@ Ka Ho leong, danke für Ihre Eingabe. Beim Einrichten der Lambda-Funktion, unter Konfigurationen -> Erweiterte Einstellungen, darf ich mich mit der VPC der Wahl verbinden (was ich getan habe). Auf dieser VPC habe ich Lamp (momentan die einzige Instanz) mit Apache und einer Beispiel-Webseite. Meinst Du das? Kann ich mit meinem Test bereits nachweisen, dass ich erfolgreich eine Verbindung zur EC2-Instanz herstellen kann? Ich habe Schwierigkeiten zu sehen, ob ich mit Lambda einfach den Header dieser index.html-Seite bekommen kann? Danke – paranza

Verwandte Themen