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
Antwort
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.
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);
}
});
});
};
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)
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.
- 1. Rails: Laufzeitkonfiguration von ActionMailer?
- 2. .NET Roslyn: Laufzeitkonfiguration
- 3. Get gralle Laufzeitkonfiguration aus Java-Datei
- 4. Laufzeitkonfiguration in .Net (speziell die EntLib)
- 5. AWS SNS als Quelle für AWS Lambda
- 6. AWS SQS-Berechtigungen für AWS Lambda
- 7. Spring: wie transparente Laufzeitkonfiguration der veränderbaren Eigenschaft zu tun
- 8. AWS Cognito für Xamarin
- 9. So geben Sie AWS-Credentials für .NET AWS SDK an
- 10. AWS IAM Politik für SQS
- 11. Stündliche Sicherungen für AWS-Instanzen
- 12. AWS SQS-Aufbewahrungszeitraum für Nachrichten
- 13. AWS SDK v2 für s3
- 14. AWS SES Unterstützung für Singapur
- 15. Empfohlener AWS-Speichertyp für Cassandra?
- 16. Ressourcenbeschränkungen für temporäre AWS-Sicherheitsanmeldeinformationen
- 17. mit aws sdk für java in Jruby
- 18. Implementieren der Idempotenz für AWS-Spot-Instanzanforderungen
- 19. Überprüfung lokaler Dateien für aws s3 Namenskompatibilität
- 20. PgAgent auf AWS RDS für Postgres installieren
- 21. AWS EC2: IAM-Richtlinie für ec2: RequestSpotInstances
- 22. alternative appspec.yml Speicherort für AWS CodePipeline/CodeDeploy
- 23. Bereitstellung für separate Konten mit aws cli
- 24. DBA für MongoDB auf AWS auslagern?
- 25. Logstash-Ausgabe für Elasticsearch auf AWS EC2
- 26. Zugriff verweigert für SQS über AWS SDK
- 27. aws api gateway api_key für Authentifizierung aktivieren
- 28. Kann keine Einträge für AWS importieren Lambda
- 29. Gutes Setup auf AWS für ELK
- 30. AWS oder Google für einen dedizierten Rechenknoten
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