AWS Lambda unterstützt Triggerfunktionen aus verschiedenen Quellen, einschließlich S3-Ereignissen und SQS-Nachrichten. Wenn Ihre Lambda-Funktion jedoch auf mehrere Auslöser reagieren muss, entsteht ein Dilemma.
Sie haben zwei Ansätze versucht:
Erster Ansatz:
func main() {
lambda.Start(ProcessIncomingS3Events)
lambda.Start(ProcessIncomingEvents)
}
Diese Methode ist fehlgeschlagen, weil der erste Trigger (ProcessIncomingS3Events) immer alle Ereignisse verarbeiten würde.
Zweiter Ansatz:
func main() {
lambda.Start(ProcessIncomingEvents)
}
In diesem Szenario konnte Lambda den Ereignistyp nicht identifizieren, was zu Fehlern „Der Ereignistyp konnte nicht gefunden werden“ für alle Trigger führte.
Um diese Einschränkungen zu überwinden, können Sie mithilfe der AWS-Handler-Schnittstelle einen Multi-Event-Handler implementieren. Hier ist eine Beispielimplementierung:
type Handler struct {
// Define global variables or context information
}
func (h Handler) Invoke(ctx context.Context, data []byte) ([]byte, error) {
// Unmarshal the data based on different event types
var apiGatewayEvent events.APIGatewayProxyRequest
if err := json.Unmarshal(data, &apiGatewayEvent); err == nil {
// Handle API Gateway event
}
var snsEvent events.SNSEvent
if err := json.Unmarshal(data, &snsEvent); err == nil {
// Handle SNS event
}
return nil, nil
}
func main() {
lambda.StartHandler(Handler{})
}
Mit diesem Ansatz kann Ihre Lambda-Funktion verschiedene AWS-Ereignisse abhören und entsprechend behandeln.
Auch wenn die Verwendung dieser Methode Flexibilität bietet, denken Sie daran, dass Lambda-Funktionen dies tun Entwickelt, um eine einzelne Art von Ereignis effektiv zu bewältigen. Das Mischen mehrerer Ereignistypen kann zu Komplexität und Leistungsproblemen führen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3