OSS支持设置生命周期(Lifecycle)规则,自动删除过期的文件和碎片,或将到期的文件转储为低频或归档存储类型,从而节省存储费用。本文介绍如何管理生命周期规则。
背景信息
每条生命周期规则包含以下内容:
- 生命周期规则ID。用于标识一条规则,同一存储空间内规则ID不能重复。
- 生命周期策略。有以下两种设置方式。同一存储空间内仅支持一种设置方式。
- 按前缀匹配。此种方式允许创建多条规则,前缀不能重复。
- 配置到整个存储空间。此种方式只能创建一条规则。
- 指定文件过期时间。有两种指定方式:
- 指定一个过期天数N,文件会在其最近更新时间点的N天后过期。
- 指定一个过期时间点,最近更新时间在该时间点之前的文件全部过期。
- 生命周期规则是否生效。
通过uploadPart方法上传的分片也支持设置生命周期规则。文件最后修改时间以初始化分片上传事件的时间为准。
更多关于生命周期的内容请参见管理对象生命周期。
生命周期管理的完整代码请参见GitHub。
设置生命周期规则
以下代码用于设置生命周期规则:
<?php if (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php'; } if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php'; } use OSS\OssClient; use OSS\Core\OssException; use OSS\Model\LifecycleConfig; use OSS\Model\LifecycleRule; use OSS\Model\LifecycleAction; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 $accessKeyId = "<yourAccessKeyId>"; $accessKeySecret = "<yourAccessKeySecret>"; // Endpoint以杭州为例,其它Region请按实际情况填写。 $endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; $bucket= "<yourBucketName>"; // 设置规则ID和文件前缀。 $ruleId0 = "rule0"; $matchPrefix0 = "A0/"; $ruleId1 = "rule1"; $matchPrefix1 = "A1/"; $lifecycleConfig = new LifecycleConfig(); $actions = array(); // 距最后修改时间3天后过期。 $actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DAYS, 3); $lifecycleRule = new LifecycleRule($ruleId0, $matchPrefix0, "Enabled", $actions); $lifecycleConfig->addRule($lifecycleRule); $actions = array(); // 指定日期之前创建的文件过期。 $actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DATE, '2022-10-12T00:00:00.000Z'); $lifecycleRule = new LifecycleRule($ruleId1, $matchPrefix1, "Enabled", $actions); $lifecycleConfig->addRule($lifecycleRule); try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putBucketLifecycle($bucket, $lifecycleConfig); } catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n");
查看生命周期规则
以下代码用于查看生命周期规则:
<?php if (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php'; } if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php'; } use OSS\OssClient; use OSS\Core\OssException; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 $accessKeyId = "<yourAccessKeyId>"; $accessKeySecret = "<yourAccessKeySecret>"; // Endpoint以杭州为例,其它Region请按实际情况填写。 $endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; $bucket= "<yourBucketName>"; $lifecycleConfig = null; try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $lifecycleConfig = $ossClient->getBucketLifecycle($bucket); } catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n"); print($lifecycleConfig->serializeToXml() . "\n");
清空生命周期规则
以下代码用于清空生命周期规则:
<?php if (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php'; } if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php'; } use OSS\OssClient; use OSS\Core\OssException; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 $accessKeyId = "<yourAccessKeyId>"; $accessKeySecret = "<yourAccessKeySecret>"; // Endpoint以杭州为例,其它Region请按实际情况填写。 $endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; $bucket= "<yourBucketName>"; try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->deleteBucketLifecycle($bucket); } catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n");