3

最近作成されたバケットのログ ファイルの場所を定義するために boto3 でclient.put_bucket_logging() メソッドを呼び出すと、次のエラーが表示されます。

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 のMalformedXML エラーに関するドキュメントには、次のように示されています。

これは、ユーザーが構成のために不正な形式の xml (公開された xsd に準拠していない xml) を送信した場合に発生します。エラー メッセージは、「提供された XML の形式が正しくないか、公開されたスキーマに対して検証されませんでした」です。

このメソッドのドキュメントはかなり無駄がありませんが、xml を引数に渡すことについては何も言及されていません。そのため、これは boto3 に問題がある可能性があると考え始めました。これは、渡したパラメーターではありません。この問題を解決するために調整を試み (必要な引数のみに削減)、構文を再確認しましたが、解決策が見つかりません。他の誰かがこの問題に遭遇しましたか?

編集: [編集済み] 回答: 以下

4

2 に答える 2

2

さらに調査した結果、client.create_bucket() メソッドのBoto3 ドキュメントには、「ACL」パラメーターのいくつかの重要なオプションが欠落しているようです。具体的には、次のものがありません。

ACL='ログ配信書き込み'

幸いなことに、オプションの完全なセットは、@garnaat が提供した AWS ドキュメントのリンクにあります。そのポインタをありがとう。

ログ バケットにこのオプションを実装すると、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)

特権を持つ誰かが、ある時点で S3 の boto3 ドキュメントを調整する機会を得ることを願っています。グループにパーミッションを付与する方法はたくさんあるので、Amazon の 3 つの事前定義されたグループに関するドキュメントを参照してください。

于 2015-09-11T19:00:21.253 に答える