Object Storage Service (OSS) は、標準、低頻度アクセス (IA) 、アーカイブ、コールドアーカイブ、およびディープコールドアーカイブのストレージクラスを提供します。 ライフサイクルルールを使用するか、CopyObject操作を呼び出して、オブジェクトのストレージクラスを変換できます。
オブジェクトのストレージクラスは変更しないことを推奨します。. dlsdata /
OSS-HDFSが有効になっているバケットのディレクトリ。
オブジェクトのストレージクラスを変更すると、. dlsdata /
ディレクトリを低頻度アクセス (IA) に移動する場合、オブジェクトはOSS-HDFSを使用してアクセスできます。 ディレクトリ内のオブジェクトのストレージクラスをアーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変更した場合、OSS-HDFSを使用してオブジェクトに直接アクセスすることはできません。 オブジェクトにアクセスする前に、オブジェクトを復元する必要があります。
オブジェクトのストレージクラスを自動的に変換するライフサイクルルールの設定
オブジェクトの最終変更時刻に基づくストレージクラス変換
LRS
ローカル冗長ストレージ (LRS) オブジェクトのストレージクラスは、次のルールに基づいて変換できます。
標準LRSからIA LRS、アーカイブLRS、コールドアーカイブLRS、またはコールドアーカイブLRSへの変換
IA LRSからアーカイブLRS、コールドアーカイブLRS、またはディープコールドアーカイブLRSへの変換
アーカイブLRSからコールドアーカイブLRSまたはディープコールドアーカイブLRSへの変換
コールドアーカイブLRSからディープコールドアーカイブLRSへの変換
オブジェクトのストレージクラスをIA、Archive、Cold Archive、およびDeep Cold Archiveに変換するために、異なるポリシーがバケットに同時に設定されている場合、ポリシーで指定された期間は次の要件を満たす必要があります。
IAへの変換に要する時間 <アーカイブへの変換に要する時間 <コールドアーカイブへの変換に要する時間 <ディープコールドアーカイブへの変換に要する時間
ZRS
ゾーン冗長ストレージ (ZRS) オブジェクトのストレージクラスは、次のルールに基づいて変換できます。
標準ZRSからIA ZRS、アーカイブZRS、コールドアーカイブLRS、またはディープコールドアーカイブLRSへの変換
IA ZRSからアーカイブZRS、コールドアーカイブLRS、またはディープコールドアーカイブLRSへの変換
アーカイブZRSからコールドアーカイブLRSまたはディープコールドアーカイブLRSへの変換
コールドアーカイブLRSからディープコールドアーカイブLRSへの変換
詳細については、「最終変更時刻に基づくライフサイクルルール」をご参照ください。
オブジェクトの最終アクセス時間に基づくストレージクラス変換
オブジェクトのストレージクラスをStandardまたはIAからArchive、Cold Archive、またはDeep Cold Archiveに変換する場合は、 チケットを起票し、まず必要な権限を申請します。 アプリケーションが承認されたら、オブジェクトのストレージクラスを変換するストレージクラスを指定する必要があります。
アプリケーションが承認された後、最終アクセス時間に基づくライフサイクルルールを使用して、オブジェクトのストレージクラスを標準またはIAからアーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換する場合、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブオブジェクトの最終アクセス時間は、オブジェクトが格納されているバケットのアクセス追跡が有効になった時間です。
LRS
LRSオブジェクトのストレージクラスは、次のルールに基づいて変換できます。
標準LRSからIA LRS、アーカイブLRS、コールドアーカイブLRS、またはコールドアーカイブLRSへの変換
オブジェクトにアクセスした後、標準LRSからIA LRSへの変換およびIA LRSから標準LRSへの変換または変換なし
IA LRSからアーカイブLRS、コールドアーカイブLRS、またはディープコールドアーカイブLRSへの変換
アーカイブLRSからコールドアーカイブLRSまたはディープコールドアーカイブLRSへの変換
コールドアーカイブLRSからディープコールドアーカイブLRSへの変換
ZRS
ZRSオブジェクトのストレージクラスは、次のルールに基づいて変換できます。
標準ZRSからIA ZRS、アーカイブZRS、コールドアーカイブLRS、またはディープコールドアーカイブLRSへの変換
オブジェクトにアクセスした後、標準ZRSからIA ZRSへの変換およびIA ZRSから標準ZRSへの変換または変換なし
IA ZRSからアーカイブZRS、コールドアーカイブLRS、またはディープコールドアーカイブLRSへの変換
アーカイブZRSからコールドアーカイブLRSまたはディープコールドアーカイブLRSへの変換
コールドアーカイブLRSからディープコールドアーカイブLRSへの変換
詳細については、「最終アクセス時間に基づくライフサイクルルール」をご参照ください。
オブジェクトのストレージクラスを変換するライフサイクルルールの設定
複数の方法を使用してライフサイクルルールを設定できます。 設定したライフサイクルルールに基づいて、複数のオブジェクトのストレージクラスを指定されたストレージクラスに変換するか、指定された期間が経過するとオブジェクトとパーツを削除します。 次のいずれかの方法を使用して、オブジェクトのストレージクラスを特定のストレージクラスに変換することで、ライフサイクルルールを設定できます。
OSS コンソールの使用
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションウィンドウで、データ管理 > ライフサイクル を選択します。
オプション。 オブジェクトの最終アクセス時刻に基づいてライフサイクルルールを作成するには、ライフサイクル ページで [アクセストラッキングの有効化] をオンにします。
ライフサイクル ページで、ルールの作成をクリックします。
[ルールの作成] パネルで、パラメーターを設定します。 下表に、各パラメーターを説明します。
未バージョン化バケット
セクション
パラメーター
説明
基本設定
ステータス
ライフサイクルルールのステータスを指定します。 開始 または [無効] を選択できます。
ライフサイクルルールを有効にすると、ライフサイクルルールに基づいてオブジェクトのストレージクラスが変換されるか、オブジェクトが削除されます。
ライフサイクルルールを無効にすると、ライフサイクルルールのライフサイクルタスクが中断されます。
ポリシー
ライフサイクルルールを有効にするオブジェクトを指定します。 オブジェクトプレフィックス または バケット全体に適用 を選択できます。
説明指定されたプレフィックスを持つオブジェクトを選択した場合、完全なプレフィックスを指定する必要があります。 たとえば、名前にsrc/dir1プレフィックスが含まれるオブジェクトにライフサイクルルールを適用する場合は、src/dir1と入力します。 dir1のみを入力した場合、ライフサイクルルールは必要な効果を生成しません。
重複するプレフィックスを許可
重複するプレフィックスを許可するかどうかを指定します。 デフォルトでは、各ライフサイクルルールのプレフィックスが重複するかどうかをチェックします。 たとえば、バケットに既存のライフサイクルルール (ルール1) があり、重複するプレフィックスを含む別のライフサイクルルール (ルール2) を設定する場合:
ルール1
オブジェクトが最後に変更されてから180日後に、名前にdir1/ プレフィックスが含まれるすべてのオブジェクトをバケット内で削除します。
ルール2
バケット内のdir1/dir2/ プレフィックスを名前に含むすべてのオブジェクトのストレージクラスを、オブジェクトが最後に変更されてから30日後にIAに変換し、最後に変更されてから60日後にオブジェクトを削除します。
このチェックボックスをオンにしないと、dir1/dir2/ ディレクトリ内のオブジェクトが2つのライフサイクルルールに一致することを検出し、ルール2の作成を拒否し、[同じアクションタイプの有効期限] を返します。 エラーメッセージ。
このチェックボックスをオンにすると、オブジェクトが最後に変更されてから30日後にdir1/dir2/ ディレクトリ内のオブジェクトのストレージクラスをIAに変換し、最後に変更されてから60日後に削除するルール2が作成されます。 dir1/ ディレクトリ内の他のオブジェクトは、オブジェクトが最後に変更されてから180日後に削除されます。
説明バケットに複数のライフサイクルルールがあり、そのうちの1つがバケット全体に適用される場合、ライフサイクルルールには重複するプレフィックスがあります。
接頭辞
ライフサイクルルールを有効にするオブジェクトの名前にプレフィックスを指定します。
プレフィックスをimgに設定した場合、imgtest.pngやimg/example.jpgなど、名前にimgプレフィックスが含まれるすべてのオブジェクトがライフサイクルルールと一致します。
プレフィックスをimg/ に設定した場合、img/example.jpgやimg/test.jpgなど、名前にimg /プレフィックスが含まれるすべてのオブジェクトがライフサイクルルールと一致します。
タグ
タグを指定します。 このルールは、指定されたタグを持つオブジェクトに対してのみ有効です。
たとえば、ライフサイクルルールでタグを指定し、ライフサイクルルールでプレフィックスを指定しない場合、ライフサイクルルールはバケットにタグを持つすべてのオブジェクトに適用されます。
ライフサイクルルールでa=1タグとimgプレフィックスを指定した場合、ライフサイクルルールは、オブジェクト名にimgプレフィックスがあり、バケットにa=1タグがあるすべてのオブジェクトに適用されます。
詳細については、「オブジェクトへのタグの追加」をご参照ください。
ではない
指定された名前プレフィックスとタグを持つオブジェクトに対してライフサイクルルールが有効にならないように指定します。
重要NOTをオンにすると、ライフサイクルルールにPrefixパラメーターとTagパラメーターの少なくとも1つを指定する必要があります。
NOTパラメーターに指定されたタグのキーは、タグパラメーターに指定されたキーと同じにすることはできません。
NOTをオンにすると、ライフサイクルルールに部品ポリシーを含めることはできません。
ファイルサイズ
ライフサイクルルールを有効にするオブジェクトのサイズを指定します。
最小サイズ: 指定されたサイズより大きいサイズのオブジェクトに対してのみライフサイクルルールが有効になるように指定します。 オブジェクトの最小サイズは、0 Bより大きく5テラバイト未満で指定できます。
最大サイズ: 指定されたサイズより小さいサイズのオブジェクトに対してのみライフサイクルルールが有効になるように指定します。 オブジェクトの最大サイズは、0 Bより大きく、5テラバイト以下で指定できます。
重要同じライフサイクルルールで最小オブジェクトサイズと最大オブジェクトサイズを指定する場合は、次の項目に注意してください。
最大オブジェクトサイズは、最小オブジェクトサイズより大きくなければなりません。
ライフサイクルルールに部品ポリシーを含めることはできません。
削除マーカーを削除するポリシーを含めることはできません。
オブジェクトに対するポリシー
ファイル時間ポリシー
オブジェクトの有効期限ポリシーを指定します。 [有効期間 (日)] 、[有効期限] 、または 有効になっていません を選択できます。 有効になっていません を選択した場合、オブジェクトの有効期限ポリシーは設定されません。
ライフサイクルベースのルール
ライフサイクルルールを設定して、オブジェクトのストレージクラスを変換するか、期限切れのオブジェクトを削除します。 IA、アーカイブ、コールドアーカイブ、ディープコールドアーカイブ、またはオブジェクトの削除を選択できます。
たとえば、ファイル時間ポリシーの有効期限を選択し、有効期限として9月24日2023を指定し、オブジェクトの削除 (復元できません) を指定します。 この場合、9月24日2023前に最後に変更されたオブジェクトは自動的に削除され、復元できません。
フラグメントに対するポリシー
フラグメント期限切れポリシー
部品ポリシーを指定します。 タグパラメーターを設定した場合、このパラメーターは使用できません。 [有効期間 (日)] 、[有効期限] 、または 有効になっていません を選択できます。 有効になっていません を選択した場合、部品ポリシーは設定されません。
重要ライフサイクルルールには、オブジェクト有効期限ポリシーと部品有効期限ポリシーの少なくとも1つが含まれている必要があります。
フラグメントに対するルール
パーツの有効期限を指定します。 有効期間または有効期限を指定できます。 期限切れのパーツは自動的に削除され、復元できません。
Versionedバケット
基本設定 セクションと フラグメントに対するポリシー セクションのパラメーターを、バージョン化されていないバケットのパラメーターと同じ方法で設定します。 次の表では、バージョン化されていないバケットに設定したパラメーターとは異なるパラメーターのみを説明します。
セクション
パラメーター
説明
現在のバージョンのポリシー
削除マーカーの削除
バケットがバージョン管理されている場合、オブジェクトライフサイクルパラメーターに [削除マーカー] オプションが追加されます。 その他のパラメーターは、バージョン化されていないバケットに対して設定できるパラメーターと同じです。
削除マーカーの削除を選択した場合、オブジェクトに削除マーカーであるバージョンが1つしかない場合、OSSは削除マーカーの有効期限が切れたと見なし、削除マーカーを削除します。 オブジェクトに複数のバージョンがあり、オブジェクトの現在のバージョンが削除マーカーの場合、OSSは削除マーカーを保持します。 削除マーカーの詳細については、「マーカーの削除」をご参照ください。
重要一致したオブジェクトに以前のバージョンがある場合、ライフサイクルルールはオブジェクトの削除マーカーを削除しません。 不要になった以前のオブジェクトバージョンを削除し、マーカーを削除して、多数の削除マーカーによるリストのパフォーマンスの低下を防ぐことをお勧めします。
以前のバージョンに対するポリシー
ファイル時間ポリシー
以前のバージョンの有効期限を指定します。 [有効期間 (日)] または 有効になっていません を選択できます。 有効になっていません を選択した場合、オブジェクトポリシーは設定されません。
ライフサイクルベースのルール
オブジェクトが以前のバージョンになってから保持できる日数を指定します。 有効期限が切れると、指定されたアクションは翌日以前のバージョンで実行されます。 たとえば、Validity Period (Days) パラメーターを30に設定した場合、2023年9月1日に以前のバージョンになったオブジェクトは、指定されたストレージクラスに移動されるか、2023年10月1日に削除されます。
重要オブジェクトが以前のバージョンになるときは、それ以降のバージョンが生成された時刻に基づいて判断できます。
OK をクリックします。
ライフサイクルルールの作成後、ライフサイクルルールリストでルールを表示できます。
OSS SDKの使用
次のサンプルコードは、一般的なプログラミング言語でOSS SDKを使用してライフサイクルルールを設定する方法の例を示しています。 他のプログラミング言語でOSS SDKを使用してライフサイクルルールを設定する方法の詳細については、「概要」をご参照ください。
Java
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.utils.DateUtil;
import com.aliyun.oss.model.LifecycleRule;
import com.aliyun.oss.model.SetBucketLifecycleRequest;
import com.aliyun.oss.model.StorageClass;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Demo {
public static void main(String[] args) throws Exception {
// In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Specify the name of the bucket. Example: examplebucket.
String bucketName = "examplebucket";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// Create a request by using SetBucketLifecycleRequest.
SetBucketLifecycleRequest request = new SetBucketLifecycleRequest(bucketName);
// Specify the ID of the lifecycle rule.
String ruleId0 = "rule0";
// Specify the prefix that you want the lifecycle rule to match.
String matchPrefix0 = "A0/";
// Specify the tag that you want the lifecycle rule to match.
Map<String, String> matchTags0 = new HashMap<String, String>();
// Specify the key and value of the tag. In the example, the key is set to owner and the value is set to John.
matchTags0.put("owner", "John");
String ruleId1 = "rule1";
String matchPrefix1 = "A1/";
Map<String, String> matchTags1 = new HashMap<String, String>();
matchTags1.put("type", "document");
String ruleId2 = "rule2";
String matchPrefix2 = "A2/";
String ruleId3 = "rule3";
String matchPrefix3 = "A3/";
String ruleId4 = "rule4";
String matchPrefix4 = "A4/";
String ruleId5 = "rule5";
String matchPrefix5 = "A5/";
String ruleId6 = "rule6";
String matchPrefix6 = "A6/";
// Set the expiration time to three days after the last modified time.
LifecycleRule rule = new LifecycleRule(ruleId0, matchPrefix0, LifecycleRule.RuleStatus.Enabled, 3);
rule.setTags(matchTags0);
request.AddLifecycleRule(rule);
// Specify that objects that are created before the specified date expire.
rule = new LifecycleRule(ruleId1, matchPrefix1, LifecycleRule.RuleStatus.Enabled);
rule.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
rule.setTags(matchTags1);
request.AddLifecycleRule(rule);
// Specify that parts expire three days after they are last modified.
rule = new LifecycleRule(ruleId2, matchPrefix2, LifecycleRule.RuleStatus.Enabled);
LifecycleRule.AbortMultipartUpload abortMultipartUpload = new LifecycleRule.AbortMultipartUpload();
abortMultipartUpload.setExpirationDays(3);
rule.setAbortMultipartUpload(abortMultipartUpload);
request.AddLifecycleRule(rule);
// Specify that parts that are created before the specific date expire.
rule = new LifecycleRule(ruleId3, matchPrefix3, LifecycleRule.RuleStatus.Enabled);
abortMultipartUpload = new LifecycleRule.AbortMultipartUpload();
abortMultipartUpload.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
rule.setAbortMultipartUpload(abortMultipartUpload);
request.AddLifecycleRule(rule);
// Specify that the storage classes of objects are changed to IA 10 days after they are last modified, and to Archive 30 days after they are last modified.
rule = new LifecycleRule(ruleId4, matchPrefix4, LifecycleRule.RuleStatus.Enabled);
List<LifecycleRule.StorageTransition> storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
LifecycleRule.StorageTransition storageTransition = new LifecycleRule.StorageTransition();
storageTransition.setStorageClass(StorageClass.IA);
storageTransition.setExpirationDays(10);
storageTransitions.add(storageTransition);
storageTransition = new LifecycleRule.StorageTransition();
storageTransition.setStorageClass(StorageClass.Archive);
storageTransition.setExpirationDays(30);
storageTransitions.add(storageTransition);
rule.setStorageTransition(storageTransitions);
request.AddLifecycleRule(rule);
// Specify that the storage classes of objects that are last modified before October 12, 2022 are changed to Archive.
rule = new LifecycleRule(ruleId5, matchPrefix5, LifecycleRule.RuleStatus.Enabled);
storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
storageTransition = new LifecycleRule.StorageTransition();
storageTransition.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
storageTransition.setStorageClass(StorageClass.Archive);
storageTransitions.add(storageTransition);
rule.setStorageTransition(storageTransitions);
request.AddLifecycleRule(rule);
// Specify that rule6 is configured for versioning-enabled buckets.
rule = new LifecycleRule(ruleId6, matchPrefix6, LifecycleRule.RuleStatus.Enabled);
// Specify that the storage classes of objects are changed to Archive 365 days after the objects are last modified.
storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
storageTransition = new LifecycleRule.StorageTransition();
storageTransition.setStorageClass(StorageClass.Archive);
storageTransition.setExpirationDays(365);
storageTransitions.add(storageTransition);
rule.setStorageTransition(storageTransitions);
// Configure the lifecycle rule to automatically delete expired delete markers.
rule.setExpiredDeleteMarker(true);
// Specify that the storage classes of the previous versions of objects are changed to IA 10 days after the objects are last modified.
LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition =
new LifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(10).withStrorageClass(StorageClass.IA);
// Specify that the storage classes of the previous versions of objects are changed to Archive 20 days after the objects are last modified.
LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition2 =
new LifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(20).withStrorageClass(StorageClass.Archive);
// Specify that the previous versions of objects are deleted 30 days after the objects are last modified.
LifecycleRule.NoncurrentVersionExpiration noncurrentVersionExpiration = new LifecycleRule.NoncurrentVersionExpiration().withNoncurrentDays(30);
List<LifecycleRule.NoncurrentVersionStorageTransition> noncurrentVersionStorageTransitions = new ArrayList<LifecycleRule.NoncurrentVersionStorageTransition>();
noncurrentVersionStorageTransitions.add(noncurrentVersionStorageTransition2);
rule.setStorageTransition(storageTransitions);
rule.setNoncurrentVersionExpiration(noncurrentVersionExpiration);
rule.setNoncurrentVersionStorageTransitions(noncurrentVersionStorageTransitions);
request.AddLifecycleRule(rule);
// Initiate a request to configure lifecycle rules.
ossClient.setBucketLifecycle(request);
// Query the lifecycle rules that are configured for the bucket.
List<LifecycleRule> listRules = ossClient.getBucketLifecycle(bucketName);
for(LifecycleRule rules : listRules){
System.out.println("ruleId="+rules.getId()+", matchPrefix="+rules.getPrefix());
}
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
PHP
<?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\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
use OSS\Model\LifecycleConfig;
use OSS\Model\LifecycleRule;
use OSS\Model\LifecycleAction;
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
$provider = new EnvironmentVariableCredentialsProvider();
// In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the name of the bucket.
$bucket= "examplebucket";
// Specify the rule ID and the prefix contained in the names of the objects that match the rule.
$ruleId0 = "rule0";
$matchPrefix0 = "A0/";
$ruleId1 = "rule1";
$matchPrefix1 = "A1/";
$lifecycleConfig = new LifecycleConfig();
$actions = array();
// Specify that objects expire three days after they are last modified.
$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();
// Specify that the objects that are created before the specified date expire.
$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 {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
);
$ossClient = new OssClient($config);
$ossClient->putBucketLifecycle($bucket, $lifecycleConfig);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
Node.js
const OSS = require('ali-oss')
const client = new OSS({
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou.
region: 'yourregion',
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
// Specify the name of the bucket.
bucket: 'yourbucketname'
});
async function getBucketLifecycle () {
try {
const result = await client.getBucketLifecycle('Yourbucketname');
console.log(result.rules); // Query the lifecycle rules.
rules.forEach(rule => {
console.log(rule.id) // Query the rule IDs.
console.log(rule.status) // Query the status of the rules.
console.log(rule.tags) // Query the tags configured in the lifecycle rules.
console.log(rule.expiration.days) // Query the validity period configurations.
console.log(rule.expiration.createdBeforeDate) // Query the expiration date configurations.
// Query the rule for expired parts.
console.log(rule.abortMultipartUpload.days || rule.abortMultipartUpload.createdBeforeDate)
// Query the rule of storage class conversion.
console.log(rule.transition.days || rule.transition.createdBeforeDate) // Query the conversion date configurations.
console.log(rule.transition.storageClass) // Query the configurations used to convert storage classes.
// Query the lifecycle rule to check whether expired delete markers are automatically deleted.
console.log(rule.transition.expiredObjectDeleteMarker)
// Query the configurations used to convert the storage class of previous versions of the objects.
console.log(rule.noncurrentVersionTransition.noncurrentDays) // Query the conversion date configurations for objects of previous versions.
console.log(rule.noncurrentVersionTransition.storageClass) // Query the configurations used to convert the storage classes of previous versions of objects.
})
} catch (e) {
console.log(e);
}
}
getBucketLifecycle();
Python
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import datetime
from oss2.models import (LifecycleExpiration, LifecycleRule,
BucketLifecycle,AbortMultipartUpload,
TaggingRule, Tagging, StorageTransition,
NoncurrentVersionStorageTransition,
NoncurrentVersionExpiration)
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
# Specify the name of the bucket. Example: examplebucket.
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# Specify that objects expire three days after they are last modified.
rule1 = LifecycleRule('rule1', 'tests/',
status=LifecycleRule.ENABLED,
expiration=LifecycleExpiration(days=3))
# Specify that objects created before the specified date expire.
rule2 = LifecycleRule('rule2', 'tests2/',
status=LifecycleRule.ENABLED,
expiration=LifecycleExpiration(created_before_date=datetime.date(2023, 12, 12)))
# Specify that the parts expire three days after they are last modified.
rule3 = LifecycleRule('rule3', 'tests3/',
status=LifecycleRule.ENABLED,
abort_multipart_upload=AbortMultipartUpload(days=3))
# Specify that parts created before the specified date expire.
rule4 = LifecycleRule('rule4', 'tests4/',
status=LifecycleRule.ENABLED,
abort_multipart_upload = AbortMultipartUpload(created_before_date=datetime.date(2022, 12, 12)))
# Specify that the storage classes of objects are changed to Infrequent Access (IA) 20 days after they are last modified, and to Archive 30 days after they are last modified.
rule5 = LifecycleRule('rule5', 'tests5/',
status=LifecycleRule.ENABLED,
storage_transitions=[StorageTransition(days=20,storage_class=oss2.BUCKET_STORAGE_CLASS_IA),
StorageTransition(days=30,storage_class=oss2.BUCKET_STORAGE_CLASS_ARCHIVE)])
# Specify the tag that you want the lifecycle rule to match.
tagging_rule = TaggingRule()
tagging_rule.add('key1', 'value1')
tagging_rule.add('key2', 'value2')
tagging = Tagging(tagging_rule)
# Specify that the storage classes of objects are changed to Archive 365 days after they are last modified.
# Compared with the preceding rules, rule6 includes the tag condition to match objects. The rule takes effect for objects whose tagging configurations are key1=value1 and key2=value2.
rule6 = LifecycleRule('rule6', 'tests6/',
status=LifecycleRule.ENABLED,
storage_transitions=[StorageTransition(created_before_date=datetime.date(2022, 12, 12),storage_class=oss2.BUCKET_STORAGE_CLASS_IA)],
tagging = tagging)
# rule7 is a lifecycle rule that applies to a versioning-enabled bucket.
# Specify that the storage classes of objects are changed to Archive 365 days after they are last modified.
# Specify that delete markers are automatically removed when they expire.
# Specify that the storage classes of objects are changed to IA 12 days after they become previous versions.
# Specify that the storage classes of objects are changed to Archive 20 days after they become previous versions.
# Specify that objects are deleted 30 days after they become previous versions.
rule7 = LifecycleRule('rule7', 'tests7/',
status=LifecycleRule.ENABLED,
storage_transitions=[StorageTransition(days=365, storage_class=oss2.BUCKET_STORAGE_CLASS_ARCHIVE)],
expiration=LifecycleExpiration(expired_detete_marker=True),
noncurrent_version_sotrage_transitions =
[NoncurrentVersionStorageTransition(12, oss2.BUCKET_STORAGE_CLASS_IA),
NoncurrentVersionStorageTransition(20, oss2.BUCKET_STORAGE_CLASS_ARCHIVE)],
noncurrent_version_expiration = NoncurrentVersionExpiration(30))
lifecycle = BucketLifecycle([rule1, rule2, rule3, rule4, rule5, rule6, rule7])
bucket.put_bucket_lifecycle(lifecycle)
C#
Aliyun.OSSを使用した
using Aliyun.OSS;
using Aliyun.OSS.Common;
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Specify the bucket name. Example: examplebucket.
var bucketName = "examplebucket";
// Create an OSSClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
var setBucketLifecycleRequest = new SetBucketLifecycleRequest(bucketName);
// Create the first lifecycle rule.
LifecycleRule lcr1 = new LifecycleRule()
{
ID = "delete obsoleted files",
Prefix = "obsoleted/",
Status = RuleStatus.Enabled,
ExpriationDays = 3,
Tags = new Tag[1]
};
// Specify a tag for the rule.
var tag1 = new Tag
{
Key = "project",
Value = "projectone"
};
lcr1.Tags[0] = tag1;
// Create the second lifecycle rule.
LifecycleRule lcr2 = new LifecycleRule()
{
ID = "delete temporary files",
Prefix = "temporary/",
Status = RuleStatus.Enabled,
ExpriationDays = 20,
Tags = new Tag[1]
};
// Specify a tag for the rule.
var tag2 = new Tag
{
Key = "user",
Value = "jsmith"
};
lcr2.Tags[0] = tag2;
// Specify that parts expire 30 days after they are last modified.
lcr2.AbortMultipartUpload = new LifecycleRule.LifeCycleExpiration()
{
Days = 30
};
LifecycleRule lcr3 = new LifecycleRule();
lcr3.ID = "only NoncurrentVersionTransition";
lcr3.Prefix = "test1";
lcr3.Status = RuleStatus.Enabled;
lcr3.NoncurrentVersionTransitions = new LifecycleRule.LifeCycleNoncurrentVersionTransition[2]
{
// Specify that the storage classes of the previous versions of objects are converted to IA 90 days after they are last modified.
new LifecycleRule.LifeCycleNoncurrentVersionTransition(){
StorageClass = StorageClass.IA,
NoncurrentDays = 90
},
// Specify that the storage classes of the previous versions of objects are converted to Archive 180 days after they are last modified.
new LifecycleRule.LifeCycleNoncurrentVersionTransition(){
StorageClass = StorageClass.Archive,
NoncurrentDays = 180
}
};
setBucketLifecycleRequest.AddLifecycleRule(lcr1);
setBucketLifecycleRequest.AddLifecycleRule(lcr2);
setBucketLifecycleRequest.AddLifecycleRule(lcr3);
// Configure lifecycle rules.
client.SetBucketLifecycle(setBucketLifecycleRequest);
Console.WriteLine("Set bucket:{0} Lifecycle succeeded ", bucketName);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
Android-Java
PutBucketLifecycleRequest request = new PutBucketLifecycleRequest();
request.setBucketName("examplebucket");
BucketLifecycleRule rule1 = new BucketLifecycleRule();
// Specify the rule ID and the prefix contained in the names of the objects that match the rule.
rule1.setIdentifier("1");
rule1.setPrefix("A");
// Specify whether to run the lifecycle rule. If this parameter is set to true, OSS periodically runs this rule. If this parameter is set to false, OSS ignores this rule.
rule1.setStatus(true);
// Specify that objects expire 200 days after they are last modified.
rule1.setDays("200");
// Specify that the storage classes of objects are converted to Archive 30 days after they are last modified.
rule1.setArchiveDays("30");
// Specify that parts expire three days after they fail to be uploaded.
rule1.setMultipartDays("3");
// Specify that the storage classes of objects are converted to Infrequent Access (IA) 15 days after they are last modified.
rule1.setIADays("15");
BucketLifecycleRule rule2 = new BucketLifecycleRule();
rule2.setIdentifier("2");
rule2.setPrefix("B");
rule2.setStatus(true);
rule2.setDays("300");
rule2.setArchiveDays("30");
rule2.setMultipartDays("3");
rule2.setIADays("15");
ArrayList<BucketLifecycleRule> lifecycleRules = new ArrayList<BucketLifecycleRule>();
lifecycleRules.add(rule1);
lifecycleRules.add(rule2);
request.setLifecycleRules(lifecycleRules);
OSSAsyncTask task = oss.asyncPutBucketLifecycle(request, new OSSCompletedCallback<PutBucketLifecycleRequest, PutBucketLifecycleResult>() {
@Override
public void onSuccess(PutBucketLifecycleRequest request, PutBucketLifecycleResult result) {
OSSLog.logInfo("code::"+result.getStatusCode());
}
@Override
public void onFailure(PutBucketLifecycleRequest request, ClientException clientException, ServiceException serviceException) {
OSSLog.logError("error: "+serviceException.getRawMessage());
}
});
task.waitUntilFinished();
Go
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main() {
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify the actual endpoint.
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Specify the name of the bucket.
bucketName := "examplebucket"
// Configure a lifecycle rule and set ID to rule1. Specify that the objects whose names contain the foo prefix in the bucket expire three days after the objects are last modified.
rule1 := oss.BuildLifecycleRuleByDays("rule1", "foo/", true, 3)
// If an object in a bucket for which versioning is enabled is a delete marker and has no other versions, the delete marker is deleted.
deleteMark := true
expiration := oss.LifecycleExpiration{
ExpiredObjectDeleteMarker: &deleteMark,
}
// Specify that the previous versions of objects are deleted 30 days after they are last modified.
versionExpiration := oss.LifecycleVersionExpiration{
NoncurrentDays: 30,
}
// Specify that the storage classes of the previous versions of objects are converted to Infrequent Access (IA) 10 days after the objects are last modified.
versionTransition := oss.LifecycleVersionTransition{
NoncurrentDays: 10,
StorageClass: "IA",
}
// Configure a lifecycle rule and set ID to rule2.
rule2 := oss.LifecycleRule{
ID: "rule2",
Prefix: "yourObjectPrefix",
Status: "Enabled",
Expiration: &expiration,
NonVersionExpiration: &versionExpiration,
NonVersionTransitions: []oss.LifecycleVersionTransition{
versionTransition,
},
}
// Configure a lifecycle rule and set ID to rule3. This rule takes effect for objects that have the tag whose key is tag1 and value is value1. These objects expire three days after the objects are last modified.
rule3 := oss.LifecycleRule{
ID: "rule3",
Prefix: "",
Status: "Enabled",
Tags: []oss.Tag{
oss.Tag{
Key: "tag1",
Value: "value1",
},
},
Expiration: &oss.LifecycleExpiration{Days: 3},
}
// Configure lifecycle rules.
rules := []oss.LifecycleRule{rule1, rule2, rule3}
err = client.SetBucketLifecycle(bucketName, rules)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
C ++
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize information about the account used to access OSS. */
/* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Specify the name of the bucket. Example: examplebucket. */
std::string BucketName = "examplebucket";
/* Initialize resources such as network resources. */
InitializeSdk();
ClientConfiguration conf;
/* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
SetBucketLifecycleRequest request(BucketName);
std::string date("2022-10-12T00:00:00.000Z");
/* Specify the tags of the objects that you want to match the rule. */
Tagging tagging;
tagging.addTag(Tag("key1", "value1"));
tagging.addTag(Tag("key2", "value2"));
/* Specify a lifecycle rule. */
auto rule1 = LifecycleRule();
rule1.setID("rule1");
rule1.setPrefix("test1/");
rule1.setStatus(RuleStatus::Enabled);
rule1.setExpiration(3);
rule1.setTags(tagging.Tags());
/* Specify the expiration date. */
auto rule2 = LifecycleRule();
rule2.setID("rule2");
rule2.setPrefix("test2/");
rule2.setStatus(RuleStatus::Disabled);
rule2.setExpiration(date);
/* Specify that rule3 is enabled for the bucket if versioning is enabled for the bucket. */
auto rule3 = LifecycleRule();
rule3.setID("rule3");
rule3.setPrefix("test3/");
rule3.setStatus(RuleStatus::Disabled);
/* Specify that the storage classes of objects are changed to Archive 365 days after the objects are last modified. */
auto transition = LifeCycleTransition();
transition.Expiration().setDays(365);
transition.setStorageClass(StorageClass::Archive);
rule3.addTransition(transition);
/* Specify that expired delete markers are automatically deleted. */
rule3.setExpiredObjectDeleteMarker(true);
/* Specify that the storage classes of the previous versions of objects are changed to IA 10 days after the objects are last modified. */
auto transition1 = LifeCycleTransition();
transition1.Expiration().setDays(10);
transition1.setStorageClass(StorageClass::IA);
/* Specify that the storage classes of the previous versions of objects are changed to Archive 20 days after the objects are last modified. */
auto transition2 = LifeCycleTransition();
transition2.Expiration().setDays(20);
transition2.setStorageClass(StorageClass::Archive);
/* Specify that previous versions are deleted 30 days after the versions are updated. */
auto expiration = LifeCycleExpiration(30);
rule3.setNoncurrentVersionExpiration(expiration);
LifeCycleTransitionList noncurrentVersionStorageTransitions{transition1, transition2};
rule3.setNoncurrentVersionTransitionList(noncurrentVersionStorageTransitions);
/* Configure the lifecycle rules. */
LifecycleRuleList list{rule1, rule2, rule3};
request.setLifecycleRules(list);
auto outcome = client.SetBucketLifecycle(request);
if (!outcome.isSuccess()) {
/* Handle exceptions. */
std::cout << "SetBucketLifecycle fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Release resources such as network resources. */
ShutdownSdk();
return 0;
}
C
#include "oss_api.h"
#include "aos_http_io.h"
/* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Specify the name of the bucket. Example: examplebucket. */
const char *bucket_name = "examplebucket";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* Use a char* string to initialize aos_string_t. */
aos_str_set(&options->config->endpoint, endpoint);
/* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
/* Specify whether to use CNAME to access OSS. A value of 0 indicates that CNAME is not used. */
options->config->is_cname = 0;
/* Specify network parameters, such as the timeout period. */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* Call the aos_http_io_initialize method in main() to initialize global resources, such as network resources and memory resources. */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* Create a memory pool to manage memory. aos_pool_t is equivalent to apr_pool_t. The code used to create a memory pool is included in the APR library. */
aos_pool_t *pool;
/* Create a memory pool. The value of the second parameter is NULL. This value indicates that the pool does not inherit other memory pools. */
aos_pool_create(&pool, NULL);
/* Create and initialize options. This parameter includes global configuration information such as endpoint, access_key_id, access_key_secret, is_cname, and curl. */
oss_request_options_t *oss_client_options;
/* Allocate memory resources in the memory pool to the options. */
oss_client_options = oss_request_options_create(pool);
/* Initialize oss_client_options. */
init_options(oss_client_options);
/* Initialize parameters. */
aos_string_t bucket;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
aos_str_set(&bucket, bucket_name);
aos_list_t lifecycle_rule_list;
aos_str_set(&bucket, bucket_name);
aos_list_init(&lifecycle_rule_list);
/* Specify the validity period. */
oss_lifecycle_rule_content_t *rule_content_days = oss_create_lifecycle_rule_content(pool);
aos_str_set(&rule_content_days->id, "rule-1");
/* Specify the prefix that is contained in the names of the objects that you want to match the rule. */
aos_str_set(&rule_content_days->prefix, "dir1");
aos_str_set(&rule_content_days->status, "Enabled");
rule_content_days->days = 3;
aos_list_add_tail(&rule_content_days->node, &lifecycle_rule_list);
/* Specify the expiration date. */
oss_lifecycle_rule_content_t *rule_content_date = oss_create_lifecycle_rule_content(pool);
aos_str_set(&rule_content_date->id, "rule-2");
aos_str_set(&rule_content_date->prefix, "dir2");
aos_str_set(&rule_content_date->status, "Enabled");
/* The expiration date is displayed in UTC.
aos_str_set(&rule_content_date->date, "2023-10-11T00:00:00.000Z");
aos_list_add_tail(&rule_content_date->node, &lifecycle_rule_list);
/* Configure the lifecycle rule. */
resp_status = oss_put_bucket_lifecycle(oss_client_options, &bucket, &lifecycle_rule_list, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("put bucket lifecycle succeeded\n");
} else {
printf("put bucket lifecycle failed, code:%d, error_code:%s, error_msg:%s, request_id:%s\n",
resp_status->code, resp_status->error_code, resp_status->error_msg, resp_status->req_id);
}
/* Release the memory pool to release the memory resources allocated for the request. */
aos_pool_destroy(pool);
/* Release the allocated global resources. */
aos_http_io_deinitialize();
return 0;
}
Ruby
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
# In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint.
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# Specify the bucket name.
bucket = client.get_bucket('examplebucket')
# Configure lifecycle rules.
bucket.lifecycle = [
Aliyun::OSS::LifeCycleRule.new(
:id => 'rule1', :enable => true, :prefix => 'foo/', :expiry => 3),
Aliyun::OSS::LifeCycleRule.new(
:id => 'rule2', :enable => false, :prefix => 'bar/', :expiry => Date.new(2016, 1, 1))
]
ossutil の使用
ossutilを使用してライフサイクルルールを設定できます。 詳細については、「ライフサイクルルールの作成または変更」をご参照ください。
RESTful APIの使用
ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketLifecycle」をご参照ください。
CopyObjectを呼び出して、オブジェクトのストレージクラスを手動で変換します。
CopyObject操作を呼び出して、オブジェクトを上書きしてオブジェクトのストレージクラスを変換できます。
オブジェクトのストレージクラスをIA、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換する場合、IAオブジェクトのオブジェクトサイズとストレージ期間に基づいてストレージ料金が課金されます。また、オブジェクトサイズとストレージ期間に基づいてストレージ料金が課金されます。 詳細については、「使用状況のメモ」セクションをご参照ください。
Archive、Cold Archive、またはDeep Cold Archiveオブジェクトのストレージクラスを変換するには、まずオブジェクトを復元する必要があります。 オブジェクトを復元する方法の詳細については、「オブジェクトの復元」をご参照ください。 バケットに対してArchiveオブジェクトのリアルタイムアクセスが有効になっている場合、バケット内のArchiveオブジェクトのストレージクラスを復元せずに直接変換できます。 アクセスしたアーカイブデータのサイズに基づいて、アーカイブデータ取得料金が請求されます。 詳細については、「アーカイブオブジェクトのリアルタイムアクセス」をご参照ください。
CopyObject操作を呼び出して、バージョン管理が有効になっているバケット内のオブジェクトのストレージクラスを変換すると、OSSは自動的に宛先オブジェクトの一意のバージョンIDを生成します。 バージョンIDは、
x-oss-version-id
レスポンスヘッダーで返されます。バケットのバージョン管理が無効または一時停止されている場合、OSSは宛先オブジェクトのIDがnullのバージョンを生成し、IDがnullの既存のバージョンを上書きします。 上書きされたバージョンのストレージクラスがIA、Archive、Cold Archive、またはDeep Cold Archiveの場合、最小保存期間未満で保存されたバージョンのストレージ使用量に対して課金される場合があります。 詳細については、「」をご参照ください。ストレージ期間が最小ストレージ期間より短いオブジェクトに対して、どのように課金されますか?
CopyObjectの呼び出しによるストレージクラス変換のルール
LRS
LRSオブジェクトは、標準LRS、IA LRS、アーカイブLRS、コールドアーカイブLRS、およびディープコールドアーカイブLRSの2つのストレージクラス間で変換できます。
ZRS
ZRSオブジェクトは、標準ZRSとIA ZRSの間でのみ変換できます。
オブジェクトのストレージクラスを手動で変換するメソッド
OSS コンソールの使用
OSSコンソールでオブジェクトのストレージクラスを変換する場合、オブジェクトのサイズは1 GBを超えることはできません。 サイズが1 GBを超えるオブジェクトのストレージクラスを変換するには、OSS SDKまたはossutilを使用することを推奨します。
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、変換するストレージクラスのオブジェクトが格納されているバケットをクリックします。
左側のナビゲーションツリーで、ファイル > オブジェクト を選択します。
オブジェクト ページで、ストレージクラスを変換するオブジェクトを見つけ、 > ストレージクラスの変更 を選択します。
オブジェクトのストレージクラスを変換した後、ユーザーメタデータの保持 をオンにして、オブジェクトのユーザーメタデータを保持することを推奨します。
オブジェクトを変換するストレージクラスを選択し、OK をクリックします。
OSS SDKの使用
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CopyObjectRequest;
import com.aliyun.oss.model.CopyObjectResult;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.StorageClass;
public class Demo {
public static void main(String[] args) throws Exception {
// In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// In this example, a bucket and a Standard or IA object are created.
// Specify the name of the bucket. Example: examplebucket.
String bucketName = "examplebucket";
// Specify the full path of the object. Do not include the bucket name in the full path. Example: exampleobject.txt.
String objectName = "exampleobject.txt";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// Create a CopyObjectRequest object.
CopyObjectRequest request = new CopyObjectRequest(bucketName, objectName, bucketName, objectName) ;
// Create an ObjectMetadata object.
ObjectMetadata objectMetadata = new ObjectMetadata();
// Convert the storage class of the object to Archive.
objectMetadata.setHeader("x-oss-storage-class", StorageClass.Archive);
// Convert the storage class of the object to Cold Archive.
// objectMetadata.setHeader("x-oss-storage-class", StorageClass.ColdArchive);
// Convert the storage class of the object to Deep Cold Archive.
// objectMetadata.setHeader("x-oss-storage-class", StorageClass.DeepColdArchive);
request.setNewObjectMetadata(objectMetadata);
// Convert the storage class of the object.
CopyObjectResult result = ossClient.copyObject(request);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
<?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\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
$provider = new EnvironmentVariableCredentialsProvider();
// In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the name of the bucket.
$bucket= "<yourBucketName>";
// Specify the full path of the object. Do not include the bucket name in the full path. Example: destfolder/exampleobject.txt.
$object = "<yourObjectName>";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
);
$ossClient = new OssClient($config);
try {
// Specify the storage class to which you want to convert the object. In this example, set the storage class to Archive.
$copyOptions = array(
OssClient::OSS_HEADERS => array(
'x-oss-storage-class' => 'Archive',
'x-oss-metadata-directive' => 'REPLACE',
),
);
$ossClient->copyObject($bucket, $object, $bucket, $object, $copyOptions);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
const OSS = require('ali-oss');
const client = new OSS({
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou.
region: 'yourregion',
// Obtain access credentials from environment variables. Before you run the sample code, make sure that you have configured environment variables OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
// Specify the name of the bucket.
bucket: 'yourbucketname'
})
const options = {
headers:{'x-oss-storage-class':'Archive'}
}
client.copy('Objectname','Objectname',options).then((res) => {
console.log(res);
}).catch(err => {
console.log(err)
})
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import os
# Obtain access credentials from environment variables. Before you run the code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint.
# Specify the name of the bucket. Example: examplebucket.
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt.
# Make sure that the storage class of the object is Standard or IA.
object_name = 'exampledir/exampleobject.txt'
# Convert the storage class of the object to Archive by specifying the x-oss-storage-class header.
headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_ARCHIVE}
# Convert the storage class of the object to Cold Archive by specifying the x-oss-storage-class header.
# headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_COLD_ARCHIVE}
# Convert the storage class of the object to Deep Cold Archive by specifying the x-oss-storage-class header.
# headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_DEEP_COLD_ARCHIVE}
# Convert the storage class of the object.
bucket.copy_object(bucket.bucket_name, object_name, object_name, headers)
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
/// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Specify the name of the bucket.
bucketName := "yourBucketName"
// Specify the full path of the object. Do not include the bucket name in the full path.
objectName := "yourObjectName"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Convert the storage class of the object. In this example, the storage class is set to Archive.
_, err = bucket.CopyObject(objectName, objectName, oss.ObjectStorageClass(oss.StorageArchive))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
OSSCopyObjectRequest * copy = [OSSCopyObjectRequest new];
copy.sourceBucketName = @ "examplebucket";
copy.sourceobjectKey = @ "exampleobject.txt";
copy.bucketName = @ "examplebucket";
copy.objectKey = @ "exampleobject.txt";
// exampleobject.txtオブジェクトのストレージクラスをArchiveに設定します。
copy.objectMeta = @{@ "x-oss-storage-class" : @ "Archive"};
OSSTask * task = [client copyObject:copy];
[task continueWithBlock:^ id(OSSTask * task) {
if (!task.error) {
NSLog(@ "オブジェクトのコピー成功!");
} else {
NSLog(@ "copy object failed, error: % @" , task.error);
}
nilを返します。}];
#include <iostream>
# include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
/* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
std::stringエンドポイント=" https://oss-cn-hangzhou.aliyuncs.com ";
/* バケットの名前を指定します。 例: examplebucket. */
std::string BucketName = "examplebucket";
/* オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 */
std::string ObjectName = "exampledir/exampleobject.txt";
/* ネットワークリソースなどのリソースを初期化します。 */
InitializeSdk();
ClientConfiguration conf;
/* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClientクライアント (Endpoint, credentialsProvider, conf);
/* オブジェクトを変換するストレージクラスを指定します。 この例では、ストレージクラスはArchiveに設定されています。 */
ObjectMetaData objectMeta;
objectMeta.addHeader("x-oss-storage-class" 、"Archive");
std::string SourceBucketName = BucketName;
std::string SourceObjectName = ObjectName;
CopyObjectRequestリクエスト (SourceBucketName, ObjectName, objectMeta);
request.setCopySource(SourceBucketName, SourceObjectName);
/* オブジェクトのストレージクラスを指定されたストレージクラスに変換します。 */
auto outcome = client.CopyObject (リクエスト);
if (!outcome.isSuccess()) {
/* 例外を処理します。 */
std::cout << "CopyObject fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* ネットワークリソースなどのリソースをリリースします。 */
ShutdownSdk();
0を返します。}
ossutil の使用
ossutilを使用してオブジェクトのストレージクラスを変換する方法の詳細については、「オブジェクトのストレージクラスの変更」をご参照ください。
RESTful APIの使用
ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「CopyObject」をご参照ください。
使用上の注意
オブジェクトのストレージクラスをIA、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換する場合は、次の項目に注意してください。
最小請求可能サイズ
オブジェクトの最小課金サイズは64 KBです。 オブジェクトのサイズが64 KB未満の場合、オブジェクトの最小課金サイズに対して課金されます。
最小保存期間
最小保存期間は、IA オブジェクトは 30 日、アーカイブオブジェクトは 60 日、コールドアーカイブとディープコールドアーカイブオブジェクトは 180 日です。 オブジェクトが最小保存期間未満の期間保存されている場合、最小保存期間未満の期間保存されているオブジェクトのストレージ使用量に対して課金されます。 詳細については、「ストレージ料金」をご参照ください。
オブジェクトのストレージクラスを自動的に変換するライフサイクルルールの設定
オブジェクトのストレージクラスをIAまたはArchiveに変換した場合、OSSは保持期間を再計算しません。
たとえば、a.txtという名前のオブジェクトはStandardオブジェクトです。 オブジェクトがOSSに10日間保存されると、ストレージクラスはライフサイクルルールに基づいてIAに変換されます。 ストレージクラスの変換後、IAストレージクラスの最小保存期間要件を満たすために、オブジェクトをさらに20日間IAオブジェクトとして保存する必要があります。
オブジェクトのストレージクラスをCold ArchiveまたはDeep Cold Archiveに変換すると、OSSは保持期間を再計算します。
例1: a.txtという名前のオブジェクトは、StandardまたはIAオブジェクトです。 オブジェクトがOSSに10日間保存されると、ストレージクラスはライフサイクルルールに基づいてコールドアーカイブまたはディープコールドアーカイブに変換されます。 ストレージクラスの変換後、オブジェクトは、コールドアーカイブまたはディープコールドアーカイブストレージクラスの最小ストレージ期間要件を満たすために、180日間保存する必要があります。
例2: a.txtという名前のオブジェクトは、Cold Archiveオブジェクトです。 オブジェクトがOSSに30日間保存されると、ストレージクラスはライフサイクルルールに基づいてDeep Cold Archiveに変換されます。 30日間保存されたCold Archiveオブジェクトのストレージ使用量と、最小保存期間 (180 - 30) 未満保存されたCold Archiveオブジェクトのストレージ使用量に対して課金されます。 オブジェクトをDeep Cold Archiveオブジェクトに変換した後、Deep Cold Archiveストレージクラスの最小保存期間要件を満たすために、オブジェクトを180日間保存する必要があります。
CopyObjectを呼び出して、オブジェクトのストレージクラスを手動で変換します。
CopyObject を呼び出してオブジェクトのストレージクラスを手動で変換する場合、OSS はオブジェクトの保存期間を再計算します。
たとえば、a.txtという名前のオブジェクトはStandardオブジェクトです。 オブジェクトがOSSに10日間保存されると、CopyObject操作を呼び出してストレージクラスがIAに変換されます。 ストレージクラスの変換後、IAストレージクラスの最小保存期間要件を満たすために、オブジェクトをIAオブジェクトとして30日間保存する必要があります。
IAオブジェクト、アーカイブオブジェクト、コールドアーカイブ、またはディープコールドアーカイブオブジェクトの名前を変更した場合、または最小保存期間が経過する前に同じ名前のオブジェクトをアップロードしてオブジェクトを上書きした場合、最小保存期間未満で保存されたオブジェクトのストレージ使用量に対しても課金されます。 たとえば、IAオブジェクトが29日間保存された後に名前を変更した場合、OSSはオブジェクトの最終変更時刻を再計算します。 つまり、IAストレージクラスの最小保存期間要件を満たすには、オブジェクトをさらに30日間保存する必要があります。
修復時間
Archive、Cold Archive、およびDeep Cold Archiveオブジェクトは、アクセスする前に復元する必要があります。 アーカイブ、コールドアーカイブ、またはDeep Cold Archiveオブジェクトの復元には時間がかかります。 ビジネスシナリオでオブジェクトへのリアルタイムアクセスが必要な場合は、オブジェクトのストレージクラスをアーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換しないことをお勧めします。
API の呼び出し料金
変換方法 | 変換前のストレージクラス | API操作呼び出し料金 |
ライフサイクルルール | 標準、IA、アーカイブ、コールドアーカイブ | 変換前のストレージクラスに基づいて、PUTリクエストに対して課金されます。 API操作呼び出し料金は、現在のバケットの請求書に含まれています。 |
CopyObject | アーカイブ |
|
標準、IA、コールドアーカイブ、ディープコールドアーカイブ | ソースオブジェクトのストレージクラスに基づいて、PUTリクエストに対して課金されます。 API操作呼び出し料金は、宛先バケットの請求書に含まれています。 |
① CopyObject操作を呼び出して、アーカイブオブジェクトのリアルタイムアクセスが有効になっているバケット内のアーカイブオブジェクトを変換する場合、事前にオブジェクトを復元する必要はなく、復元に対して課金されません。 アクセスしたアーカイブデータのサイズに基づいて、アーカイブデータ取得料金が請求されます。
② Archiveオブジェクトのリアルタイムアクセスが有効になっていないバケット内のArchiveオブジェクトを変換するためにCopyObject操作を呼び出した場合、オブジェクトを最初に復元する必要があり、復元に対して課金されます。
詳細については、「データ処理料金」をご参照ください。
データ取得料金
取得したIAデータのサイズに基づいてIAオブジェクトにアクセスすると、データ取得料金が発生します。 Archive、Cold Archive、およびDeep Cold Archiveオブジェクトを復元すると、追加料金が発生します。 バケットに対してArchiveオブジェクトのリアルタイムアクセスが有効になっている場合、Archiveオブジェクトにリアルタイムでアクセスすると課金されます。 データ取得料金とアウトバウンドトラフィック料金は別々に計算されます。 標準オブジェクトに1か月に複数回アクセスする場合、オブジェクトのストレージクラスをIA、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換すると、コストが高くなる可能性があります。
一時ストレージ料金
Cold ArchiveオブジェクトまたはDeep Cold Archiveオブジェクトを復元すると、アクセスを容易にするためにオブジェクトの標準レプリカが作成されます。 復元期間が終了する前に、標準オブジェクトとしてレプリカの期間に対して一時的なストレージ料金が請求されます。
よくある質問
最終変更時刻に基づいてライフサイクルルールを設定して、オブジェクトのストレージクラスをIAから標準に変換できますか?
いいえ。ライフサイクルルールを使用して、オブジェクトのストレージクラスをIAからStandardに変換することはできません。 次のいずれかのメソッドを使用して、オブジェクトのストレージクラスをIAからStandardに変換できます。
CopyObject操作の呼び出し
CopyObject操作を呼び出して、オブジェクトのストレージクラスをIAからStandardに変換できます。 詳細については、「CopyObjectを呼び出してオブジェクトのストレージクラスを手動で変換する」をご参照ください。
ossutil の使用
ossutilを使用してset-metaコマンドを実行し、X-Oss-Storage-Classオプションを指定できます。 これにより、1つ以上のオブジェクトのストレージクラスをIAからStandardに変換できます。 詳細については、「オブジェクトメタデータの設定または更新」をご参照ください。