After setting up my (first) Launch Cloud Service, it looks like the AEM Author environment is linked to my Launch Staging embed code and the AEM Publish environment to the Launch Production embed code.
Is it the expected design?
Let's say I have 3 AEM instances, Dev, Staging and Prod.
I would like the AEM Dev instance to be tied to the Dev Launch embed code for both environments (Author and Publish).
I would like the AEM Staging instance to be tied to the Staging Launch embed code for both environments (Author and Publish).
And I would like the AEM Production instance to be tied to the Launch Staging embed code for AEM Author and Production Launch embed code for AEM Publish, which is the current design.
We had similar issue with the DTM Cloud Service but at least, we were able to override these settings in the DTM cloud service UI.
How can I do this with the Launch Cloud Service? Do we need to alter these settings in the CRXDE directly?
Would be really great if we could map each AEM instance to whatever Launch embed code we want, directly in the Cloud Service UI.
Unless I'm missing something?
Please have a look at this  documentation.
By default, Stage would link to stage and prod to prod (It is expected | header code is fetched in that way).
But, to have prod on stage, we do have an option "Include Production Code on Author", you can check this. This documentation covers all aspects that you are trying to achieve. HTH
As far as Launch is concerned, you can have as many environments as you'd like. By default, there are 3 (Development, Staging, and Production) however you can create more if you desire. Here is some helpful documentation around creating and managing environments in Launch.
As for the AEM integration, I'll have to leave that to someone on the AEM team that is more familiar with it. @kautuk_sahni Do you have any additional info you could share here?
As an alternative, you might be able to manually configure this by using the embed codes from Launch and including them manually in your instances rather than relying on an integration that may or may not support your use case.