func()

in pkg/monitor/sqsevent/asg-lifecycle-event.go [201:233]


func (m SQSMonitor) recordLifecycleActionHeartbeat(lifecycleDetail *LifecycleDetail) error {
	input := &autoscaling.RecordLifecycleActionHeartbeatInput{
		AutoScalingGroupName: aws.String(lifecycleDetail.AutoScalingGroupName),
		LifecycleHookName:    aws.String(lifecycleDetail.LifecycleHookName),
		LifecycleActionToken: aws.String(lifecycleDetail.LifecycleActionToken),
		InstanceId:           aws.String(lifecycleDetail.EC2InstanceID),
	}

	// Stop the heartbeat if the target is invalid
	_, err := m.ASG.RecordLifecycleActionHeartbeat(input)
	if err != nil {
		var awsErr awserr.Error
		log.Warn().
			Str("asgName", lifecycleDetail.AutoScalingGroupName).
			Str("lifecycleHookName", lifecycleDetail.LifecycleHookName).
			Str("lifecycleActionToken", lifecycleDetail.LifecycleActionToken).
			Str("instanceID", lifecycleDetail.EC2InstanceID).
			Err(err).
			Msg("Failed to send lifecycle heartbeat")
		if errors.As(err, &awsErr) && awsErr.Code() == "ValidationError" {
			return err
		}
		return nil
	}

	log.Info().
		Str("asgName", lifecycleDetail.AutoScalingGroupName).
		Str("lifecycleHookName", lifecycleDetail.LifecycleHookName).
		Str("lifecycleActionToken", lifecycleDetail.LifecycleActionToken).
		Str("instanceID", lifecycleDetail.EC2InstanceID).
		Msg("Successfully sent lifecycle heartbeat")
	return nil
}