In my opinion, the most straight forward way to implement your architecture, is to build your dedicated server with Unreal, then use GameLift to host and scale instances of it. Your gameplay related networking can be between the Unreal client and Unreal dedicated server and just handled through OnlineSubsystemNull and the built-in networking features of UE4. GameLift hosts your unreal servers and acts as a master server so you’re Unreal client can retrieve a list of available servers and the ip/port connection information for a choosen server so it can connect your client to a game session.
Gamelift also has some basic match making features and some other API functions you’ll need to handle for your game. Since you mentioned PHP for your back-end, you can use the AWS PHP SDK to integrate GameLift into your PHP back-end API. You could then keep things fairly simple on the Unreal-side and just use a plug-in like VARest from to consume ( call ) your PHP API and let your PHP back-end handle the various API calls to GameLift for server registration, health updates, etc… It’s been a bit since I last checked in on GameLift, so there may be new features that might make integrating their SDK’s into Unreal more compelling so make sure you check out the docs and look at your integration options to get things up and running.
So something along those lines makes sense I think if you’d like to use GameLift… Hopefully this gives you some insight.