来自S3 Multiple Objects Delete的错误JSON响应

时间:2016-10-11 23:01:18

标签: amazon-web-services amazon-s3 boto3

我正在尝试删除S3项目列表,但注意到API调用的响应似乎不正确:

根据API,response仅应包含已删除列表:

  

已删除

     

成功删除的容器元素。它确定了   已成功删除的对象。

     

儿童:Key,VersionId

     

类型:容器

     

祖先:DeleteResult

delete_json是:

{
   'Objects':[
      {
         'Key':'test1'
      },
      {
         'Key':'test2'
      },
      {
         'Key':'test3'
      },
      {
         'Key':'test4'
      }
   ],
   'Quiet':False
}

要删除的Python代码:

response = self.client.delete_objects(Bucket=s3_bucket, Delete=delete_json)

,回复是:

{
   'Deleted':[
      {
         'DeleteMarkerVersionId':'null',
         'Key':'test1',
         'DeleteMarker':True
      },
      {
         'DeleteMarkerVersionId':'null',
         'Key':'test2',
         'DeleteMarker':True
      },
      {
         'DeleteMarkerVersionId':'null',
         'Key':'test3',
         'DeleteMarker':True
      },
      {
         'DeleteMarkerVersionId':'null',
         'Key':'test4',
         'DeleteMarker':True
      }
   ],
   'ResponseMetadata':{
      'HostId':'JDl4XNrK02lfBLXCDDIJjuPXG6tOovOp0dtCv7eMlHc0hGC2L7eSV/wb/XRBFyYQ9mHHzb0O/Yg=',
      'HTTPStatusCode':200,
      'RequestId':'2F2A9FAE7F906B8'
   }
}

这是一个错误吗?

1 个答案:

答案 0 :(得分:1)

正如您在评论中确认的那样,此存储桶启用了版本控制,随后被暂停。

这与从未启用过版本控制的存储桶不同。一旦存储桶启用了版本控制,它始终将成为版本化存储桶,但新对象,覆盖和删除的版本控制行为是不同的。

从API文档中,您引用的页面:

  

由于在存储桶上启用了版本控制,因此Amazon S3不会删除该对象。相反,它会为此对象添加删除标记。响应表明添加了删除标记(响应中的DeleteMarker元素为true)以及它添加的删除标记的版本号。

获取该信息,然后将版本控制暂停时必须遵循的行为添加到其中。删除标记的版本号为null,因为这是删除标记在版本控制暂停存储区中的工作方式。删除标记替换对象的null版本(如果存在),并假定其身份为null

http://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectsfromVersioningSuspendedBuckets.html

如果它不是对象的null版本,那么你的删除操作可能实际上并没有删除所需的对象。该对象似乎只会被删除。

API响应似乎是正确的。