Phase 4 — watch it balance
Ask the load balancer ten times and look only at which beacon answered:
for i in $(seq 10); do curl -s http://<ALB-DNS-NAME>/hello | grep -o '"beacon_id":"[^"]*"'; done
Two different IDs, in no fixed order. The ALB is two nodes, one per zone, and its DNS name resolves to both; each node hands its own requests to the targets in turn, and your laptop picks a node per connection. Over ten requests both IDs appear, about half each.
Now the health check. You cannot stop a beacon by hand here (no SSH), so use the target group instead: Targets → select app-1 → Deregister. Within a moment the loop shows only app-2's ID. Register it again and both are back. When a real target stops answering, the health check does the same deregistering on its own, and that is what keeps a service up while one machine is down.