2015-10-25 13 views
12

Ich habe eine AWS Lambda-Funktion, die eine Verbindung zu einem Remote-TCP-Dienst herstellen muss. Gibt es eine Möglichkeit, die Lambda-Funktion mit der IP-Adresse des Remote-Dienstes zu konfigurieren, nachdem die Lambda-Funktion in AWS implementiert wurde? Oder muss ich die Konfiguration vor dem Deployment in die verpackte Lambda-Funktion brennen?Laufzeitkonfiguration für AWS Lambda-Funktion

+0

Es gibt wahrscheinlich viele Möglichkeiten, das zu tun. Zum Beispiel könnte die Lambda-Funktion eine Konfiguration aus einer DynamoDB-Tabelle lesen. Oder Sie können sich ein SNS-Thema anhören und die IP-Adresse von einer Nachricht erhalten, die an dieses Thema gesendet wurde. Oder Sie könnten eine Konfigurationsdatei aus einem S3-Bucket lesen. – garnaat

Antwort

1

Sie können die Lambda-Funktion über das SNS-Topic-Abonnement aufrufen und sich aus den Nutzdaten innerhalb des SNS-Ereignisses konfigurieren lassen.

Hier ist die offizielle Anleitung, wie man das macht Invoking Lambda via SNS.

4

Ich habe einen Weg gefunden, den ich zur Unterstützung einer Testumgebung und einer Produktionsumgebung nutze, die Ihnen helfen werden.

Für die Testversion der Funktion, ich rufe es TEST-ConnectToRemoteTcpService und für die Produktionsversion der Funktion benenne ich die Funktion PRODUCTION-ConnectToRemoteTcpService. Dadurch kann ich den Umgebungsnamen mithilfe eines regulären Ausdrucks abrufen.

Dann speichere ich config/test.json und config/production.json in der ZIP-Datei, die ich als Code für die Funktion hochladen. Diese Zip-Datei wird in das Verzeichnis process.env.LAMBDA_TASK_ROOT extrahiert, wenn die Funktion ausgeführt wird. Also kann ich diese Datei laden und bekomme die Konfiguration, die ich brauche.

Manche Leute mögen es nicht, die Konfiguration in der Code-Zip-Datei zu speichern, was gut ist - Sie können einfach eine Datei von S3 laden oder die von Ihnen gewünschte Strategie verwenden.

-Code für die Datei aus dem zip lesen:

const readConfiguration =() => { 
    return new Promise((resolve, reject) => { 
    let environment = /^(.*?)-.*/.exec(process.env.AWS_LAMBDA_FUNCTION_NAME)[1].toLowerCase(); 
    console.log(`environment is ${environment}`); 

    fs.readFile(`${process.env.LAMBDA_TASK_ROOT}/config/${environment}.json`, 'utf8', function (err,data) { 
     if (err) { 
     reject(err); 
     } else { 
     var config = JSON.parse(data); 
     console.log(`configuration is ${data}`); 
     resolve(config); 
     } 
    }); 
    }); 
}; 
0

ein paar Optionen, auf die Sie

  • Wenn Ihre Konfiguration S3 Anwendungsfall abhängig dann Objekte und Zugang wird sich nicht ändern können von Lambda oder stellen Sie Ihr Lambda so ein, dass es bei neuen Konfigurationsänderungen ausgelöst wird. (Obwohl dies der günstigste Weg ist, sind Sie im Vergleich zu anderen Alternativen eingeschränkt)
  • Wenn sich die Konfiguration ständig ändert, dann ist DynamoDB - Schlüssel/Wert eine Alternative.
  • Wenn DynamoDB für die häufigen Lese-/Schreibvorgänge teuer ist und den Wert nicht wert ist, können Sie den TCP-Dienst nach der Konfiguration in eine SQS-Warteschlange stellen. (Oder ein SNS wenn Sie auslösen soll, wenn die Service-Beiträge eine neue config)
4

Unterstützung für Umgebungsvariablen added für AWS Lambda war ab dem 18. November 2016. Sie eine Variable zu einer vorhandenen Funktion hinzufügen können über den Befehl erfolgen Linie wie unten gezeigt oder von der AWS-Konsole.

aws lambda update-function-configuration \ 
    --function-name MyFunction \ 
    --environment Variables={REMOTE_SERVICE_IP=100.100.100.100} 

Dokumentation kann here finden.

Verwandte Themen