Lorsque je créais un script Python en utilisant la bibliothèque boto pour jouer avec AWS, j'en ai pris note car il s'inscrivait dans l'environnement Proxy. Veuillez noter que c'est proche d'un mauvais savoir-faire, ce qui n'est pas la meilleure pratique.
・ Linux (RHEL6.5) ・ Python 3.3.6 ・ AWS SDK pour Python (boto2.34.0) ・ Sous environnement proxy HTTP
Si vous utilisez Proxy, vous obtiendrez l'erreur suivante lors de l'appel de l'API.
# python3
>>> import boto.ec2
>>> conn = boto.ec2.connect_to_region(‘ap-northeast-1’)
>>> conn.get_only_instances(instance_ids=[‘i-0de8dc14’])
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
File “/opt/python3.3.6/lib/python3.3/site-packages/boto/ec2/connection.py”, line 623, in get_only_instances
next_token=next_token)
File “/opt/python3.3.6/lib/python3.3/site-packages/boto/ec2/connection.py”, line 682, in get_all_reservations
[(‘item’, Reservation)], verb=‘POST’)
File “/opt/python3.3.6/lib/python3.3/site-packages/boto/connection.py”, line 1166, in get_list
response = self.make_request(action, params, path, verb)
File “/opt/python3.3.6/lib/python3.3/site-packages/boto/connection.py”, line 1112, in make_request
return self._mexe(http_request)
File “/opt/python3.3.6/lib/python3.3/site-packages/boto/connection.py”, line 913, in _mexe
self.is_secure)
File “/opt/python3.3.6/lib/python3.3/site-packages/boto/connection.py”, line 705, in get_http_connection
return self.new_http_connection(host, port, is_secure)
File “/opt/python3.3.6/lib/python3.3/site-packages/boto/connection.py”, line 747, in new_http_connection
connection = self.proxy_ssl(host, is_secure and 443 or 80)
File “/opt/python3.3.6/lib/python3.3/site-packages/boto/connection.py”, line 796, in proxy_ssl
sock.sendall(“CONNECT %s HTTP/1.0\r\n” % host)
TypeError: ‘str’ does not support the buffer interface
Il semble que la communication SSL ne se passe pas bien, donc Lors de la connexion, j'ai pu me connecter en ajoutant ʻis_secure = False`. Cependant, comme le nom de la valeur de paramètre l'indique, il s'agit probablement d'une communication non SSL, vous devez donc faire attention à la scène d'utilisation.
>>> conn = boto.ec2.connect_to_region(‘ap-northeast-1’,is_secure=False)
>>> conn.get_only_instances(instance_ids=[‘i-0de8dc14’])
>>> [Instance:i-0de8dc14]
Il semble que la bibliothèque boto puisse être chargée avec certains paramètres lors de l'exécution.
/etc/boto.cfg
- for site-wide settings that all users on this machine > will use~/.boto
- for user-specific settings~/.aws/credentials
- for credentials shared between SDKs
En ce qui concerne Proxy, il semble bon de décrire comme suit.
~/.boto
[Boto]
proxy = myproxy.com
proxy_port = 8080
Cependant, dans mon environnement, cela ne semblait pas pouvoir être bien lu pour une raison quelconque, alors j'ai proposé un codage en dur comme mesure temporaire. Si vous avez un savoir-faire dans ce domaine, veuillez commenter.
Recommended Posts