Connect to 3D printer via internet without router My problem:
I need to connect to my 3D printer via the internet from an Android app (using IP address and API key).
My 3D printer is based on Marlin firmware latest and connected to a Raspberry Pi running OctoPi. I don't want to use a router and port forward it, because the Raspberry will be connected to internet via a Wi-Fi hotspot.
My question:
Is it possible to control the printer using a cloud platform or a server (another Raspberry Pi) if my OctoPi Raspberry Pi can access the internet? If it is possible, how can one do it?
Any suggestions or solutions are welcome.
There are a few solutions, but each one needs to match same criteria: an open network socket visible outside the local network.

So from TCP/IP protocol theory, we don't even need to have an IP address to send a packet to another computer as we can use layer One which is just the MAC address to identify the receiver. But things become more complicated when we have to provide a link to two separate endpoints.

Basic requirements:


We need to know public accessible IP address and port that server is exposed (listening) on
We can have a DNS entry that will be translated to public IP, but that assume that public IP is same all the time (or we have a dynDNS service)


Solutions:


Have the RPi exposed with public IP address and routed properly; 
Create a VPN bridge from RPi to your home/cloud network and connect Android to the same VPN;
Do a port forwarding to RPi from public IP and expose that in the firewall.


So at this point, if you don't have admin access to network devices then only solution '2' is viable, IMHO.