Connecting a Embedded Device from Cloud
It's easier to tell all your devices "where the server is" than it is to tell your server "where all the devices are". It's much easier to ensure that a single server is reachable from all your devices than it is to ensure all of your devices are reachable from your server.

So normally you would have the embedded devices connect to the server rather than vice-versa. If you need to be able to request/control stuff then it's pretty easy to keep a TCP connection open continuously. Just make sure you put in place a protocol for checking the connection is still alive and if-no reestablishing it.

Depending on deployment scenarios it may be acceptable to hardcode the server address when the embedded devices are built or it may be nessacery to make that configuraable.