AWS Lambda admite funciones de activación de varias fuentes, incluidos eventos S3 y mensajes SQS. Sin embargo, cuando necesita que su función Lambda responda a múltiples desencadenantes, surge un dilema.
Intentó dos enfoques:
Primer enfoque:
func main() {
lambda.Start(ProcessIncomingS3Events)
lambda.Start(ProcessIncomingEvents)
}
Este método falló porque el primer activador (ProcessIncomingS3Events) siempre manejaría todos los eventos.
Segundo enfoque:
func main() {
lambda.Start(ProcessIncomingEvents)
}
En este escenario, Lambda no pudo identificar el tipo de evento, lo que generó errores "No se pudo encontrar el tipo de evento" para todos los activadores.
Para superar estas limitaciones, puede implementar un controlador de eventos múltiples utilizando la interfaz AWS Handler. A continuación se muestra una implementación de ejemplo:
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{})
}
Con este enfoque, su función Lambda puede escuchar varios eventos de AWS y manejarlos en consecuencia.
Si bien el uso de este método proporciona flexibilidad, recuerde que las funciones Lambda son diseñado para manejar un solo tipo de evento de manera efectiva. Combinar varios tipos de eventos puede presentar complejidades y problemas de rendimiento.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3