Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

566
Vistas
¿Cómo admitir más de un disparador en AWS Lambda en Golang?

Estoy creando una función AWS Lambda en Golang que copia el contenido de n a m cubos S3. Existe un requisito para admitir el activador de S3, así como para obtener los datos de un SQS donde se almacenan todos los cambios en el depósito S3 de origen. El código se puede encontrar aquí: https://github.com/maknahar/s3copy

Intenté lo siguiente:

 func main() { lambda.Start(ProcessIncomingS3Events) lambda.Start(ProcessIncomingEvents) } func ProcessIncomingS3Events(event events.S3Event) error { ... log.Println("Got S3 Event") return processS3Trigger(config, event) } func ProcessIncomingEvents() error { ... log.Println("Defaulting to SQS") return processSQSMessage(config) }

En este caso, el primer evento ProcessIncomingS3Events se activa cada vez.

Traté de seguir también

 func main() { lambda.Start(ProcessIncomingEvents) } func ProcessIncomingEvents(event interface{}) error { ... switch request := event.(type) { case events.S3Event: log.Println("Got S3 Event") return processS3Trigger(config, request) case types.Nil: log.Println("Defaulting to SQS") return processSQSMessage(config) default: log.Println("Could not find the event type") } return nil }

En este caso, Lambda no pudo detectar el tipo y Could not find the event type se registra en cada disparador.

¿Hay alguna manera de admitir múltiples activadores a través de AWS SDK para la función?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Logré escuchar múltiples eventos implementando la interfaz aws Handler, define un método

 Invoke(ctx context.Context, payload []byte) ([]byte, error)

Implementé un controlador de eventos múltiples de la siguiente manera

 type Handler struct { //add global variables or context information that your handler may need } func (h Handler) Invoke(ctx context.Context, data []byte) ([]byte, error) { //for demonstration purposes, not the best way to handle apiGatewayEvent := new(events.APIGatewayProxyRequest) if err := json.Unmarshal(data, apiGatewayEvent); err != nil { log.Println("Not a api gateway event") } snsEvent := new(events.SNSEvent) if err := json.Unmarshal(data, snsEvent); err != nil { log.Println("Not a sns event") } return nil, nil } func main() { lambda.StartHandler(Handler{}) }

Como puede ver, puede obtener los bytes sin procesar de cualquier evento y manejarlos según lo necesite, lo que le brinda la posibilidad de escuchar cualquier evento de aws con la misma lambda. Sin embargo, piénselo detenidamente antes de usar este enfoque porque, como se indicó anteriormente, las lambdas se usan mejor para manejar solo un tipo de evento.

Espero que esto ayude.

over 4 years ago · Santiago Trujillo Denunciar

0

Puede configurar varios orígenes de eventos para activar una o más funciones de Lambda.

Sin embargo, en Go, la llamada lambda.Start está bloqueando, por lo que no es muy fácil escribir una sola función que maneje múltiples tipos de eventos. Le recomendamos encarecidamente que cree una función Lambda independiente para cada origen de eventos.

La solución idiomática de Go es tener la lógica de su función definida una vez en el paquete principal y escribir múltiples programas que tomen el evento fuente y llamen a su función. Así que el diseño del proyecto sería:

  • s3copy/main.ir
  • s3copy/handlers/s3/main.go
  • s3copy/handlers/sqs/main.go

Consulte mi aplicación repetitiva Lambda and Go para ver un ejemplo de diseño de proyecto y Makefile.

over 4 years ago · Santiago Trujillo Denunciar

0

No soy un chico de GoLang. Solo adivinando el pensamiento de programación normal.

En el enfoque uno, está llamando directamente a ProcessIncomingS3Events en la primera declaración, por lo que cada vez que se llama esto.

Lea esto - Controlador de función Lambda (Ir)

En el enlace anterior, el autor está analizando el campo de nombre del evento. Del mismo modo, puede verificar cualquier campo que esté siempre presente en el evento S3, por ejemplo, "origen del evento": "aws: s3" (ver la estructura del evento S3 aquí )

Si está presente, entonces el evento S3 es otro. O también puede verificar el campo del evento SQS.

hola

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda