The app servers were dropped in a public subnet for one reason: they need outbound internet access to pull packages and patches. But that also leaves them exposed.
By the end, the app tier should be unreachable from the internet directly — reachable only via the ALB — while still able to reach out for package and patch updates. The ALB stays the one public entry point.