in pkg/monitor/sqsevent/sqs-monitor.go [159:189]
func (m SQSMonitor) processLifecycleEventFromASG(message *sqs.Message) (EventBridgeEvent, error) {
log.Debug().Interface("message", message).Msg("processing lifecycle event from ASG")
eventBridgeEvent := EventBridgeEvent{}
if message == nil {
return eventBridgeEvent, fmt.Errorf("ASG event message is nil")
}
lifecycleEvent, err := parseLifecycleEvent(*message.Body)
switch {
case err != nil:
return eventBridgeEvent, fmt.Errorf("parsing lifecycle event messsage from ASG: %w", err)
case lifecycleEvent.Event == TEST_NOTIFICATION || lifecycleEvent.LifecycleTransition == TEST_NOTIFICATION:
err := fmt.Errorf("message is a test notification")
if errs := m.deleteMessages([]*sqs.Message{message}); errs != nil {
err = multierr.Append(err, errs[0])
}
return eventBridgeEvent, skip{err}
case lifecycleEvent.LifecycleTransition != ASGTerminatingLifecycleTransition &&
lifecycleEvent.LifecycleTransition != ASGLaunchingLifecycleTransition:
return eventBridgeEvent, fmt.Errorf("lifecycle transition must be %s or %s. Got %s", ASGTerminatingLifecycleTransition, ASGLaunchingLifecycleTransition, lifecycleEvent.LifecycleTransition)
}
eventBridgeEvent.Source = "aws.autoscaling"
eventBridgeEvent.Time = lifecycleEvent.Time
eventBridgeEvent.ID = lifecycleEvent.RequestID
eventBridgeEvent.Detail, err = json.Marshal(lifecycleEvent)
return eventBridgeEvent, err
}