Je viens de choisir python comme langage de script et j'essaie de comprendre comment gérer correctement les erreurs avec boto3.Boto3, python et comment gérer les erreurs
Je suis en train de créer un utilisateur IAM:
def create_user(username, iam_conn):
try:
user = iam_conn.create_user(UserName=username)
return user
except Exception as e:
return e
Lorsque l'appel à create_user réussit, je reçois un objet propre qui contient le code d'état HTTP de l'appel de l'API et les données de l'utilisateur nouvellement créé .
Exemple:
{'ResponseMetadata':
{'HTTPStatusCode': 200,
'RequestId': 'omitted'
},
u'User': {u'Arn': 'arn:aws:iam::omitted:user/omitted',
u'CreateDate': datetime.datetime(2015, 10, 11, 17, 13, 5, 882000, tzinfo=tzutc()),
u'Path': '/',
u'UserId': 'omitted',
u'UserName': 'omitted'
}
}
Cela fonctionne très bien. Mais quand cela échoue (comme si l'utilisateur existe déjà), je viens d'obtenir un objet de type botocore.exceptions.ClientError avec seulement du texte pour me dire ce qui s'est mal passé.
Exemple: ClientError (« Une erreur est survenue (EntityAlreadyExists) lors de l'appel de l'opération CreateUser. L'utilisateur avec le nom omis existe déjà »,)
Ce (AFAIK) fait erreur de manipulation très difficile parce que je ne peux pas il suffit d'activer le code d'état http résultant (409 pour l'utilisateur existe déjà en fonction des documents de l'API AWS pour IAM). Cela me fait penser que je dois faire quelque chose dans le mauvais sens. Le moyen optimal serait que boto3 ne lève jamais d'exceptions, mais il doit toujours renvoyer un objet qui reflète la façon dont l'appel API est passé. Est-ce que quelqu'un peut m'éclairer sur cette question ou me diriger dans la bonne direction?
Merci beaucoup!
Documents AWS http://botocore.readthedocs.io/en/latest/client_upgrades.html#errorhandling –