For example , I am living in Spain , my home link is 500 Mbps , I have a server in USA Los Angeles , the server uplink is 1Gbps , that does NOT mean I have full 500 Mbps speed when I transfer files between my computer and my server, I most likely get like 10 Mbps at best.
Another example , I am in Spain , I have 2 servers in German
my connection to one of my server is straight like Spain → France → German , in this case I will probably have like 400 Mbps
my connection to other server, could have a crazy routing like this: Spain → France → England → United States → Canada → Japan → Russian → Ukraine → Poland → German and in this case, my connection is probably like 50 kbps.
So you have 30 mbps on your internet , does not mean you will have that 30 mbps full on your connection to server.
and different provider could have different routing with different ISP.
Use any vpn then try to upload. Hopefully speed will improve. Last time I have faced similar issue after purchasing cloud from Alibaba china location. It’s closer from my location but unfortunately I got only 10-20 Kbps speed. After checking trace route and mtr I found surprising data. My connection forwarded (routed) 10-15 times and some of them were dead. My server has 200 Mbps and my net has 30 Mbps speed. Still faced this due to packet loss. Also ping was 400+ when it should be not more than 40ms. So I checked from other isp and mobile network and found all have same issue. Any network from my country can’t establish direct/shorter connection without packet loss . Eventually I have changed server location and solved the issue. You can try to change location and see.
Upcloud is also good option. I have no complaint against gcp or aws except they are too expensive in price.