如何设置 DigitalOcean Spaces 存储桶的过期策略

如何设置 DigitalOcean Spaces 存储桶的过期策略
DigitalOcean Spaces Web 界面不提供设置存储桶生命周期策略的方法。以下是如何应用在设定的时间段后自动删除文件的过期设置。这使得 Spaces 更适合用于轮换备份和日志文件。

尽管此功能不在 DigitalOcean 的 UI 中,但 Spaces 后端支持它。Spaces 与 Amazon S3 API 兼容,因此命令行客户端可以设置基于 S3 的生命周期策略。下面详述的步骤也适用于其他实现 S3 API 的对象存储提供程序。

入门

您需要安装 AWS CLI才能学习本教程。安装后,第一个任务是提供凭据,以便 CLI 可以访问您的 DigitalOcean 帐户。

前往浏览器中的DigitalOcean 控制面板。单击屏幕左侧蓝色侧边栏底部的“API”链接。接下来,单击“Spaces access keys”标题右侧的“Generate New Key”按钮。
如何设置 DigitalOcean Spaces 存储桶的过期策略
为您的新密钥命名,然后单击复选标记以完成该过程。将显示您的密钥及其相应的秘密。请注意这些值,因为离开屏幕后将无法检索秘密部分。

返回您的终端并运行aws configure. 系统会要求您提供访问密钥和机密。按照交互式提示提供您在 DigitalOcean 的 Web 界面中生成的值。

不幸的是,这还不是 CLI 设置的结束。官方 S3 客户端的一个重大限制是它无法将自定义端点 URL 与您的凭据一起保存。这意味着您必须在发出的每个命令中明确指定 DigitalOcean API URL:

aws s3 ls --endpoint=https://nyc3.digitaloceanspaces.com --bucket my-bucket

上面的命令将显示my-bucket您 Spaces 帐户的存储桶中的对象。如果您省略了该–endpoint标志,S3 CLI 会假设您正在尝试连接到 AWS 账户。端点 URL 需要匹配您在其中创建空间的 DigitalOcean 数据中心区域 - 用nyc3子域替换您正在使用的区域。

创建您的政策

存储桶生命周期策略定义为 JSON 文件,用于描述您要应用的规则。使用您喜欢的文本编辑器创建一个新文件并添加以下内容:

{
    "Rules": [
        {
            "ID": "Prune old files",
            "Status": "Enabled",
            "Prefix": "",
            "Expiration": {
                "Days": 30
            }
        }
    ]
}

JSON 是要应用的策略的声明性表示。策略的属性及其当前状态都在文件中指定。

此示例将在文件上传 30 天后删除文件。设置Status为Enabled激活策略,而空值Prefix将其应用于存储桶中的每个项目。您可以使用该Prefix字段有选择地仅删除某些对象,例如temp/子目录中的对象。

应用政策

接下来,您需要使用 AWS CLI 将您的策略​​应用到您的存储桶:

aws s3api put-bucket-lifecycle-configuration \
    --bucket my-bucket
    --endpoint https://nyc3.digitaloceanspaces.com
    --lifecycle-configuration file://my-policy.json

替换my-bucket为您要使用到期规则的存储桶的名称。

CLI 将读取您的策略 JSON 文件并将其附加到存储桶。只要Status是Enabled,生命周期规则就会立即应用。您将开始看到新上传的对象在超过到期阈值时离开您的存储桶。

您可以通过从 CLI 回读来检查您的策略是否已应用:

aws s3api get-bucket-lifecycle-configuration \
    --bucket my-bucket
    --endpoint https://nyc3.digitaloceanspaces.com

这应该会显示您提交的 JSON。

使用多个规则##

您可以在RulesJSON 数组中包含多个项目。这使您可以使用以下Prefix字段将唯一的到期策略应用于不同的对象组:

{
    "Rules": [
        {
            "ID": "Prune Invoices",
            "Status": "invoice",
            "Prefix": "I",
            "Expiration": {
                "Days": 90
            }
        },
        {
            "ID": "Prune Quotations",
            "Status": "Enabled",
            "Prefix": "Q",
            "Expiration": {
                "Days": 30
            }
        }
    ]
}

此政策将在 30 天后删除报价单,同时让发票保留 90 天。每个存储桶最多支持 100 个单独的生命周期规则。

中止失败的上传

生命周期策略的另一个作用是在分段上传失败后进行清理。当您通过 S3 API 添加大文件时,它们会被分成可流式传输的部分,以提高性能和网络中断的弹性。

如果上传部分未能完成,您最终可能会在存储桶中放置部分块。将该AbortIncompleteMultipartUpload字段添加到生命周期策略以删除这些冗余块。

{
    "Rules": [
        {
            "ID": "AbortIncompleteMultipartUpload",
            "Prefix": "",
            "Status": "Enabled",
            "AbortIncompleteMultipartUpload": {
                "DaysAfterInitiation": 1
            }
        }
    ]
}

此策略会在启动一天后清除不完整的上传块,从而可能释放一些存储空间。删除块后,您将无法再次恢复原始上传 - 客户端需要从头重新启动它。

概括

DigitalOcean Spaces支持 S3 生命周期策略,但您必须使用 API 应用它们。配置完成后,您上传的内容将在设定的时间段后自动删除,让您确信旧文件不会浪费存储空间并增加账单。

尽管 Spaces 以与 S3 相同的方式实施过期策略,但在 DigitalOcean 的平台上不提供其他形式的生命周期策略。S3 功能集的另一个关键组件是能够在存储类之间转换对象,例如 30 天后自动迁移到存档存储。空间计费要简单得多,只有一个可用的计划,因此这些策略不会对 DigitalOcean 存储桶产生影响。

上一篇:CSS03


下一篇:Oracle数据库获取uuid函数