Niros
Niros

Reputation: 642

How to set DNS server and network interface to boto3?

I would like to upload files to S3 using boto3. The code will run on a server without DNS configured and I want that the upload process will be routed through a specific network interface.

Any idea if there's any way to solve these issues?

Upvotes: 0

Views: 867

Answers (2)

Niros
Niros

Reputation: 642

As for setting a network interface, I did a workaround that allows to set the source ip for each connection made by boto.

Just change awsrequest.py AWSHTTPConnection class with the following:

a) Before init() of AWSHTTPConnection add:

source_address = None    

b) Inside the init() add:

if AWSHTTPConnection.source_address is not None:
        kwargs["source_address"] = AWSHTTPConnection.source_address

Now, from your code you should do the following before you start using boto:

from botocore.awsrequest import AWSHTTPConnection
AWSHTTPConnection.source_address = (source_ip_str, source_port)

Use source_port = 0 in order to let OS choose random port (you probably want this option, see python socket docs for more details)

Upvotes: 0

Vorsprung
Vorsprung

Reputation: 34387

1) add the end point addresses for s3 to /etc/hosts, see this list http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

2) configure a specific route to the network interface, see this info on superuser https://superuser.com/questions/181882/force-an-application-to-use-a-specific-network-interface

Upvotes: 1

Related Questions