2015-09-11 1 views
0

Quand j'appelle le client.put_bucket_logging() method à boto3 afin de définir un emplacement pour les fichiers journaux d'un seau récemment créé, je reçois l'erreur suivante:Boto3 S3 client.put_bucket_logging() Brisé?

botocore.exceptions.ClientError: An error occurred (MalformedXML) when calling the 
PutBucketLogging operation: The XML you provided was not well-formed or did not 
validate against our published schema 

Amazon's documentation sur les erreurs MalformedXML indique:

This happens when the user sends malformed xml (xml that doesn't conform to the published xsd) for the configuration. The error message is, "The XML you provided was not well-formed or did not validate against our published schema."

La documentation de cette méthode est assez légère, mais ce qui existe ne mentionne rien sur le passage de xml dans les arguments. Donc, j'ai commencé à croire que cela peut être un problème avec boto3, pas les paramètres que je passe dedans. J'ai essayé de faire des ajustements pour résoudre ce problème (réduisant seulement aux arguments requis) et ai vérifié ma syntaxe, mais ne peux pas trouver une solution. Quelqu'un d'autre rencontre ce problème?

: EDITS [EXPURGÉ] REPONSE: Ci-dessous

+0

Pourriez-vous montrer comment vous appelez? Qu'est-ce que vous passez? – garnaat

+0

@gamaat ... désolé à ce sujet. Juste ajouté le script à la question. –

+0

Les documents API (http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html) semblent suggérer que si vous utilisez un type de CanonicalUser vous devez inclure l'ID ainsi que le DisplayName . – garnaat

Répondre

0

Après une enquête plus approfondie, il semble que la méthode Boto3 documentation pour client.create_bucket() manque quelques options clés pour le paramètre 'ACL. Plus précisément, il manque:

ACL = 'log-livraison-écriture'

Heureusement, le full set of options se trouve dans un lien de la documentation qui AWS @garnaat fourni. Merci pour ce pointeur.

Une fois que je mis en œuvre cette option pour le seau journal, j'ai pu activer la journalisation pour le seau exemple en utilisant client.put_bucket_logging()

kw_args = { 
'Bucket': 'example-log-bucket, 
    'ACL': 'log-delivery-write' 
} 
client.create_bucket(**kw_args) 

kw_args = { 
    'Bucket': 'example-user-bucket, 
    'ACL': 'private' 
} 
client.create_bucket(**kw_args) 

kw_args = { 
    'Bucket': 'example-user-bucket, 
    'BucketLoggingStatus': { 
     'LoggingEnabled': { 
      'TargetBucket': 'example-log-bucket', 
      'TargetPrefix': 'user/' 
     } 
    } 
} 
client.put_bucket_logging(**kw_args) 

Espérons que quelqu'un avec des privilèges auront la chance d'ajuster la documentation boto3 pour S3 à un moment donné. Il serait également bon d'avoir une tête dans la documentation sur Amazon's three pre-defined groups, car il y a beaucoup de méthodes qui accordent des autorisations aux groupes.