このトピックでは、PHP SDK V2 を使用してバケットのライフサイクル機能を管理する方法について説明します。
背景情報
OSS では、アップロードされたすべてのデータが頻繁なアクセスを必要とするわけではありません。ただし、データコンプライアンスやアーカイブの要件により、一部のデータはコールドストレージに保存する必要があります。ビジネス要件に基づいて、以下を選択できます。
最終更新時間に基づくライフサイクルルール: 特定のデータが長期間変更されず、保持する必要がなくなった場合、このルールを使用してバッチで削除したり、コールドストレージタイプに変換したりすることで、ストレージスペースを解放できます。
最終アクセス時間に基づくライフサイクルルール: OSS がデータアクセスパターンを自動的に監視してコールドデータを識別し、ストレージタイプを動的に変換させたい場合は、このルールを有効にできます。OSS は、長期間アクセスされていないデータを自動的に識別し、より経済的なコールドストレージに変換することで、ホット/コールド階層化を実現し、ストレージコストを削減します。
考慮事項
最終更新時間または最終アクセス時間に基づいてライフサイクルルールを設定する前に、この機能を理解していることを確認してください。詳細については、「最終更新時間に基づくライフサイクルルール」および「最終アクセス時間に基づくライフサイクルルール」をご参照ください。
このトピックのサンプルコードでは、中国 (杭州) リージョン ID
cn-hangzhouとそのパブリックエンドポイントを例として使用しています。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS がサポートするリージョンとエンドポイントの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。ライフサイクルルールを設定するには、
oss:PutBucketLifecycle権限が必要です。ライフサイクルルールを表示するには、oss:GetBucketLifecycle権限が必要です。ライフサイクルルールを削除するには、oss:DeleteBucketLifecycle権限が必要です。詳細については、「RAM ユーザーへのカスタム権限の付与」をご参照ください。
ライフサイクルルールの設定
次のコードは、データの最終更新時間と最終アクセス時間に基づいて設定されたライフサイクルルールの例を示しています。設定が完了した後、1 つ以上のライフサイクルルールを変更する場合は、「1 つ以上のライフサイクルルール設定を変更するにはどうすればよいですか?」をご参照ください。
最終更新時間に基づいてオブジェクトのストレージクラスを変更するライフサイクルルールを設定する
次のコードは、最終更新時間に基づいてバケット内のオブジェクトのストレージクラスを変更するライフサイクルルールを設定する方法の例を示しています。
<?php
// 依存関係をロードするために autoload ファイルをインクルードします
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"]; // バケットの名前
// 環境変数を使用して AccessKey ID と AccessKey Secret をロードします
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を使用します
$cfg = Oss\Config::loadDefault();
// 資格情報プロバイダーを指定します
$cfg->setCredentialsProvider($credentialsProvider);
// リージョンを指定します
$cfg->setRegion($region);
// エンドポイントが提供されている場合は、エンドポイントを指定します
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// OSSClient インスタンスを作成します
$client = new Oss\Client($cfg);
// 名前に log/ プレフィックスを含むオブジェクトを 30 日後に低頻度アクセス (IA) ストレージクラスに変換するライフサイクルルールを定義します
$lifecycleRule = new Oss\Models\LifecycleRule(
prefix: 'log/', // オブジェクトのプレフィックス
transitions: array(
new Oss\Models\LifecycleRuleTransition(
days: 30, // 変換時間は 30 日です
storageClass: 'IA' // ターゲットストレージクラスは 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 // リクエストの一意の識別子
);
最終更新時間に基づいて、特定のプレフィックスを含むオブジェクトや特定のタグを持つオブジェクトを除外して、オブジェクトのストレージクラスを変換するライフサイクルルールを設定する
次のコードは、バケット内のオブジェクトのうち、名前に log プレフィックスを含むオブジェクト、key1=value1 タグを持つオブジェクト、および指定されたサイズ要件を満たすオブジェクトを除き、最終更新から 30 日後に低頻度アクセス (IA) ストレージクラスに変換され、100 日後に有効期限切れになるように指定する方法の例を示しています。
<?php
// 依存関係をロードするために autoload ファイルをインクルードします
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"]; // バケットの名前
// 環境変数を使用して AccessKey ID と AccessKey Secret をロードします
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を使用します
$cfg = Oss\Config::loadDefault();
// 資格情報プロバイダーを指定します
$cfg->setCredentialsProvider($credentialsProvider);
// リージョンを指定します
$cfg->setRegion($region);
// エンドポイントが提供されている場合は、エンドポイントを指定します
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// OSSClient インスタンスを作成します
$client = new Oss\Client($cfg);
// 名前に log/ プレフィックスを含むオブジェクトを 30 日後に低頻度アクセス (IA) ストレージクラスに変換するライフサイクルルールを定義します
$lifecycleRule = new Oss\Models\LifecycleRule(
id: 'rule', // ルールの ID
status: 'Enabled', // ルールのステータスは有効です
prefix: 'logs', // オブジェクトのプレフィックス
transitions: array(
new Oss\Models\LifecycleRuleTransition(
days: 30, // 変換時間は 30 日です
storageClass: 'IA', // ターゲットストレージクラスは 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 // リクエストの一意の識別子
);
最終アクセス時間に基づいてオブジェクトのストレージクラスを変更するライフサイクルルールを設定する
次のコードは、最終アクセス時間に基づいてバケット内のオブジェクトのストレージクラスを変更するライフサイクルルールを設定する方法の例を示しています。
<?php
// 依存関係をロードするために autoload ファイルをインクルードします
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"]; // バケットの名前
// 環境変数を使用して AccessKey ID と AccessKey Secret をロードします
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を使用します
$cfg = Oss\Config::loadDefault();
// 資格情報プロバイダーを指定します
$cfg->setCredentialsProvider($credentialsProvider);
// リージョンを指定します
$cfg->setRegion($region);
// エンドポイントが提供されている場合は、エンドポイントを指定します
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// OSSClient インスタンスを作成します
$client = new Oss\Client($cfg);
// 名前に log/ プレフィックスを含むオブジェクトを 30 日後に低頻度アクセス (IA) ストレージクラスに変換するライフサイクルルールを定義します
$lifecycleRule = new Oss\Models\LifecycleRule(
prefix: 'log/', // オブジェクトのプレフィックス
transitions: array(
new Oss\Models\LifecycleRuleTransition(
days: 30, // 変換時間は 30 日です
storageClass: 'IA', // ターゲットストレージクラスは IA です
IsAccessTime: 'true', // アクセス時間に基づいて変換をトリガーするかどうか
ReturnToStdWhenVisit: 'false' // 再度アクセスされた場合も 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 // リクエストの一意の識別子
);
ライフサイクルルールの表示
次のコードは、ライフサイクルルールに含まれる情報を表示する方法の例を示しています。
<?php
// 依存関係をロードするために autoload ファイルをインクルードします
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"]; // バケットの名前
// 環境変数を使用して AccessKey ID と AccessKey Secret をロードします
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を使用します
$cfg = Oss\Config::loadDefault();
// 資格情報プロバイダーを指定します
$cfg->setCredentialsProvider($credentialsProvider);
// リージョンを指定します
$cfg->setRegion($region);
// エンドポイントが提供されている場合は、エンドポイントを指定します
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// OSSClient インスタンスを作成します
$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 に設定されたライフサイクルルールを削除する方法の例を示しています。1 つ以上のライフサイクルルールを削除する場合は、「1 つ以上のライフサイクルルールを削除するにはどうすればよいですか?」をご参照ください。
<?php
// 依存関係をロードするために autoload ファイルをインクルードします
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"]; // バケットの名前
// 環境変数を使用して AccessKey ID と AccessKey Secret をロードします
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を使用します
$cfg = Oss\Config::loadDefault();
// 資格情報プロバイダーを指定します
$cfg->setCredentialsProvider($credentialsProvider);
// リージョンを指定します
$cfg->setRegion($region);
// エンドポイントが提供されている場合は、エンドポイントを指定します
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// OSSClient インスタンスを作成します
$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」をご参照ください。