数字海洋空间|添加s3cmd文件的过期日期

时间:2017-10-09 19:53:24

标签: digital-ocean s3cmd

我尝试将expire days添加到文件和存储桶但是我遇到了这个问题:

sudo s3cmd expire s3://<my-bucket>/ --expiry-days=3 expiry-prefix=backup

错误:解析xml时出错:语法错误:第1行,第0列 错误:未找到 错误:S3错误:404(未找到)

和这个

sudo s3cmd expire s3://<my-bucket>/<folder>/<file> --expiry-day=3

错误:参数问题:仅使用桶名设置而不是's3:////'

来期待S3 URI

如何使用s3cmd在DO空间中为文件夹或文件添加过期天数?

3 个答案:

答案 0 :(得分:0)

数字海洋空间未实施expire选项

答案 1 :(得分:0)

考虑配置Bucket的生命周期规则

  

生命周期规则可用于在“生命”过程中对空间中的对象执行不同的操作。例如,可以配置Space以使其中的对象过期并在一段时间后自动删除。

     

要配置新的生命周期规则,请向PUT

发送${BUCKET}.${REGION}.digitaloceanspaces.com/?lifecycle个请求      

请求正文应包含一个名为LifecycleConfiguration的XML元素,其中包含Rule个对象的列表。

https://developers.digitalocean.com/documentation/spaces/#get-bucket-lifecycle

答案 2 :(得分:0)

感谢 Vitalii 对 API 的回答。

但是 API 不是很容易使用,所以我是通过 NodeJS 脚本完成的。

首先,在此处生成您的 API 密钥:https://cloud.digitalocean.com/account/api/tokens

并将它们放入 ~/.aws/credentials 文件 (according to docs):

[default]
aws_access_key_id=your_access_key
aws_secret_access_key=your_secret_key

现在创建空的 NodeJS 项目,运行 npm install aws-sdk 并使用以下脚本:

const aws = require('aws-sdk');

// Replace with your region endpoint, nyc1.digitaloceanspaces.com for example
const spacesEndpoint = new aws.Endpoint('fra1.digitaloceanspaces.com');
// Replace with your bucket name
const bucketName = 'myHeckingBucket';

const s3 = new aws.S3({endpoint: spacesEndpoint});
s3.putBucketLifecycleConfiguration({
    Bucket: bucketName,
    LifecycleConfiguration: {
        Rules: [{
            ID: "autodelete_rule",
            Expiration: {Days: 30},
            Status: "Enabled",
            Prefix: '/', // Unlike AWS in DO this parameter is required
        }]
    }
}, function (error, data) {
    if (error) 
        console.error(error);
    else
        console.log("Successfully modified bucket lifecycle!");
});