Amazon s3 如何中止bucket的所有未完成的多部分上载
有时,由于某些原因,多部分上载会挂起或无法完成。在这种情况下,您会被孤立的零件卡住,这些零件很难移除。您可以通过以下方式列出它们:Amazon s3 如何中止bucket的所有未完成的多部分上载,amazon-s3,jq,aws-cli,Amazon S3,Jq,Aws Cli,有时,由于某些原因,多部分上载会挂起或无法完成。在这种情况下,您会被孤立的零件卡住,这些零件很难移除。您可以通过以下方式列出它们: aws s3api list-multipart-uploads --bucket $BUCKETNAME 我正在寻找方法来中止它们。假设您有awscli所有设置,并且它将输出JSON,您可以使用jq投射所需的密钥: BUCKETNAME=<xxx> aws s3api list-multipart-uploads --bucket $BUCKETNA
aws s3api list-multipart-uploads --bucket $BUCKETNAME
我正在寻找方法来中止它们。假设您有
awscli
所有设置,并且它将输出JSON,您可以使用jq
投射所需的密钥:
BUCKETNAME=<xxx>
aws s3api list-multipart-uploads --bucket $BUCKETNAME \
| jq -r '.Uploads[] | "--key \"\(.Key)\" --upload-id \(.UploadId)"' \
| while read -r line; do
eval "aws s3api abort-multipart-upload --bucket $BUCKETNAME $line";
done
BUCKETNAME=
aws s3api列表多部分上载--bucket$BUCKETNAME\
|jq-r'.Uploads[]|“--key\”\(.key)\“--upload id\(.UploadId)”'\
|而read-r行;做
eval“aws s3api中止多部分上传——bucket$BUCKETNAME$line”;
完成
您可以设置生命周期规则,以便在一段时间后自动清除这些规则。下面是一篇博客文章,演示如何在控制台中执行此操作:
要在boto3中执行此操作:
import boto3
s3 = boto3.client('s3')
try:
lifecycle = s3.get_bucket_lifecycle(Bucket='bucket')
except ClientError:
lifecycle = {'Rules': []}
lifecycle['Rules'].append({
'ID': 'PruneAbandonedMultipartUploads',
'Status': 'Enabled',
'Prefix': '',
'AbortIncompleteMultipartUpload': {
'DaysAfterInitiation': 7
}
})
s3.put_bucket_lifecycle(Bucket='bucket', LifecycleConfiguration=lifecycle)
在cli中添加该配置将非常相似:
$ aws s3api get-bucket-lifecycle --bucket bucket > lifecycle.json
# Edit the lifecycle, adding the same configuration as in the boto3 sample
$ aws s3api put-bucket-lifecycle --bucket bucket --lifecycle-configuration file://lifecycle.json
如果bucket上没有生命周期策略,get bucket lifecycle
将引发ClientError
。一个健壮的实现将确保返回正确的错误
仅具有该配置的策略如下所示:
{
"Rules": [
{
"ID": "PruneAbandonedMultipartUpload",
"Status": "Enabled",
"AbortIncompleteMultipartUpload": {
"DaysAfterInitiation": 7
}
}
]
}
您也可以使用它,因为它是开源的,并且与AWS S3兼容
列出关联bucket上所有未完成的上载
$ mc ls -I s3/mybucketname
删除所有未完成的上传到相关S3存储桶
$ mc rm -I -r --force s3/mybucketname
I=不完整
r=递归
f=带强制选项
希望能有帮助
免责声明:我为。如果您正在进行多部分上传,您也可以执行清理表单S3管理控制台 a) 打开你的S3桶 b) 切换到管理选项卡 c) 单击添加生命周期规则 d) 现在,在第一步中键入规则名称,并选中清除不完整的多部分上载复选框。现在您还可以键入保留未完成零件的天数 就这样。您也可以在附加的屏幕截图中看到这些步骤
这是我的oneliner,它将中止所有多部分上传,不管状态如何,假设您的密钥/文件名中没有空格
BUCKETNAME=<xxx>;aws s3api list-multipart-uploads --bucket $BUCKETNAME --query 'Uploads[].[Key, UploadId]' --output text | awk '{print "aws s3api abort-multipart-upload --upload-id "$2" --bucket $BUCKETNAME --key " $1 " & wait"}{}' | bash
BUCKETNAME=;aws s3api列表多部分上载--bucket$BUCKETNAME--查询'uploads[].[Key,UploadId]'--输出文本| awk'{print“aws s3api中止多部分上载--上载id“$2”--bucket$BUCKETNAME--Key“$1”&wait”}{}bash
Riz一个问题:如果今天(8月13日)我设置了多部分清理规则(1天)。那么,此规则是否会删除1日(8月10日)之前创建的对象?