2015-09-11 1 views
0

J'ai un script python qui appelle l'API Amazon SES en utilisant boto3. Cela fonctionne quand je crée le client comme ceci client = boto3.client('ses') et permet aux qualifications d'aws de venir de ~/.aws/credentials, mais je voulais passer les aws_access_key_id et aws_secret_access_key dans le constructeur d'une manière ou d'une autre."TypeError: chaîne attendue, tuple trouvé" lors de la transmission des informations aws au constructeur du client amazon

Je pensais que je l'avais trouvé quelque part que dit qu'il était acceptable de faire quelque chose comme ça

client = boto3.client(
     'ses', 
     aws_access_key_id=kwargs['aws_access_key_id'], 
     aws_secret_access_key=kwargs['aws_secret_access_key'], 
     region_name=kwargs['region_name'] 
) 

mais lorsque je tente d'envoyer un e-mail, il me dit qu'il ya un TypeError: sequence item 0: expected string, tuple found quand il essaie de return '/'.join(scope) au botocore/auth.py (line 276).

Je sais que c'est un peu long, mais j'espérais que quelqu'un a une idée de la façon dont je peux transmettre ces informations d'identification au client d'un endroit autre que le fichier de références aws. J'ai aussi la trace complète de la pile de l'erreur, si cela est utile, je peux le poster aussi bien. Je ne voulais tout simplement pas encombrer la question au départ.

+0

Quelles sont les valeurs du 3 ' Les clés de kwargs? –

+0

Les deux clés aws du même nom, puis 'us-east-1' pour la région – wpercy

+0

Il est probablement tard, mais j'ai trouvé votre question à la recherche de la même erreur que vous aviez. Le problème était que j'ai laissé par erreur une virgule (,) après ma variable de paramètres ACCESS_KEY et que Python était, évidemment, l'interprétant comme un tuple, pas une chaîne. Supprimer la virgule l'a résolu (sans avoir besoin d'utiliser boto3.session –

Répondre

2

Vous devez configurer vos informations de connexion ailleurs et puis se connecter avec:

client = boto3.client('ses', AWS_REGION) 

Une autre façon, en utilisant Session peut être fait comme ceci:

from boto3.session import Session 

# create boto session 
session = Session(
     aws_access_key_id=settings.AWS_ACCESS_KEY_ID, 
     aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY, 
     region_name=settings.AWS_REGION 
    ) 

# make connection 
client =session.client('s3') 
+0

Quelle est la différence entre appeler 'boto3.client ('ses')' et ' session.client ('ses') 'if any? Je vais essayer de passer les informations d'identification comme ceci .. – wpercy

+0

Etes-vous sûr que vous chargez vos informations d'identification correctement? Ils devraient être juste des chaînes.La description de la session est affichée ici dans les docs: http://boto3.readthedocs.org/en/latest/reference/core/session.html?highlight=session#module-boto3.session – djq