9
boto3でエラーを処理する方法
boto3で適切なエラー処理を行う方法を理解しようとしています。 IAMユーザーを作成しようとしています: def create_user(username, iam_conn): try: user = iam_conn.create_user(UserName=username) return user except Exception as e: return e create_userの呼び出しが成功すると、API呼び出しのhttpステータスコードと新しく作成されたユーザーのデータを含むきちんとしたオブジェクトが取得されます。 例: {'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' } } これはうまくいきます。しかし、これが失敗した場合(ユーザーが既に存在する場合など)、botocore.exceptions.ClientError型のオブジェクトを取得し、テキストのみで何が問題かを通知します。 例:ClientError( 'CreateUser操作の呼び出し時にエラーが発生しました(EntityAlreadyExists):省略された名前のユーザーはすでに存在しています。'、) この(AFAIK)では、結果のhttpステータスコードをオンにできないため、エラー処理が非常に困難になります(IAMのAWS APIドキュメントによると、ユーザーの409はすでに存在しています)。これは私が何か間違った方法をしているに違いないと思います。最適な方法はboto3が例外をスローしないことですが、Jutは常にAPI呼び出しがどのように行われたかを反映するオブジェクトを返します。 …