問題の説明
PutBucketLifecycle リクエストが失敗するのは、リクエストボディの XML 内にある Expiration 要素に必須の子要素が含まれていないためです。
原因
Expiration 要素に ExpiredObjectDeleteMarker が存在しない場合、またはその値が false の場合は、Days または CreatedBeforeDate のいずれかを必ず含める必要があります。両方を省略すると、リクエストは失敗します。
例
以下のリクエストボディでは、Expiration 要素に子要素がまったく含まれていないため、エラーが発生します。
PUT /?lifecycle HTTP/1.1
Host: oss-example.oss.aliyuncs.com
Content-Length: 336
Date: Mon , 6 May 2019 15:23:20 GMT
Authorization: OSS LTAI**************:77Dv****************
<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration>
<Rule>
<ID>rule1</ID>
<Prefix>zzz</Prefix>
<Status>Enabled</Status>
<Expiration>
</Expiration>
</Rule>
</LifecycleConfiguration>ソリューション
リクエストボディの XML 内にある Expiration 要素に、以下のいずれかの子要素を追加してください。
| 要素 | 説明 | 形式 |
|---|---|---|
Days | オブジェクトの最終更新日からライフサイクルルールを適用するまでの日数 | 整数 |
CreatedBeforeDate | カットオフ日。OSS はこの日付より前に最終更新されたオブジェクトに対してライフサイクルアクションを適用します | yyyy-MM-ddT00:00:00.000Z(ISO 8601、協定世界時 (UTC)) |
オプション 1:Days を使用する
PUT /?lifecycle HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Content-Length: 336
Date: Mon , 6 May 2019 15:23:20 GMT
Authorization: OSS LTAI**************:77Dv****************
<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration>
<Rule>
<ID>rule1</ID>
<Prefix>zzz</Prefix>
<Status>Enabled</Status>
<Expiration>
<Days>200</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>オプション 2:CreatedBeforeDate を使用する
<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration>
<Rule>
<ID>rule1</ID>
<Prefix>zzz</Prefix>
<Status>Enabled</Status>
<Expiration>
<CreatedBeforeDate>2024-01-01T00:00:00.000Z</CreatedBeforeDate>
</Expiration>
</Rule>
</LifecycleConfiguration>また、リクエストボディを手動で作成せずに、OSS コンソールでライフサイクルルールを設定することもできます。