2014-07-08 6 views
0

J'ai utilisé boto pour interagir avec S3 sans problème, mais maintenant j'essaye de me connecter à AWS Support API pour récupérer des informations sur les tickets ouverts, les résultats du conseiller de confiance, etc. Il semble que la bibliothèque boto a différentes méthodes de connexion pour chaque service AWS? Par exemple, avec S3 est:Utilisation de Python Boto avec AWS Support API

conn = S3Connection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) 

Selon les boto docs, les éléments suivants doivent travailler pour se connecter à l'API AWS Support:

>>> from boto.support.connection import SupportConnection 
>>> conn = SupportConnection('<aws access key>', '<aws secret key>') 

Cependant, il y a quelques problèmes que je vois après avoir creusé à travers le code source. Premièrement, boto.support.connection n'existe pas réellement. boto.connection le fait, mais il ne contient pas de classe SupportConnection. boto.support.layer1 existe et possède la classe SupportConnection, mais n'accepte pas les arguments clés comme le suggère la documentation. Au lieu de cela, il faut 1 argument - un objet AWSQueryConnection. Cette classe est définie dans boto.connection. AWSQueryConnection prend 1 argument - un objet AWSAuthConnection, classe également définie dans boto.connection. Enfin, AWSAuthConnection prend un objet générique, avec les exigences définies dans initialisation comme:

class AWSAuthConnection(object): 
    def __init__(self, host, aws_access_key_id=None, 
       aws_secret_access_key=None, 
       is_secure=True, port=None, proxy=None, proxy_port=None, 
       proxy_user=None, proxy_pass=None, debug=0, 
       https_connection_factory=None, path='/', 
       provider='aws', security_token=None, 
       suppress_consec_slashes=True, 
       validate_certs=True, profile_name=None): 

Alors, pour le plaisir, j'ai essayé de créer une AWSAuthConnection par touches passant, suivi par AWSQueryConnection (awsauth), suivi par SupportConnection (awsquery), sans chance. C'était dans un script. Mon dernier point d'intérêt est que, avec mes clés définies dans un fichier .boto dans mon répertoire de base, et en exécutant l'interpréteur python à partir de la ligne de commande, je peux faire un import direct et appel à SupportConnection() (sans arguments) et il fonctionne. Il s'agit clairement de récupérer mes clés du fichier .boto et de les consommer, mais je n'ai pas analysé chaque ligne de code source pour comprendre comment, et franchement, j'espère ne pas le faire. En bref, j'espère que quelqu'un connaîtra bien boto et se connectera à l'API AWS autre que S3 (la majeure partie du matériel qui existe via google) pour m'aider à résoudre d'autres problèmes.

+0

Question similaire avec quelques conseils: http://stackoverflow.com/a/21345540/346478. En général, les informations d'identification sont gérées de la même manière pour S3 et les autres services. –

Répondre

2

Cela devrait fonctionner:

import boto.support 
conn = boto.support.connect_to_region('us-east-1') 

Cela suppose que vous avez des informations d'identification dans votre fichier de configuration boto ou dans un rôle IAM. Si vous voulez passer des informations d'identification explicites, faites ceci:

import boto.support 
conn = boto.support.connect_to_region('us-east-1', aws_access_key_id="<access key>", aws_secret_access_key="<secret key>") 

Cette base devrait travailler incantatoire pour tous les services dans toutes les régions. Il suffit d'importer le bon module (par exemple boto.support ou boto.ec2 ou boto.s3 ou autre), puis d'appeler sa méthode connect_to_region, en fournissant le nom de la région que vous voulez en paramètre.

+0

Merci - pouvez-vous élaborer sur comment/où les clés sont transmises à AWS? Sur ma machine locale, le fichier .boto fonctionne, mais qu'en est-il si je déplace du code vers un serveur prod où je dois passer des clés via des variables env, ou même comme des arguments pour un constructeur? – David

+0

J'ai mis à jour l'exemple. J'espère que cela pourra aider. – garnaat

+0

Oui, ça l'a fait, merci! Les documents boto doivent être un peu datés. http://boto.readthedocs.org/en/latest/support_tut.html conduit avec l'approche que j'ai essayée, bien qu'il fasse référence à un "raccourci" un peu plus bas qui est essentiellement ce que vous avez fourni ici. Même dans ce cas, il n'est pas évident que je puisse passer les clés dans connect_to_region(), donc j'aurais probablement posté ici à ce propos. Merci! – David

Questions connexes