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”按钮。
为您的新密钥命名,然后单击复选标记以完成该过程。将显示您的密钥及其相应的秘密。请注意这些值,因为离开屏幕后将无法检索秘密部分。
返回您的终端并运行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 存储桶产生影响。