Auto Scaling Group rollout leaves instances InService=false after lifecycle-hook timeout during AMI-based bootstrap
Environment
AWS account, eu-west-1. Auto Scaling Group (ASG) using a Launch Template created from a Packer-built AMI. ASG configured for rolling updates with lifecycle hook 'autoscaling:EC2_INSTANCE_LAUNCHING' (timeout 3600s). Instances boot in private subnets without public IP; they must reach S3 and AWS SSM to fetch secrets during cloud-init.
Symptoms
New deployment: ASG starts replacement instances but they remain InService=false. ELB health checks show Unhealthy for the new instances. Old instances are terminated at end of lifecycle and capacity drops. No application traffic reaches new nodes.
Observations
Instance console via EC2 shows cloud-init user-data hanging at 'Waiting for secrets-service'. /var/log/cloud-init-output.log shows repeated HTTP 403 when calling SSM GetParameters and 'Unable to access S3 bucket' errors. Systemd service that registers node with config-management never reaches 'active'. ASG lifecycle hook remains in Pending:Wait state until timeout then marks instance Failed and ASG rolls back.
Already attempted
Increased lifecycle timeout temporarily to 2 hours (no change). Launched identical Launch Template manually with an interactive EC2 instance in same subnet; from that instance curl to SSM and S3 endpoints fails with TLS handshake errors. Tested with a public-subnet EC2 using same IAM role — calls succeed. Compared instance profile policy; launch template references correct role.
Question
What are the most likely causes for new ASG instances being unable to reach AWS APIs during lifecycle hook bootstrap, and what reversible diagnostics and mitigations can I run to restore rolling updates without a full AMI rebuild?
Verified community troubleshooting
No answers yet..
Incident analysis
Most likely causes
Summary
Suggested Fixes
Continue troubleshooting
Related troubles
Matched from the title, description and tags