本文介紹如何使用PHP SDK V2管理儲存空間(Bucket)的生命週期功能。
背景資訊
在OSS中,並非所有上傳的資料都需要頻繁訪問,但出於資料合規性或歸檔需求,部分資料仍需以冷儲存的形式儲存。根據業務需求,您可以選擇:
基於最後修改時間(Last Modified Time)的生命週期規則:當某些資料長時間未被修改且不再需要保留時,可以通過此規則大量刪除它們,或將其轉換為冷儲存類型,從而釋放儲存空間。
基於最後訪問時間(Last Access Time)的生命週期規則:如果希望OSS自動監測資料的訪問模式來識別冷資料並動態轉換儲存類型,可啟用此規則。OSS將自動識別長期未被訪問的資料,將其轉換為更經濟的冷儲存,從而實現冷熱分層,降低儲存成本。
注意事項
在配置基於最後一次修改時間或者最後一次訪問時間的生命週期規則之前,請確保您已瞭解該功能。詳情請參見基於最後一次修改時間的生命週期規則和基於最後一次訪問時間的生命週期規則。
本文範例程式碼以華東1(杭州)的地區ID
cn-hangzhou為例,預設使用外網Endpoint,如果您希望通過與OSS同地區的其他阿里雲產品訪問OSS,請使用內網Endpoint。關於OSS支援的Region與Endpoint的對應關係,請參見OSS地區和訪問網域名稱。要設定生命週期規則,您必須有
oss:PutBucketLifecycle許可權;要查看生命週期規則,您必須有oss:GetBucketLifecycle許可權;要清空生命週期規則,您必須有oss:DeleteBucketLifecycle許可權。具體操作,請參見為RAM使用者授予自訂的權限原則。
設定生命週期規則
以下代碼分別提供了設定基於最後一次修改時間和基於最後一次訪問時間的生命週期規則的樣本。設定完成後,如果您希望修改其中的一條或多條生命週期規則,請參見如何修改其中一條或多條生命週期規則配置?。
基於最後一次修改時間策略執行轉換檔儲存類型
以下代碼用於為Bucket設定基於最後一次修改時間策略,以執行轉換檔儲存類型的操作。
<?php
// 引入自動負載檔案 載入依賴庫
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Models\LifecycleConfiguration;
// 定義命令列參數描述
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located', 'required' => True], // 地區是必填項 儲存空間所在的地區
"endpoint" => ['help' => 'The domain names that other services can use to access OSS', 'required' => False], // 終端節點是可選項 其他服務可以用來訪問OSS的網域名稱
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // 儲存空間名稱是必填項
];
// 產生長選項列表 用於解析命令列參數
$longopts = \array_map(function ($key) {
return "$key:"; // 每個參數後面加冒號 表示需要值
}, array_keys($optsdesc));
// 解析命令列參數
$options = getopt("", $longopts);
// 檢查必填參數是否缺失
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 提示使用者缺少必填參數
exit(1);
}
}
// 擷取命令列參數值
$region = $options["region"]; // 儲存空間所在地區
$bucket = $options["bucket"]; // 儲存空間名稱
// 使用環境變數載入憑證資訊 AccessKeyId 和 AccessKeySecret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault();
// 設定憑證提供者
$cfg->setCredentialsProvider($credentialsProvider);
// 設定地區
$cfg->setRegion($region);
// 如果提供了終端節點 則設定終端節點
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);
// 定義生命週期規則 將首碼為log/的對象在30天后轉換為低頻儲存類型
$lifecycleRule = new Oss\Models\LifecycleRule(
prefix: 'log/', // 對象首碼
transitions: array(
new Oss\Models\LifecycleRuleTransition(
days: 30, // 轉換時間為30天
storageClass: 'IA' // 轉換為目標儲存類型為低頻訪問
)
),
id: 'rule', // 規則ID
status: 'Enabled' // 規則狀態為啟用
);
// 建立生命週期設定物件 並添加生命週期規則
$lifecycleConfiguration = new LifecycleConfiguration(
rules: array($lifecycleRule)
);
// 建立設定儲存空間生命週期的請求對象 並將生命週期配置傳入
$request = new Oss\Models\PutBucketLifecycleRequest(
bucket: $bucket,
lifecycleConfiguration: $lifecycleConfiguration
);
// 調用putBucketLifecycle方法設定儲存空間的生命週期規則
$result = $client->putBucketLifecycle($request);
// 列印返回結果
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP響應狀態代碼
'request id:' . $result->requestId . PHP_EOL // 請求的唯一標識
);
基於最後一次修改時間策略限制除指定首碼、標籤以外的檔案執行轉換儲存類型操作
以下代碼用於指定Bucket中除首碼為log、包含key為key1,value為value1標籤且符合指定大小以外的檔案在距離最後一次修改時間30天后轉低頻儲存,到期時間為100天。
<?php
// 引入自動負載檔案 載入依賴庫
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Models\LifecycleConfiguration;
// 定義命令列參數描述
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located', 'required' => True], // 地區是必填項 儲存空間所在的地區
"endpoint" => ['help' => 'The domain names that other services can use to access OSS', 'required' => False], // 終端節點是可選項 其他服務可以用來訪問OSS的網域名稱
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // 儲存空間名稱是必填項
];
// 產生長選項列表 用於解析命令列參數
$longopts = \array_map(function ($key) {
return "$key:"; // 每個參數後面加冒號 表示需要值
}, array_keys($optsdesc));
// 解析命令列參數
$options = getopt("", $longopts);
// 檢查必填參數是否缺失
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 提示使用者缺少必填參數
exit(1);
}
}
// 擷取命令列參數值
$region = $options["region"]; // 儲存空間所在地區
$bucket = $options["bucket"]; // 儲存空間名稱
// 使用環境變數載入憑證資訊 AccessKeyId 和 AccessKeySecret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault();
// 設定憑證提供者
$cfg->setCredentialsProvider($credentialsProvider);
// 設定地區
$cfg->setRegion($region);
// 如果提供了終端節點 則設定終端節點
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);
// 定義生命週期規則 將首碼為log/的對象在30天后轉換為低頻儲存類型
$lifecycleRule = new Oss\Models\LifecycleRule(
id: 'rule', // 規則ID
status: 'Enabled', // 規則狀態為啟用
prefix: 'logs', // 對象首碼
transitions: array(
new Oss\Models\LifecycleRuleTransition(
days: 30, // 轉換時間為30天
storageClass: 'IA', // 轉換為目標儲存類型為低頻儲存
isAccessTime: false // 設定為false,基於最後一次修改時間策略
)
),
filter: new Oss\Models\LifecycleRuleFilter( // 定義過濾條件
objectSizeGreaterThan: 500, // 設定大於500位元組
objectSizeLessThan: 1000, // 設定小於1000位元組
not: new Oss\Models\LifecycleRuleNot( // 定義排除條件
prefix: 'logs/log', // 排除首碼為log的對象
tag: new Oss\Models\Tag( // 定義標籤條件
key: 'key1',
value: 'value1'
)
)
),
expiration: new Oss\Models\LifecycleRuleExpiration(
days: 100 // 到期時間為100天
)
);
// 建立生命週期設定物件 並添加生命週期規則
$lifecycleConfiguration = new LifecycleConfiguration(
rules: array($lifecycleRule)
);
// 建立設定儲存空間生命週期的請求對象 並將生命週期配置傳入
$request = new Oss\Models\PutBucketLifecycleRequest(
bucket: $bucket,
lifecycleConfiguration: $lifecycleConfiguration
);
// 調用putBucketLifecycle方法設定儲存空間的生命週期規則
$result = $client->putBucketLifecycle($request);
// 列印返回結果
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP響應狀態代碼
'request id:' . $result->requestId . PHP_EOL // 請求的唯一標識
);
基於最後一次訪問時間策略轉換檔儲存類型
以下代碼用於為Bucket設定基於最後一次訪問時間策略,以執行轉換儲存類型的操作。
<?php
// 引入自動負載檔案 載入依賴庫
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Models\LifecycleConfiguration;
// 定義命令列參數描述
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located', 'required' => True], // 地區是必填項 儲存空間所在的地區
"endpoint" => ['help' => 'The domain names that other services can use to access OSS', 'required' => False], // 終端節點是可選項 其他服務可以用來訪問OSS的網域名稱
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // 儲存空間名稱是必填項
];
// 產生長選項列表 用於解析命令列參數
$longopts = \array_map(function ($key) {
return "$key:"; // 每個參數後面加冒號 表示需要值
}, array_keys($optsdesc));
// 解析命令列參數
$options = getopt("", $longopts);
// 檢查必填參數是否缺失
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 提示使用者缺少必填參數
exit(1);
}
}
// 擷取命令列參數值
$region = $options["region"]; // 儲存空間所在地區
$bucket = $options["bucket"]; // 儲存空間名稱
// 使用環境變數載入憑證資訊 AccessKeyId 和 AccessKeySecret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault();
// 設定憑證提供者
$cfg->setCredentialsProvider($credentialsProvider);
// 設定地區
$cfg->setRegion($region);
// 如果提供了終端節點 則設定終端節點
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);
// 定義生命週期規則 將首碼為log/的對象在30天后轉換為低頻儲存類型
$lifecycleRule = new Oss\Models\LifecycleRule(
prefix: 'log/', // 對象首碼
transitions: array(
new Oss\Models\LifecycleRuleTransition(
days: 30, // 轉換時間為30天
storageClass: 'IA', // 轉換為目標儲存類型為低頻訪問
IsAccessTime: 'true', // 是否基於訪問時間觸發轉換
ReturnToStdWhenVisit: 'false' // 再次訪問時仍保留為低頻儲存
)
),
id: 'rule', // 規則ID
status: 'Enabled' // 規則狀態為啟用
);
// 建立生命週期設定物件 並添加生命週期規則
$lifecycleConfiguration = new LifecycleConfiguration(
rules: array($lifecycleRule)
);
// 建立設定儲存空間生命週期的請求對象 並將生命週期配置傳入
$request = new Oss\Models\PutBucketLifecycleRequest(
bucket: $bucket,
lifecycleConfiguration: $lifecycleConfiguration
);
// 調用putBucketLifecycle方法設定儲存空間的生命週期規則
$result = $client->putBucketLifecycle($request);
// 列印返回結果
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP響應狀態代碼
'request id:' . $result->requestId . PHP_EOL // 請求的唯一標識
);
查看生命週期規則
以下代碼用於查看生命週期規則中包含的資訊。
<?php
// 引入自動負載檔案 載入依賴庫
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定義命令列參數描述
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located', 'required' => True], // 地區是必填項 儲存空間所在的地區
"endpoint" => ['help' => 'The domain names that other services can use to access OSS', 'required' => False], // 終端節點是可選項 其他服務可以用來訪問OSS的網域名稱
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // 儲存空間名稱是必填項
];
// 產生長選項列表 用於解析命令列參數
$longopts = \array_map(function ($key) {
return "$key:"; // 每個參數後面加冒號 表示需要值
}, array_keys($optsdesc));
// 解析命令列參數
$options = getopt("", $longopts);
// 檢查必填參數是否缺失
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 提示使用者缺少必填參數
exit(1);
}
}
// 擷取命令列參數值
$region = $options["region"]; // 儲存空間所在地區
$bucket = $options["bucket"]; // 儲存空間名稱
// 使用環境變數載入憑證資訊 AccessKeyId 和 AccessKeySecret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault();
// 設定憑證提供者
$cfg->setCredentialsProvider($credentialsProvider);
// 設定地區
$cfg->setRegion($region);
// 如果提供了終端節點 則設定終端節點
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);
// 建立擷取儲存空間生命週期的請求對象
$request = new Oss\Models\GetBucketLifecycleRequest(bucket: $bucket);
// 調用getBucketLifecycle方法擷取儲存空間的生命週期規則
$result = $client->getBucketLifecycle($request);
// 列印返回結果
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP響應狀態代碼
'request id:' . $result->requestId . PHP_EOL . // 請求的唯一標識
'lifecycle:' . var_export($result->lifecycleConfiguration, true) . PHP_EOL // 生命週期規則內容
);
清空生命週期規則
以下代碼用於清空examplebucket的所有生命週期規則。如果您需要刪除其中一條或者多條生命週期規則,請參見如何刪除其中一條或多條生命週期規則?。
<?php
// 引入自動負載檔案 載入依賴庫
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定義命令列參數描述
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // 地區是必填項 儲存空間所在的地區
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // 終端節點是可選項 其他服務可以用來訪問OSS的網域名稱
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // 儲存空間名稱是必填項
];
// 產生長選項列表 用於解析命令列參數
$longopts = \array_map(function ($key) {
return "$key:"; // 每個參數後面加冒號 表示需要值
}, array_keys($optsdesc));
// 解析命令列參數
$options = getopt("", $longopts);
// 檢查必填參數是否缺失
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 提示使用者缺少必填參數
exit(1);
}
}
// 擷取命令列參數值
$region = $options["region"]; // 儲存空間所在地區
$bucket = $options["bucket"]; // 儲存空間名稱
// 使用環境變數載入憑證資訊 AccessKeyId 和 AccessKeySecret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault();
// 設定憑證提供者
$cfg->setCredentialsProvider($credentialsProvider);
// 設定地區
$cfg->setRegion($region);
// 如果提供了終端節點 則設定終端節點
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);
// 建立刪除儲存空間生命週期規則的請求對象
$request = new Oss\Models\DeleteBucketLifecycleRequest(bucket: $bucket);
// 調用deleteBucketLifecycle方法刪除儲存空間的生命週期規則
$result = $client->deleteBucketLifecycle($request);
// 列印返回結果
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP響應狀態代碼
'request id:' . $result->requestId . PHP_EOL // 請求的唯一標識
);
相關文檔
關於設定生命週期規則的API介面說明,請參見PutBucketLifecycle。
關於查看生命週期規則的API介面說明,請參見GetBucketLifecycle。
關於清空生命週期規則的API介面說明,請參見DeleteBucketLifecycle。