Object Storage Service (OSS) は、標準、低頻度アクセス (IA)、アーカイブ、コールドアーカイブ、ディープコールドアーカイブのストレージクラスを提供します。 プリセットされたライフサイクルルールを使用するか、CopyObject オペレーションを呼び出すことで、オブジェクトのストレージクラスを自動的に変換できます。
OSS-HDFS が有効になっているバケットの
.dlsdata/ディレクトリにあるオブジェクトのストレージクラスは変更しないことをお勧めします。.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、アーカイブ、コールドアーカイブ、およびディープコールドアーカイブに変換するために、異なるポリシーがバケットに同時に設定されている場合、ポリシーで指定された期間は次の要件を満たす必要があります。
IA への変換に必要な時間 < アーカイブへの変換に必要な時間 < コールドアーカイブへの変換に必要な時間 < ディープコールドアーカイブへの変換に必要な時間
ZRS

ゾーン冗長ストレージ (ZRS) オブジェクトのストレージクラスは、次のルールに基づいて変換できます。
標準 ZRS から IA ZRS、アーカイブ ZRS、コールドアーカイブ LRS、またはディープコールドアーカイブ LRS への変換
IA ZRS からアーカイブ ZRS、コールドアーカイブ LRS、またはディープコールドアーカイブ LRS への変換
アーカイブ ZRS からコールドアーカイブ LRS またはディープコールドアーカイブ LRS への変換
コールドアーカイブ LRS からディープコールドアーカイブ LRS への変換
詳細については、「最終更新日時刻に基づくライフサイクルルール」をご参照ください。
オブジェクトの最終アクセス日時刻に基づくストレージクラスの変換
オブジェクトのストレージクラスを標準または IA からアーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換する場合は、チケットを送信して、必要な権限を最初に申請してください。 申請が承認されたら、オブジェクトのストレージクラスを変換する先のストレージクラスを指定する必要があります。
申請が承認された後、最終アクセス日時刻に基づくライフサイクルルールを使用して、オブジェクトのストレージクラスを標準または 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 コンソールを使用する
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、バケット をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションウィンドウで、データ管理 > ライフサイクル を選択します。
オプション。 オブジェクトの最終アクセス日時刻に基づいてライフサイクルルールを作成するには、ライフサイクル ページで [アクセストラッキングを有効にする] をオンにします。
ライフサイクル ページで、ルールの作成 をクリックします。
[ルールの作成] パネルで、パラメータを設定します。 次の表にパラメータを示します。
バージョン管理されていないバケット
セクション
パラメータ
説明
基本設定
ステータス
ライフサイクルルールのステータスを指定します。 [有効] または [無効] を選択できます。
ライフサイクルルールが有効になると、オブジェクトのストレージクラスが変換されるか、ライフサイクルルールに基づいてオブジェクトが削除されます。
ライフサイクルルールを無効にすると、ライフサイクルルールのライフサイクルフローが中断されます。
ポリシー
ライフサイクルルールを有効にするオブジェクトを指定します。 [指定されたプレフィックスを持つオブジェクト] または バケット全体に適用 を選択できます。
説明[指定されたプレフィックスを持つオブジェクト] を選択した場合は、完全なプレフィックスを指定する必要があります。 たとえば、src/dir1 プレフィックスを含む名前のオブジェクトにライフサイクルルールを適用する場合は、src/dir1 と入力します。 dir1 のみを入力すると、ライフサイクルルールは意図した効果を生み出しません。
重複するプレフィックスを許可
プレフィックスの重複を許可するかどうかを指定します。 デフォルトでは、OSS は各ライフサイクルルールのプレフィックスが重複しているかどうかを確認します。 たとえば、バケットに既存のライフサイクルルール (ルール 1) があり、重複するプレフィックスを含む別のライフサイクルルール (ルール 2) を設定する場合:
ルール 1
バケット内の dir1/ プレフィックスを含む名前のすべてのオブジェクトを、オブジェクトが最後に変更されてから 180 日後に削除します。
ルール 2
バケット内の dir1/dir2/ プレフィックスを含む名前のすべてのオブジェクトのストレージクラスを、オブジェクトが最後に変更されてから 30 日後に IA に変換し、オブジェクトが最後に変更されてから 60 日後に削除します。
このチェックボックスをオンにしないと、OSS は dir1/dir2/ ディレクトリ内のオブジェクトが 2 つのライフサイクルルールに一致することを検出し、ルール 2 の作成を拒否し、同じ操作タイプの有効期限の重複。 エラーメッセージを返します。
このチェックボックスをオンにすると、ルール 2 が作成され、dir1/dir2/ ディレクトリ内のオブジェクトのストレージクラスが、オブジェクトが最後に変更されてから 30 日後に IA に変換され、オブジェクトが最後に変更されてから 60 日後に削除されます。 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]
指定された名前のプレフィックスとタグを持つオブジェクトに対してライフサイクルルールを無効にすることを指定します。
重要[NOT] をオンにする場合は、ライフサイクルルールに [プレフィックス] パラメータと [タグ] パラメータの少なくとも 1 つを指定する必要があります。
[NOT] パラメータに指定されたタグのキーは、タグ パラメータに指定されたキーと同じにすることはできません。
[NOT] をオンにした場合、ライフサイクルルールにパーツポリシーを含めることはできません。
ファイルサイズ
ライフサイクルルールが有効になるオブジェクトのサイズを指定します。
最小サイズ: サイズが指定されたサイズより大きいオブジェクトに対してのみライフサイクルルールが有効になるように指定します。 0 B より大きく 5 TB より小さい最小オブジェクトサイズを指定できます。
最大サイズ: サイズが指定されたサイズより小さいオブジェクトに対してのみライフサイクルルールが有効になるように指定します。 0 B より大きく 5 TB 以下の最大オブジェクトサイズを指定できます。
重要同じライフサイクルルールで最小オブジェクトサイズと最大オブジェクトサイズを指定する場合は、次の点に注意してください。
最大オブジェクトサイズは最小オブジェクトサイズより大きくする必要があります。
ライフサイクルルールにパーツポリシーを含めることはできません。
削除マーカーを削除するポリシーを含めることはできません。
オブジェクトに対するポリシー
オブジェクトのライフサイクル
オブジェクトの有効期限ポリシーを指定します。 [有効期間 (日)]、[有効期限]、または 有効になっていません を選択できます。 有効になっていません を選択すると、オブジェクトの有効期限ポリシーは設定されません。
ライフサイクルベースのルール
オブジェクトのストレージクラスを変換するか、期限切れのオブジェクトを削除するようにライフサイクルルールを設定します。 [IA]、[アーカイブ]、[コールドアーカイブ]、[ディープコールドアーカイブ]、または [オブジェクトの削除 (復元不可)] を選択できます。
たとえば、オブジェクトのライフサイクル に [有効期限] を選択し、有効期限として 2023 年 9 月 24 日を指定し、[オブジェクトの削除 (復元不可)] を指定します。 この場合、2023 年 9 月 24 日より前に最後に変更されたオブジェクトは自動的に削除され、復元できません。
フラグメントに対するポリシー
フラグメント期限切れポリシー
パーツポリシーを指定します。 タグ パラメータを設定した場合、このパラメータは使用できません。 [有効期間 (日)]、[有効期限]、または 有効になっていません を選択できます。 有効になっていません を選択すると、パーツポリシーは設定されません。
重要ライフサイクルルールには、オブジェクトの有効期限ポリシーとパーツの有効期限ポリシーの少なくとも 1 つが含まれている必要があります。
フラグメントに対するルール
パーツの有効期限を指定します。 有効期間または有効期限を指定できます。 期限切れのパーツは自動的に削除され、復元できません。
バージョン管理されたバケット
基本設定 セクションと フラグメントに対するポリシー セクションのパラメータは、バージョン管理されていないバケットのパラメータを設定するのと同じ方法で設定します。 次の表では、バージョン管理されていないバケットに設定するパラメータと異なるパラメータのみについて説明します。
セクション
パラメータ
説明
現在のバージョンのポリシー
[削除マーカーの削除]
バケットがバージョン管理されている場合、[オブジェクトのライフサイクル] パラメータに [削除マーカーの削除] オプションが追加されます。 その他のパラメータは、バージョン管理されていないバケットに設定できるパラメータと同じです。
[削除マーカーの削除] を選択し、オブジェクトにバージョンが 1 つだけで、それが削除マーカーである場合、OSS は削除マーカーが期限切れと見なし、削除マーカーを削除します。 オブジェクトに複数のバージョンがあり、オブジェクトの現在のバージョンが削除マーカーである場合、OSS は削除マーカーを保持します。 削除マーカーの詳細については、「削除マーカー」をご参照ください。
重要一致するオブジェクトに以前のバージョンがある場合、ライフサイクルルールはオブジェクトの削除マーカーを削除しません。 不要になった以前のオブジェクトバージョンと削除マーカーを削除して、多数の削除マーカーによるリストパフォーマンスの低下を防ぐことをお勧めします。
以前のバージョンに対するポリシー
オブジェクトのライフサイクル
以前のバージョンの有効期限を指定します。 [有効期間 (日)] または 有効になっていません を選択できます。 有効になっていません を選択すると、オブジェクトポリシーは設定されません。
ライフサイクルベースのルール
オブジェクトが以前のバージョンになってから保持できる日数を指定します。 有効期限が切れると、翌日、指定された操作が以前のバージョンに対して実行されます。 たとえば、[有効期間 (日)] パラメータを 30 に設定すると、2023 年 9 月 1 日に以前のバージョンになったオブジェクトは、2023 年 10 月 1 日に指定されたストレージクラスに移動されるか、削除されます。
重要オブジェクトが以前のバージョンになった日時刻は、後のバージョンが生成された日時刻に基づいて判断できます。
OK をクリックします。
ライフサイクルルールが作成されると、ライフサイクルルールリストにルールが表示されます。
OSS SDK を使用する
次のサンプルコードは、一般的なプログラミング言語の OSS SDK を使用してライフサイクルルールを設定する方法の例を示しています。 他のプログラミング言語の OSS SDK を使用してライフサイクルルールを設定する方法の詳細については、「概要」をご参照ください。
Java
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
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 {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されています。 実際のエンドポイントを指定してください。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケット名を指定します。 例: examplebucket。
String bucketName = "examplebucket";
// バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// SetBucketLifecycleRequest を作成します。
SetBucketLifecycleRequest request = new SetBucketLifecycleRequest(bucketName);
// ルール ID を設定します。
String ruleId0 = "rule0";
// ルールが一致するプレフィックスを設定します。
String matchPrefix0 = "A0/";
// ルールが一致するタグを設定します。
Map<String, String> matchTags0 = new HashMap<String, String>();
// 一致させるタグのキー (例: owner) と値 (例: 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/";
// 最終更新日時刻から 3 日後にオブジェクトを期限切れにします。
LifecycleRule rule = new LifecycleRule(ruleId0, matchPrefix0, LifecycleRule.RuleStatus.Enabled, 3);
rule.setTags(matchTags0);
request.AddLifecycleRule(rule);
// 指定された日付より前に作成されたオブジェクトを期限切れにします。
rule = new LifecycleRule(ruleId1, matchPrefix1, LifecycleRule.RuleStatus.Enabled);
rule.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
rule.setTags(matchTags1);
request.AddLifecycleRule(rule);
// 作成から 3 日後にパーツを期限切れにします。
rule = new LifecycleRule(ruleId2, matchPrefix2, LifecycleRule.RuleStatus.Enabled);
LifecycleRule.AbortMultipartUpload abortMultipartUpload = new LifecycleRule.AbortMultipartUpload();
abortMultipartUpload.setExpirationDays(3);
rule.setAbortMultipartUpload(abortMultipartUpload);
request.AddLifecycleRule(rule);
// 指定された日付より前に作成されたパーツを期限切れにします。
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);
// 最終更新日時刻から 10 日後にオブジェクトのストレージクラスを低頻度アクセス (IA) に変換し、最終更新日時刻から 30 日後にアーカイブストレージに変換します。
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);
// 2022 年 10 月 12 日より前に最後に変更されたオブジェクトのストレージクラスをアーカイブストレージに変換します。
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);
// rule6 は、バージョン管理が有効になっているバケットに適用されます。
rule = new LifecycleRule(ruleId6, matchPrefix6, LifecycleRule.RuleStatus.Enabled);
// 最終更新日時刻から 365 日後にオブジェクトを自動的にアーカイブ済みオブジェクトに変換します。
storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
storageTransition = new LifecycleRule.StorageTransition();
storageTransition.setStorageClass(StorageClass.Archive);
storageTransition.setExpirationDays(365);
storageTransitions.add(storageTransition);
rule.setStorageTransition(storageTransitions);
// 期限切れの削除マーカーを自動的に削除します。
rule.setExpiredDeleteMarker(true);
// オブジェクトが最後に変更されてから 10 日後に、オブジェクトの以前のバージョンのストレージクラスを低頻度アクセスに変換します。
LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition =
new LifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(10).withStrorageClass(StorageClass.IA);
// オブジェクトが最後に変更されてから 20 日後に、オブジェクトの以前のバージョンのストレージクラスをアーカイブストレージに変換します。
LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition2 =
new LifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(20).withStrorageClass(StorageClass.Archive);
// 30 日後にオブジェクトの以前のバージョンを削除します。
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);
// ライフサイクルルールを設定するリクエストを開始します。
ossClient.setBucketLifecycle(request);
// ライフサイクルルールを表示します。
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;
// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// この例では、中国 (杭州) リージョンのエンドポイントが使用されています。 実際のエンドポイントを指定してください。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// バケットの名前を指定します。
$bucket= "examplebucket";
// ルール 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 {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$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({
// バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
region: 'yourregion',
// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// バケットの名前を指定します。
bucket: 'yourbucketname'
});
async function getBucketLifecycle () {
try {
const result = await client.getBucketLifecycle('Yourbucketname');
console.log(result.rules); // ライフサイクルルールを照会します。
rules.forEach(rule => {
console.log(rule.id) // ルール ID を照会します。
console.log(rule.status) // ルールのステータスを照会します。
console.log(rule.tags) // ライフサイクルルールで設定されたタグを照会します。
console.log(rule.expiration.days) // 有効期間の設定を照会します。
console.log(rule.expiration.createdBeforeDate) // 有効期限の設定を照会します。
// 期限切れのパーツのルールを照会します。
console.log(rule.abortMultipartUpload.days || rule.abortMultipartUpload.createdBeforeDate)
// ストレージクラス変換のルールを照会します。
console.log(rule.transition.days || rule.transition.createdBeforeDate) // 変換日時の設定を照会します。
console.log(rule.transition.storageClass) // ストレージクラスの変換に使用される設定を照会します。
// 期限切れの削除マーカーが自動的に削除されるかどうかを確認するためのライフサイクルルールを照会します。
console.log(rule.transition.expiredObjectDeleteMarker)
// オブジェクトの以前のバージョンのストレージクラスの変換に使用される設定を照会します。
console.log(rule.noncurrentVersionTransition.noncurrentDays) // 以前のバージョンのオブジェクトの変換日時の設定を照会します。
console.log(rule.noncurrentVersionTransition.storageClass) // オブジェクトの以前のバージョンのストレージクラスの変換に使用される設定を照会します。
})
} 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)
# 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントにマップするリージョンの ID を指定します。 例: cn-hangzhou。 このパラメータは、署名アルゴリズム V4 を使用する場合に必須です。
region = "cn-hangzhou"
# バケットの名前を指定します。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# 最終更新日時刻から 3 日後にオブジェクトが期限切れになるように指定します。
rule1 = LifecycleRule('rule1', 'tests/',
status=LifecycleRule.ENABLED,
expiration=LifecycleExpiration(days=3))
# 指定された日付より前に作成されたオブジェクトが期限切れになるように指定します。
rule2 = LifecycleRule('rule2', 'tests2/',
status=LifecycleRule.ENABLED,
expiration = LifecycleExpiration(created_before_date=datetime.date(2023, 12, 12)))
# 最終更新日時刻から 3 日後にパーツが期限切れになるように指定します。
rule3 = LifecycleRule('rule3', 'tests3/',
status=LifecycleRule.ENABLED,
abort_multipart_upload=AbortMultipartUpload(days=3))
# 指定された日付より前に作成されたパーツが期限切れになるように指定します。
rule4 = LifecycleRule('rule4', 'tests4/',
status=LifecycleRule.ENABLED,
abort_multipart_upload = AbortMultipartUpload(created_before_date=datetime.date(2022, 12, 12)))
# オブジェクトのストレージクラスが、最終更新日時刻から 20 日後に低頻度アクセス (IA) に変更され、最終更新日時刻から 30 日後にアーカイブに変更されるように指定します。
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)])
# ライフサイクルルールに一致させるタグを指定します。
tagging_rule = TaggingRule()
tagging_rule.add('key1', 'value1')
tagging_rule.add('key2', 'value2')
tagging = Tagging(tagging_rule)
# 最終更新日時刻から 365 日後にオブジェクトのストレージクラスがアーカイブに変更されるように指定します。
# 前述のルールと比較して、rule6 にはオブジェクトに一致するタグ条件が含まれています。 ルールは、タグ設定が key1=value1 および 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 は、バージョン管理が有効になっているバケットに適用されるライフサイクルルールです。
# 最終更新日時刻から 365 日後にオブジェクトのストレージクラスがアーカイブに変更されるように指定します。
# 削除マーカーが期限切れになると自動的に削除されるように指定します。
# オブジェクトが以前のバージョンになってから 12 日後に、オブジェクトのストレージクラスが IA に変更されるように指定します。
# オブジェクトが以前のバージョンになってから 20 日後に、オブジェクトのストレージクラスがアーカイブに変更されるように指定します。
# オブジェクトが以前のバージョンになってから 30 日後にオブジェクトが削除されるように指定します。
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#
using Aliyun.OSS;
using Aliyun.OSS.Common;
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケット名を指定します。 例: examplebucket。
var bucketName = "examplebucket";
// バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";
// ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトパラメータを変更します。
var conf = new ClientConfiguration();
// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;
// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
var setBucketLifecycleRequest = new SetBucketLifecycleRequest(bucketName);
// 最初のライフサイクルルールを作成します。
LifecycleRule lcr1 = new LifecycleRule()
{
ID = "delete obsoleted files",
Prefix = "obsoleted/",
Status = RuleStatus.Enabled,
ExpriationDays = 3,
Tags = new Tag[1]
};
// ルールのタグを指定します。
var tag1 = new Tag
{
Key = "project",
Value = "projectone"
};
lcr1.Tags[0] = tag1;
// 2 番目のライフサイクルルールを作成します。
LifecycleRule lcr2 = new LifecycleRule()
{
ID = "delete temporary files",
Prefix = "temporary/",
Status = RuleStatus.Enabled,
ExpriationDays = 20,
Tags = new Tag[1]
};
// ルールのタグを指定します。
var tag2 = new Tag
{
Key = "user",
Value = "jsmith"
};
lcr2.Tags[0] = tag2;
// 最終更新日時刻から 30 日後にパーツが期限切れになるように指定します。
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]
{
// 最終更新日時刻から 90 日後に、オブジェクトの以前のバージョンのストレージクラスが IA に変換されるように指定します。
new LifecycleRule.LifeCycleNoncurrentVersionTransition(){
StorageClass = StorageClass.IA,
NoncurrentDays = 90
},
// 最終更新日時刻から 180 日後に、オブジェクトの以前のバージョンのストレージクラスがアーカイブに変換されるように指定します。
new LifecycleRule.LifeCycleNoncurrentVersionTransition(){
StorageClass = StorageClass.Archive,
NoncurrentDays = 180
}
};
setBucketLifecycleRequest.AddLifecycleRule(lcr1);
setBucketLifecycleRequest.AddLifecycleRule(lcr2);
setBucketLifecycleRequest.AddLifecycleRule(lcr3);
// ライフサイクルルールを設定します。
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();
// ルール ID と、ルールに一致するオブジェクトの名前に含まれるプレフィックスを指定します。
rule1.setIdentifier("1");
rule1.setPrefix("A");
// ライフサイクルルールを実行するかどうかを指定します。 このパラメータを true に設定すると、OSS はこのルールを定期的に実行します。 このパラメータを false に設定すると、OSS はこのルールを無視します。
rule1.setStatus(true);
// 最終更新日時刻から 200 日後にオブジェクトが期限切れになるように指定します。
rule1.setDays("200");
// 最終更新日時刻から 30 日後にオブジェクトのストレージクラスがアーカイブに変換されるように指定します。
rule1.setArchiveDays("30");
// アップロードに失敗してから 3 日後にパーツが期限切れになるように指定します。
rule1.setMultipartDays("3");
// 最終更新日時刻から 15 日後にオブジェクトのストレージクラスが低頻度アクセス (IA) に変換されるように指定します。
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"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// OSSClient インスタンスを作成します。
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 実際のエンドポイントを指定してください。
// バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 実際のリージョンを指定してください。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名アルゴリズムのバージョンを指定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// バケットの名前を指定します。
bucketName := "examplebucket"
// ライフサイクルルールを設定し、ID を rule1 に設定します。 バケット内の foo プレフィックスを含む名前のオブジェクトが、オブジェクトの最終更新日時刻から 3 日後に期限切れになるように指定します。
rule1 := oss.BuildLifecycleRuleByDays("rule1", "foo/", true, 3)
// バージョン管理が有効になっているバケット内のオブジェクトが削除マーカーであり、他のバージョンがない場合、削除マーカーは削除されます。
deleteMark := true
expiration := oss.LifecycleExpiration{
ExpiredObjectDeleteMarker: &deleteMark,
}
// 最終更新日時刻から 30 日後にオブジェクトの以前のバージョンが削除されるように指定します。
versionExpiration := oss.LifecycleVersionExpiration{
NoncurrentDays: 30,
}
// オブジェクトの最終更新日時刻から 10 日後に、オブジェクトの以前のバージョンのストレージクラスが低頻度アクセス (IA) に変換されるように指定します。
versionTransition := oss.LifecycleVersionTransition{
NoncurrentDays: 10,
StorageClass: "IA",
}
// ライフサイクルルールを設定し、ID を rule2 に設定します。
rule2 := oss.LifecycleRule{
ID: "rule2",
Prefix: "yourObjectPrefix",
Status: "Enabled",
Expiration: &expiration,
NonVersionExpiration: &versionExpiration,
NonVersionTransitions: []oss.LifecycleVersionTransition{
versionTransition,
},
}
// ライフサイクルルールを設定し、ID を rule3 に設定します。 このルールは、キーが tag1、値が value1 のタグを持つオブジェクトに対して有効です。 これらのオブジェクトは、オブジェクトの最終更新日時刻から 3 日後に期限切れになります。
rule3 := oss.LifecycleRule{
ID: "rule3",
Prefix: "",
Status: "Enabled",
Tags: []oss.Tag{
oss.Tag{
Key: "tag1",
Value: "value1",
},
},
Expiration: &oss.LifecycleExpiration{Days: 3},
}
// ライフサイクルルールを設定します。
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)
{
/* OSS へのアクセスに使用するアカウントに関する情報を初期化します。 */
/* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
std::string Endpoint = "yourEndpoint";
/* バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 */
std::string Region = "yourRegion";
/* バケットの名前を指定します。 例: examplebucket。 */
std::string BucketName = "examplebucket";
/* ネットワークリソースなどのリソースを初期化します。 */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
SetBucketLifecycleRequest request(BucketName);
std::string date("2022-10-12T00:00:00.000Z");
/* ルールに一致させるオブジェクトのタグを指定します。 */
Tagging tagging;
tagging.addTag(Tag("key1", "value1"));
tagging.addTag(Tag("key2", "value2"));
/* ライフサイクルルールを指定します。 */
auto rule1 = LifecycleRule();
rule1.setID("rule1");
rule1.setPrefix("test1/");
rule1.setStatus(RuleStatus::Enabled);
rule1.setExpiration(3);
rule1.setTags(tagging.Tags());
/* 有効期限を指定します。 */
auto rule2 = LifecycleRule();
rule2.setID("rule2");
rule2.setPrefix("test2/");
rule2.setStatus(RuleStatus::Disabled);
rule2.setExpiration(date);
/* バケットのバージョン管理が有効になっている場合、rule3 がバケットに対して有効になるように指定します。 */
auto rule3 = LifecycleRule();
rule3.setID("rule3");
rule3.setPrefix("test3/");
rule3.setStatus(RuleStatus::Disabled);
/* 最終更新日時刻から 365 日後にオブジェクトのストレージクラスがアーカイブに変更されるように指定します。 */
auto transition = LifeCycleTransition();
transition.Expiration().setDays(365);
transition.setStorageClass(StorageClass::Archive);
rule3.addTransition(transition);
/* 期限切れの削除マーカーが自動的に削除されるように指定します。 */
rule3.setExpiredObjectDeleteMarker(true);
/* 最終更新日時刻から 10 日後に、オブジェクトの以前のバージョンのストレージクラスが IA に変更されるように指定します。 */
auto transition1 = LifeCycleTransition();
transition1.Expiration().setDays(10);
transition1.setStorageClass(StorageClass::IA);
/* 最終更新日時刻から 20 日後に、オブジェクトの以前のバージョンのストレージクラスがアーカイブに変更されるように指定します。 */
auto transition2 = LifeCycleTransition();
transition2.Expiration().setDays(20);
transition2.setStorageClass(StorageClass::Archive);
/* バージョンが更新されてから 30 日後に以前のバージョンが削除されるように指定します。 */
auto expiration = LifeCycleExpiration(30);
rule3.setNoncurrentVersionExpiration(expiration);
LifeCycleTransitionList noncurrentVersionStorageTransitions{transition1, transition2};
rule3.setNoncurrentVersionTransitionList(noncurrentVersionStorageTransitions);
/* ライフサイクルルールを設定します。 */
LifecycleRuleList list{rule1, rule2, rule3};
request.setLifecycleRules(list);
auto outcome = client.SetBucketLifecycle(request);
if (!outcome.isSuccess()) {
/* 例外を処理します。 */
std::cout << "SetBucketLifecycle fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* ネットワークリソースなどのリソースを解放します。 */
ShutdownSdk();
return 0;
}C
#include "oss_api.h"
#include "aos_http_io.h"
/* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
const char *endpoint = "yourEndpoint";
/* バケットの名前を指定します。 例: examplebucket。 */
const char *bucket_name = "examplebucket";
/* バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* char* 文字列を使用して aos_string_t を初期化します。 */
aos_str_set(&options->config->endpoint, endpoint);
/* 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
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"));
// 2 つの追加パラメータを指定します。
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* CNAME を使用して OSS にアクセスするかどうかを指定します。 値 0 は、CNAME が使用されていないことを示します。 */
options->config->is_cname = 0;
/* タイムアウト期間などのネットワークパラメータを指定します。 */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* main() で aos_http_io_initialize メソッドを呼び出して、ネットワークリソースやメモリリソースなどのグローバルリソースを初期化します。 */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* メモリを管理するためのメモリプールを作成します。 aos_pool_t は apr_pool_t と同等です。 メモリプールを作成するために使用されるコードは、APR ライブラリに含まれています。 */
aos_pool_t *pool;
/* メモリプールを作成します。 2 番目のパラメータの値は NULL です。 この値は、プールが他のメモリプールを継承しないことを示します。 */
aos_pool_create(&pool, NULL);
/* オプションを作成して初期化します。 このパラメータには、endpoint、access_key_id、access_key_secret、is_cname、curl などのグローバル設定情報が含まれています。 */
oss_request_options_t *oss_client_options;
/* メモリプール内のメモリリソースをオプションに割り当てます。 */
oss_client_options = oss_request_options_create(pool);
/* oss_client_options を初期化します。 */
init_options(oss_client_options);
/* パラメータを初期化します。 */
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);
/* 有効期間を指定します。 */
oss_lifecycle_rule_content_t *rule_content_days = oss_create_lifecycle_rule_content(pool);
aos_str_set(&rule_content_days->id, "rule-1");
/* ルールに一致させるオブジェクトの名前に含まれるプレフィックスを指定します。 */
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);
/* 有効期限を指定します。 */
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");
/* 有効期限は 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);
/* ライフサイクルルールを設定します。 */
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);
}
/* メモリプールを解放して、リクエストに割り当てられたメモリリソースを解放します。 */
aos_pool_destroy(pool);
/* 割り当てられたグローバルリソースを解放します。 */
aos_http_io_deinitialize();
return 0;
}Ruby
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
// この例では、中国 (杭州) リージョンのエンドポイントが使用されています。 実際のエンドポイントを指定してください。
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
// バケット名を指定します。
bucket = client.get_bucket('examplebucket')
// ライフサイクルルールを設定します。
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 を使用してライフサイクルルールを設定できます。 詳細については、「put-bucket-lifecycle」をご参照ください。
RESTful API を使用する
ビジネスで高度なカスタマイズが必要な場合は、RESTful API を直接呼び出すことができます。 API を直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketLifecycle」をご参照ください。
CopyObject を呼び出してオブジェクトのストレージクラスを手動で変換する
CopyObject オペレーションを呼び出して、オブジェクトを上書きすることで、オブジェクトのストレージクラスを変換できます。
オブジェクトのストレージクラスを IA、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換する場合、IA オブジェクトのオブジェクトサイズとストレージ期間に基づいてストレージ料金が課金されるか、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブオブジェクトのオブジェクトサイズとストレージ期間に基づいてストレージ料金とデータ取得料金が課金されます。 詳細については、「使用上の注意」セクションをご参照ください。
アーカイブ、コールドアーカイブ、またはディープコールドアーカイブオブジェクトのストレージクラスを変換するには、最初にオブジェクトをリストアする必要があります。 オブジェクトをリストアする方法の詳細については、「オブジェクトのリストア」をご参照ください。 バケットに対してアーカイブオブジェクトのリアルタイムアクセスが有効になっている場合、バケット内のアーカイブオブジェクトをリストアせずに、そのストレージクラスを直接変換できます。 アクセスされたアーカイブデータのサイズに基づいて、アーカイブデータ取得料金が課金されます。 詳細については、「アーカイブオブジェクトのリアルタイムアクセス」をご参照ください。
バージョン管理が有効になっているバケット内のオブジェクトのストレージクラスを変換するために CopyObject オペレーションを呼び出すと、OSS はデスティネーションオブジェクトに一意のバージョン ID を自動的に生成します。 バージョン ID は、
x-oss-version-idレスポンスヘッダーで返されます。バケットのバージョン管理が無効になっているか、一時停止されている場合、OSS は ID が null のバージョンをデスティネーションオブジェクトに生成し、ID が null の既存のバージョンを上書きします。 上書きされたバージョンのストレージクラスが IA、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブの場合、最小ストレージ期間よりも短い期間格納されているバージョンのストレージ使用量に対して課金される場合があります。 詳細については、「最小ストレージ期間よりも短い期間格納されているオブジェクトの料金はどのように課金されますか?」をご参照ください。
CopyObject を呼び出すことによるストレージクラス変換のルール
LRS
LRS オブジェクトは、標準 LRS、IA LRS、アーカイブ LRS、コールドアーカイブ LRS、ディープコールドアーカイブ LRS の 2 つのストレージクラス間で変換できます。
ZRS
ストレージクラス間の変換では、標準 ZRS、IA ZRS、およびアーカイブ ZRS がサポートされています。
アーカイブ LRS オブジェクトを標準 ZRS または IA ZRS オブジェクトに変換する場合、オブジェクトが存在するバケットの設定に基づいて操作を行う必要があります。
バケットに対して アーカイブオブジェクトのリアルタイムアクセス が有効になっている場合、アーカイブオブジェクトのストレージクラスはリストアせずに変換できます。
有効になっていない場合は、アーカイブオブジェクトのストレージクラスを変換する前に、オブジェクトのリストア を行ってください。
オブジェクトのストレージクラスを手動で変換する方法
OSS コンソールを使用する
OSS コンソールでオブジェクトのストレージクラスを変換する場合、オブジェクトのサイズは 1 GB を超えることはできません。 サイズが 1 GB を超えるオブジェクトのストレージクラスを変換するには、OSS SDK または ossutil を使用することをお勧めします。
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、バケット をクリックします。 [バケット] ページで、ストレージクラスを変換するオブジェクトが格納されているバケットをクリックします。
左側のナビゲーションツリーで、オブジェクト管理 > オブジェクト を選択します。
オブジェクト ページで、ストレージクラスを変換するオブジェクトを見つけて、
> ストレージタイプの変更 を選択します。オブジェクトのストレージクラスを変換した後もオブジェクトのユーザーメタデータを保持するには、ユーザーメタデータの保持 をオンにしておくことをお勧めします。
オブジェクトを変換する先のストレージクラスを選択し、OK をクリックします。
OSS SDK を使用する
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
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 {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されています。 実際のエンドポイントを指定してください。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// この例では、バケットと標準または IA オブジェクトを事前に作成しておく必要があります。
// バケット名を指定します。 例: examplebucket。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。 完全なパスにバケット名を含めないでください。 例: exampleobject.txt。
String objectName = "exampleobject.txt";
// バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// CopyObjectRequest オブジェクトを作成します。
CopyObjectRequest request = new CopyObjectRequest(bucketName, objectName, bucketName, objectName) ;
// ObjectMetadata オブジェクトを作成します。
ObjectMetadata objectMetadata = new ObjectMetadata();
// オブジェクトのストレージクラスをアーカイブに変換します。
objectMetadata.setHeader("x-oss-storage-class", StorageClass.Archive);
// オブジェクトのストレージクラスをコールドアーカイブに変換します。
// objectMetadata.setHeader("x-oss-storage-class", StorageClass.ColdArchive);
// オブジェクトのストレージクラスをディープコールドアーカイブに変換します。
// objectMetadata.setHeader("x-oss-storage-class", StorageClass.DeepColdArchive);
request.setNewObjectMetadata(objectMetadata);
// オブジェクトのストレージクラスを変更します。
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;
// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// この例では、中国 (杭州) リージョンのエンドポイントが使用されています。 実際のエンドポイントを指定してください。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// バケットの名前を指定します。
$bucket= "<yourBucketName>";
// オブジェクトの完全なパスを指定します。 完全なパスにバケット名を含めないでください。 例: destfolder/exampleobject.txt。
$object = "<yourObjectName>";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
try {
// オブジェクトを変換する先のストレージクラスを指定します。 この例では、ストレージクラスをアーカイブに設定します。
$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({
// バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
region: 'yourregion',
// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET を設定していることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID, accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// バケットの名前を指定します。
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
# 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントにマップするリージョンの ID を指定します。 例: cn-hangzhou。 このパラメータは、署名アルゴリズム V4 を使用する場合に必須です。
region = "cn-hangzhou"
# バケットの名前を指定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# オブジェクトの完全なパスを指定します。 完全なパスにバケット名を含めないでください。 例: exampledir/exampleobject.txt。
# オブジェクトのストレージクラスが標準または IA であることを確認してください。
object_name = 'exampledir/exampleobject.txt'
# x-oss-storage-class ヘッダーを oss2.BUCKET_STORAGE_CLASS_ARCHIVE に設定することにより、オブジェクトのストレージクラスをアーカイブに変換します。
headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_ARCHIVE}
# x-oss-storage-class ヘッダーを oss2.BUCKET_STORAGE_CLASS_COLD_ARCHIVE に設定することにより、オブジェクトのストレージクラスをコールドアーカイブに変換します。
# headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_COLD_ARCHIVE}
# x-oss-storage-class ヘッダーを BUCKET_STORAGE_CLASS_DEEP_COLD_ARCHIVE に設定することにより、オブジェクトのストレージクラスをディープコールドアーカイブに変換します。
# headers = {'x-oss-storage-class': oss2.models.BUCKET_STORAGE_CLASS_DEEP_COLD_ARCHIVE}
# オブジェクトのストレージクラスを変換します。
bucket.copy_object(bucket.bucket_name, object_name, object_name, headers) package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// OSSClient インスタンスを作成します。
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 実際のエンドポイントを指定してください。
// バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを指定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// バケットの名前を指定します。
bucketName := "yourBucketName" // yourBucketName を実際のバケット名に置き換えます。
// オブジェクトの完全なパスを指定します。 完全なパスにバケット名を含めないでください。
objectName := "yourObjectName" // yourObjectName を実際のオブジェクトパスに置き換えます。
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// オブジェクトのストレージクラスをアーカイブに変換します。
_, err = bucket.CopyObject(objectName, objectName, oss.ObjectStorageClass(oss.StorageArchive))
if err != nil {
log.Fatalf("Failed to change storage class of object: %v", err)
}
log.Println("Storage class changed successfully.")
}
OSSCopyObjectRequest * copy = [OSSCopyObjectRequest new];
copy.sourceBucketName = @"examplebucket";
copy.sourceObjectKey = @"exampleobject.txt";
copy.bucketName = @"examplebucket";
copy.objectKey = @"exampleobject.txt";
// exampleobject.txt オブジェクトのストレージクラスをアーカイブに設定します。
copy.objectMeta = @{@"x-oss-storage-class" : @"Archive"};
OSSTask * task = [client copyObject:copy];
[task continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"copy object success!");
} else {
NSLog(@"copy object failed, error: %@" , task.error);
}
return nil;
}];
// タスクが完了するまで同期ブロッキングを実装します。
// [task waitUntilFinished]; #include <iostream>
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
std::string Endpoint = "yourEndpoint";
/* バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 */
std::string Region = "yourRegion";
/* バケットの名前を指定します。 例: examplebucket。 */
std::string BucketName = "examplebucket";
/* オブジェクトの完全なパスを指定します。 完全なパスにバケット名を含めないでください。 例: exampledir/exampleobject.txt。 */
std::string ObjectName = "exampledir/exampleobject.txt";
/* ネットワークリソースなどのリソースを初期化します。 */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* オブジェクトを変換する先のストレージクラスを指定します。 この例では、ストレージクラスはアーカイブに設定されています。 */
ObjectMetaData objectMeta;
objectMeta.addHeader("x-oss-storage-class", "Archive");
std::string SourceBucketName = BucketName;
std::string SourceObjectName = ObjectName;
CopyObjectRequest request(SourceBucketName, ObjectName, objectMeta);
request.setCopySource(SourceBucketName, SourceObjectName);
/* オブジェクトのストレージクラスを指定されたストレージクラスに変換します。 */
auto outcome = client.CopyObject(request);
if (!outcome.isSuccess()) {
/* 例外を処理します。 */
std::cout << "CopyObject fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* ネットワークリソースなどのリソースを解放します。 */
ShutdownSdk();
return 0;
}
ossutil を使用する
ossutil を使用してオブジェクトのストレージクラスを変換する方法の詳細については、「copy-object」をご参照ください。
RESTful API を使用する
ビジネスで高度なカスタマイズが必要な場合は、RESTful API を直接呼び出すことができます。 API を直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「CopyObject」をご参照ください。
使用上の注意
オブジェクトのストレージクラスを IA、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換する場合は、次の点に注意してください。
最小課金サイズ
オブジェクトの最小課金サイズは 64 KB です。 オブジェクトのサイズが 64 KB 未満の場合、オブジェクトの最小課金サイズに対して課金されます。
最小ストレージ期間
最小ストレージ期間は、IA オブジェクトの場合は 30 日、アーカイブオブジェクトの場合は 60 日、コールドアーカイブオブジェクトとディープコールドアーカイブオブジェクトの場合は 180 日です。 オブジェクトが最小ストレージ期間よりも短い期間格納されている場合、最小ストレージ期間よりも短い期間格納されているオブジェクトのストレージ使用量に対して課金されます。 詳細については、「ストレージ料金」をご参照ください。
ライフサイクルルールを設定してオブジェクトのストレージクラスを自動的に変換する
オブジェクトのストレージクラスを IA またはアーカイブに変換する場合、OSS は保存期間を再計算しません。
たとえば、a.txt という名前のオブジェクトは標準オブジェクトです。 オブジェクトが OSS に 10 日間格納された後、ライフサイクルルールに基づいてそのストレージクラスが IA に変換されます。 ストレージクラスの変換後、IA ストレージクラスの最小ストレージ期間要件を満たすには、オブジェクトをさらに 20 日間 IA オブジェクトとして格納する必要があります。
オブジェクトのストレージクラスをコールドアーカイブまたはディープコールドアーカイブに変換する場合、OSS は保存期間を再計算します。
例 1: a.txt という名前のオブジェクトは、標準または IA オブジェクトです。 オブジェクトが OSS に 10 日間格納された後、ライフサイクルルールに基づいてそのストレージクラスがコールドアーカイブまたはディープコールドアーカイブに変換されます。 ストレージクラスの変換後、コールドアーカイブまたはディープコールドアーカイブストレージクラスの最小ストレージ期間要件を満たすには、オブジェクトを 180 日間格納する必要があります。
例 2: a.txt という名前のオブジェクトはコールドアーカイブオブジェクトです。 オブジェクトが OSS に 30 日間格納された後、ライフサイクルルールに基づいてそのストレージクラスがディープコールドアーカイブに変換されます。 30 日間格納されたコールドアーカイブオブジェクトのストレージ使用量と、最小ストレージ期間 (180 - 30) よりも短い期間格納されたコールドアーカイブオブジェクトのストレージ使用量に対して課金されます。 オブジェクトがディープコールドアーカイブオブジェクトに変換された後、ディープコールドアーカイブストレージクラスの最小ストレージ期間要件を満たすには、オブジェクトを 180 日間格納する必要があります。
CopyObject を呼び出してオブジェクトのストレージクラスを手動で変換する
CopyObject オペレーションを呼び出してオブジェクトのストレージクラスを手動で変換する場合、OSS はオブジェクトのストレージ期間を再計算します。
たとえば、a.txt という名前のオブジェクトは標準オブジェクトです。 オブジェクトが OSS に 10 日間格納された後、CopyObject オペレーションを呼び出すことでそのストレージクラスが IA に変換されます。 ストレージクラスの変換後、IA ストレージクラスの最小ストレージ期間要件を満たすには、オブジェクトを 30 日間 IA オブジェクトとして格納する必要があります。
最小ストレージ期間が経過する前に IA オブジェクト、アーカイブオブジェクト、コールドアーカイブオブジェクト、またはディープコールドアーカイブオブジェクトの名前を変更したり、同じ名前のオブジェクトをアップロードしてオブジェクトを上書きしたりすると、最小ストレージ期間よりも短い期間格納されているオブジェクトのストレージ使用量に対しても課金されます。 たとえば、IA オブジェクトが 29 日間格納された後に名前を変更すると、OSS はオブジェクトの最終更新日時刻を再計算します。 つまり、IA ストレージクラスの最小ストレージ期間要件を満たすには、オブジェクトをさらに 30 日間格納する必要があります。
リストア時間
アーカイブ、コールドアーカイブ、およびディープコールドアーカイブオブジェクトは、アクセスする前にリストアする必要があります。 アーカイブ、コールドアーカイブ、またはディープコールドアーカイブオブジェクトをリストアするには、ある程度の時間がかかります。 ビジネスシナリオでオブジェクトへのリアルタイムアクセスが必要な場合は、オブジェクトのストレージクラスをアーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換しないことをお勧めします。
API オペレーション呼び出し料金
変換方法 | 変換前のストレージクラス | API オペレーション呼び出し料金 |
ライフサイクルルール | 標準、IA、アーカイブ、コールドアーカイブ | 変換前のストレージクラスに基づいて PUT リクエストに対して課金されます。 API オペレーション呼び出し料金は、現在のバケットの請求に含まれています。 |
CopyObject | アーカイブ |
|
標準、IA、コールドアーカイブ、ディープコールドアーカイブ | ソースオブジェクトのストレージクラスに基づいて PUT リクエストに対して課金されます。 API オペレーション呼び出し料金は、デスティネーションバケットの請求に含まれています。 |
① アーカイブオブジェクトのリアルタイムアクセスが有効になっているバケット内のアーカイブオブジェクトを変換するために CopyObject オペレーションを呼び出す場合、オブジェクトを事前にリストアする必要はなく、リストアに対して課金されません。 アクセスされたアーカイブデータのサイズに基づいて、アーカイブデータ取得料金が課金されます。
② アーカイブオブジェクトのリアルタイムアクセスが有効になっていないバケット内のアーカイブオブジェクトを変換するために CopyObject オペレーションを呼び出す場合、オブジェクトを最初にリストアする必要があり、リストアに対して課金されます。
詳細については、「データ処理料金」をご参照ください。
データ取得料金
取得した IA データのサイズに基づいて、IA オブジェクトにアクセスしたときにデータ取得料金が課金されます。 アーカイブ、コールドアーカイブ、およびディープコールドアーカイブオブジェクトをリストアすると、追加料金が課金されます。 バケットに対してアーカイブオブジェクトのリアルタイムアクセスが有効になっている場合、アーカイブオブジェクトにリアルタイムでアクセスしたときに課金されます。 データ取得料金とアウトバウンドトラフィック料金は別々に計算されます。 標準オブジェクトに月に 1 回以上アクセスする場合、オブジェクトのストレージクラスを IA、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換すると、コストが高くなる可能性があります。
一時ストレージ料金
コールドアーカイブまたはディープコールドアーカイブオブジェクトをリストアすると、アクセスを容易にするためにオブジェクトの標準レプリカが作成されます。 リストア期間が終了する前に、標準オブジェクトとしてのレプリカの期間に対して、レプリカの一時ストレージ料金が課金されます。
FAQ
最終更新日時刻に基づくライフサイクルルールを設定することで、オブジェクトのストレージクラスを IA から標準に変換できますか?
いいえ、ライフサイクルルールを使用してオブジェクトのストレージクラスを IA から標準に変換することはできません。 オブジェクトのストレージクラスを IA から標準に変換するには、次のいずれかの方法を使用できます。
CopyObject オペレーションを呼び出す
CopyObject オペレーションを呼び出して、オブジェクトのストレージクラスを IA から標準に変換できます。 詳細については、「CopyObject を呼び出してオブジェクトのストレージクラスを手動で変換する」をご参照ください。
ossutil を使用する
ossutil を使用して set-props コマンドを実行し、--storage-class オプションを指定できます。 この方法で、1 つ以上のオブジェクトのストレージクラスを IA から標準に変換できます。 詳細については、「set-props」をご参照ください。