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
}