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 オブジェクトは、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 に変換された後、アクセスされた後に自動的に標準 LRS に戻すかどうかも指定できます。
IA LRS オブジェクトは、アーカイブ LRS、コールドアーカイブ LRS、またはディープコールドアーカイブ LRS に変換できます。
アーカイブ LRS オブジェクトは、コールドアーカイブ LRS またはディープコールドアーカイブ LRS に変換できます。
コールドアーカイブ LRS オブジェクトは、ディープコールドアーカイブ LRS に変換できます。
ZRS

ゾーン冗長ストレージ内のファイルの変換ルールは次のとおりです:
標準 ZRS オブジェクトは、IA ZRS、アーカイブ ZRS、コールドアーカイブ LRS、またはディープコールドアーカイブ LRS に変換できます。
オブジェクトが標準 ZRS から IA ZRS に変換された後、アクセスされた後に自動的に標準 ZRS に戻すかどうかも指定できます。
IA ZRS オブジェクトは、アーカイブ ZRS、コールドアーカイブ LRS、またはディープコールドアーカイブ LRS に変換できます。
アーカイブ ZRS オブジェクトは、コールドアーカイブ LRS またはディープコールドアーカイブ LRS に変換できます。
コールドアーカイブ LRS オブジェクトは、ディープコールドアーカイブ LRS に変換できます。
詳細については、「最終アクセス日時にもとづくライフサイクルルール」をご参照ください。
ライフサイクルルールを使用したストレージクラスの変換方法
ライフサイクルルールを設定するには、いくつかの方法があります。ライフサイクルルールは、指定された期間後にオブジェクトを指定されたストレージクラスに移行したり、期限切れのオブジェクトやパートを削除したりできます。以下の手順では、ライフサイクルルールを使用してオブジェクトを指定されたストレージクラスに移行する方法について説明します。
OSS コンソールの使用
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、バケット をクリックします。[バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションウィンドウで、データ管理 > ライフサイクル を選択します。
任意:最終アクセス日時にもとづくライフサイクルルールを作成するには、ライフサイクル ページで [アクセス追跡の有効化] スイッチをオンにします。
ライフサイクル ページで、ルールの作成 をクリックします。
[ライフサイクルルールの作成] パネルで、次の表に従ってルールのパラメーターを設定します。
バージョン管理が無効なバケット
セクション
パラメーター
説明
基本設定
ステータス
ライフサイクルルールのステータスを指定します。[有効] または [無効] を選択できます。
ライフサイクルルールが有効になると、ライフサイクルルールに基づいてオブジェクトのストレージクラスが変換されるか、オブジェクトが削除されます。
ライフサイクルルールを無効にすると、そのライフサイクルルールのライフサイクルタスクは中断されます。
ポリシー
ライフサイクルルールを適用するオブジェクトを指定します。[指定されたプレフィックスを持つオブジェクト] または バケット全体に適用 を選択できます。
説明[指定されたプレフィックスを持つオブジェクト] を選択した場合、完全なプレフィックスを指定する必要があります。たとえば、src/dir1 プレフィックスを含むオブジェクトにライフサイクルルールを適用する場合は、src/dir1 と入力します。dir1 のみを入力した場合、ライフサイクルルールは意図した効果を発揮しません。
重複するプレフィックスを許可
プレフィックスの重複を許可するかどうかを指定します。デフォルトでは、OSS は各ライフサイクルルールのプレフィックスが重複しているかどうかをチェックします。たとえば、バケットに既存のライフサイクルルール (ルール 1) があり、重複するプレフィックスを含む別のライフサイクルルール (ルール 2) を設定する場合:
ルール 1
バケット内の dir1/ プレフィックスを含むすべてのオブジェクトを、最終更新日から 180 日後に削除します。
ルール 2
バケット内の dir1/dir2/ プレフィックスを含むすべてのオブジェクトのストレージクラスを、最終更新日から 30 日後に IA に変換し、最終更新日から 60 日後にオブジェクトを削除します。
このチェックボックスを選択しない場合、OSS は dir1/dir2/ ディレクトリ内のオブジェクトが 2 つのライフサイクルルールに一致することを検出し、ルール 2 の作成を拒否し、Overlap for same action type Expiration. エラーメッセージを返します。
このチェックボックスを選択した場合、ルール 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 つを含める必要があります。
フラグメントに対するルール
パートの有効期限を指定します。有効期間または有効期限を指定できます。期限切れのパートは自動的に削除され、復元できません。
バージョン管理が有効なバケット
基本設定 および フラグメントに対するポリシー セクションのパラメーターは、バージョン管理が無効なバケットのパラメーターと同じ方法で設定します。次の表では、バージョン管理が無効なバケットで設定するパラメーターと異なるパラメーターのみを説明します。
重要ライフサイクルルールを設定する前に、次の点に注意してください:
バケットでバージョン管理が有効になっており、クロスリージョンレプリケーション (CRR) の宛先である場合、ソースバケットからレプリケートされた削除マーカーにより、このバケット内の同じ名前のオブジェクトが以前のバージョンになります。
したがって、宛先バケットでの意図しないデータ損失を避けるために、以前のバージョンをクリーンアップするライフサイクルルールは慎重に設定してください。
セクション
パラメーター
説明
現在のバージョンのポリシー
[削除マーカーの削除]
バケットがバージョン管理されている場合、[オブジェクトのライフサイクル] パラメーターに [削除マーカーの削除] オプションが追加されます。その他のパラメーターは、バージョン管理されていないバケットで設定できるものと同じです。
[削除マーカーの削除] を選択し、オブジェクトに 1 つのバージョンしかなく、それが削除マーカーである場合、OSS はその削除マーカーを期限切れと見なし、削除マーカーを削除します。オブジェクトに複数のバージョンがあり、オブジェクトの現在のバージョンが削除マーカーである場合、OSS は削除マーカーを保持します。削除マーカーの詳細については、「削除マーカー」をご参照ください。
重要一致したオブジェクトに以前のバージョンがある場合、ライフサイクルルールはオブジェクトの削除マーカーを削除しません。多数の削除マーカーによるリスト表示パフォーマンスの低下を防ぐために、不要になった以前のオブジェクトバージョンと削除マーカーを削除することを推奨します。
以前のバージョンに対するポリシー
オブジェクトのライフサイクル
以前のバージョンが期限切れになる時期を指定します。[有効期間 (日数)] または 有効になっていません を選択できます。有効になっていません を選択した場合、オブジェクトポリシーは設定されません。
ライフサイクルベースのルール
オブジェクトが以前のバージョンになってから保持できる日数を指定します。期限切れになると、翌日に以前のバージョンに対して指定されたアクションが実行されます。たとえば、[有効期間 (日数)] パラメーターを 30 に設定した場合、2023 年 9 月 1 日に以前のバージョンになったオブジェクトは、2023 年 10 月 1 日に指定されたストレージクラスに移動されるか、削除されます。
重要オブジェクトがいつ以前のバージョンになるかは、後のバージョンが生成された時刻に基づいて判断できます。
OK をクリックします。
ライフサイクルルールが保存されると、ルールの一覧で設定されたライフサイクルルールを表示できます。
Alibaba Cloud SDK の使用
以下のコードは、一般的な SDK を使用してライフサイクルルールを設定する方法の例を示しています。他の 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 日後にオブジェクトを低頻度アクセスストレージクラスに、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); // ライフサイクルルールを照会します。
result.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"
# エンドポイントに対応するリージョン情報を指定します。例:cn-hangzhou。このパラメーターは V4 署名を使用する場合に必要です。
region = "cn-hangzhou"
# examplebucket を実際のバケット名に置き換えます。
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 インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを使用してください。
// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを 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"
// ライフサイクルルール 1 を指定します。このルールは、"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",
}
// ライフサイクルルール 2 を指定します。
rule2 := oss.LifecycleRule{
ID: "rule2",
Prefix: "yourObjectPrefix",
Status: "Enabled",
Expiration: &expiration,
NonVersionExpiration: &versionExpiration,
NonVersionTransitions: []oss.LifecycleVersionTransition{
versionTransition,
},
}
// ライフサイクルルール 3 を指定します。このルールは、タグキー "tag1" とタグ値 "value1" を持つファイルが最終更新日時から 3 日後に期限切れになることを指定します。
rule3 := oss.LifecycleRule{
ID: "rule3",
Prefix: "",
Status: "Enabled",
Tags: []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 アカウント情報を初期化します。*/
/* yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
std::string Endpoint = "yourEndpoint";
/* yourRegion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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 日後にオブジェクトの非現行バージョンを低頻度アクセスストレージクラスに移行します。*/
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"
/* yourEndpoint をバケットが配置されているリージョンのエンドポイントに置き換えます。たとえば、中国 (杭州) リージョンの場合、エンドポイントは https://oss-cn-hangzhou.aliyuncs.com です。*/
const char *endpoint = "yourEndpoint";
/* バケット名に置き換えます。例:examplebucket。*/
const char *bucket_name = "examplebucket";
/* yourRegion をバケットが配置されているリージョンの ID に置き換えます。たとえば、中国 (杭州) リージョンの場合、リージョン ID は 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[])
{
/* プログラムのエントリポイントで aos_http_io_initialize メソッドを呼び出して、ネットワークやメモリなどのグローバルリソースを初期化します。*/
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* メモリ管理用のメモリプール (pool) は 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」をご参照ください。
REST API の使用
アプリケーションに特定の要件がある場合は、REST API リクエストを直接送信できます。そのためには、署名を計算するためのコードを手動で記述する必要があります。詳細については、「PutBucketLifecycle」をご参照ください。
CopyObject 操作を使用したオブジェクトストレージクラスの手動変換
CopyObject 操作を呼び出して、オブジェクトを上書きすることでオブジェクトのストレージクラスを変換できます。
オブジェクトのストレージクラスを IA、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換する場合、最小課金サイズ 64 KB、最短ストレージ期間、およびデータ取得料金が適用される場合があります。詳細については、「注意事項」をご参照ください。
アーカイブ、コールドアーカイブ、およびディープコールドアーカイブオブジェクトは、ストレージクラスを変更する前に復元する必要があります。オブジェクトの復元方法の詳細については、「オブジェクトの復元」をご参照ください。アーカイブオブジェクトのリアルタイムアクセスが有効になっている場合、復元せずにアーカイブオブジェクトのストレージクラスを変更できます。直接読み取りには、リアルタイムアクセスのデータ取得料金が発生します。詳細については、「アーカイブオブジェクトのリアルタイムアクセス」をご参照ください。
バージョン管理が有効になっているバケットで、CopyObject 操作を呼び出してオブジェクトのストレージクラスを変換すると、OSS は新しいオブジェクトバージョンの一意のバージョン ID を自動的に生成します。このバージョン ID は、
x-oss-version-id応答ヘッダーで返されます。バージョン管理が無効または一時停止されているバケットで、CopyObject 操作を呼び出してオブジェクトのストレージクラスを変換すると、OSS は新しいオブジェクトの null バージョン ID を持つバージョンを自動的に生成し、既存の null バージョン ID を持つバージョンを上書きします。上書きされたオブジェクトが IA、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブストレージクラスの場合、最短ストレージ期間未満のオブジェクトのストレージ料金が請求される場合があります。詳細については、「最短ストレージ期間未満で保存されたオブジェクトの課金方法」をご参照ください。
CopyObject を使用したストレージクラスの変換ルール
LRS
LRS オブジェクトは、標準 LRS、IA LRS、アーカイブ LRS、コールドアーカイブ LRS、ディープコールドアーカイブ LRS のいずれかのストレージクラス間で変換できます。
ゾーン冗長ストレージ (ZRS)
ZRS オブジェクトは、標準 ZRS、IA ZRS、アーカイブ ZRS のいずれかのストレージクラス間で変換できます。
アーカイブ ZRS オブジェクトを標準 ZRS または IA ZRS オブジェクトに変換する場合、バケットの設定に応じて異なる操作が必要です:
バケットでアーカイブオブジェクトのリアルタイムアクセスが有効になっている場合、アーカイブオブジェクトを復元せずに直接ストレージクラスを変換できます。
バケットでアーカイブオブジェクトのリアルタイムアクセスが有効になっていない場合、ストレージクラスを変換する前に、まずアーカイブオブジェクトを復元する必要があります。
CopyObject を使用したストレージクラスの変換方法
オブジェクトの上書き防止を有効にした後、OSS コンソール、SDK、ossutil などのクライアントを使用して CopyObject 操作を呼び出してオブジェクトのストレージクラスを変換することはできません。ストレージクラスを変換するには、ライフサイクルルールを使用して自動変換する必要があります。
OSS コンソールの使用
コンソールでオブジェクトのストレージクラスを変更する場合、オブジェクトサイズは 1 GB を超えることはできません。1 GB を超えるオブジェクトについては、SDK または ossutil を使用することを推奨します。
OSS コンソールにログインします。
バケット をクリックし、次に宛先バケットの名前をクリックします。
左側のナビゲーションウィンドウで、オブジェクト管理 > オブジェクト を選択します。
オブジェクト ページで、宛先オブジェクトを見つけ、
> ストレージタイプの変更 を選択します。ストレージクラスを変更する際にオブジェクトのカスタムメタデータを保持するために、ユーザーメタデータの保持 スイッチをオンにすることを推奨します。
新しいストレージクラスを選択し、OK をクリックします。
Alibaba Cloud 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();
// この例を実行する前に、バケットとオブジェクトを作成してください。オブジェクトは標準または低頻度アクセスストレージクラスである必要があります。
// バケット名を指定します。例: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({
// region をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、region を 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 をバケットの名前に設定します。
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 インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを使用してください。
// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを 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)
}
// yourBucketName をバケットの名前に設定します。
bucketName := "yourBucketName" // 実際のバケット名に置き換えてください。
// yourObjectName をオブジェクトのフルパスに設定します。バケット名は含めないでください。
objectName := "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)
{
/* yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
std::string Endpoint = "yourEndpoint";
/* yourRegion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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」をご参照ください。
REST API の使用
アプリケーションに特定の要件がある場合は、REST API リクエストを直接送信できます。そのためには、署名を計算するためのコードを手動で記述する必要があります。詳細については、「CopyObject」をご参照ください。
注意事項
オブジェクトのストレージクラスを IA、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換する際は、次の点に注意してください:
最小課金サイズ
オブジェクトの最小課金サイズは 64 KB です。オブジェクトが 64 KB 未満の場合、64 KB のストレージ料金が請求されます。
最短ストレージ期間
最短ストレージ期間は、IA オブジェクトで 30 日、アーカイブオブジェクトで 60 日、コールドアーカイブオブジェクトで 180 日、ディープコールドアーカイブオブジェクトで 180 日です。オブジェクトが最短ストレージ期間より短い期間保存された場合、最短ストレージ期間未満のオブジェクトのストレージ料金が請求されます。詳細については、「ストレージ料金」をご参照ください。
ライフサイクルルールを使用したオブジェクトストレージクラスの自動変換
オブジェクトのストレージクラスを IA またはアーカイブに変換する場合、オブジェクトのストレージ期間は再計算されません。
たとえば、a.txt という名前のオブジェクトが標準オブジェクトとして OSS に 10 日間保存されます。ライフサイクルルールによってストレージクラスが IA に変換された後、30 日間の最短ストレージ期間要件を満たすためには、さらに 20 日間保存するだけで済みます。
オブジェクトのストレージクラスをコールドアーカイブまたはディープコールドアーカイブに変換する場合、オブジェクトのストレージ期間は再計算されます。
例 1:a.txt という名前のオブジェクトが標準または IA オブジェクトとして OSS に 10 日間保存されます。ライフサイクルルールによってストレージクラスがコールドアーカイブまたはディープコールドアーカイブに変換された後、180 日間の最短ストレージ期間要件を満たすためには、さらに 180 日間保存する必要があります。
例 2:a.txt という名前のオブジェクトがコールドアーカイブオブジェクトとして OSS に 30 日間保存されます。ライフサイクルルールによってストレージクラスがディープコールドアーカイブに変換されると、180 日間の最短ストレージ期間未満でコールドアーカイブオブジェクトを保存したことに対する料金が請求されます。さらに、ディープコールドアーカイブに変換された後、180 日間の最短ストレージ期間要件を満たすためには、さらに 180 日間保存する必要があります。
CopyObject 操作を使用したオブジェクトストレージクラスの手動変換
CopyObject 操作を使用してオブジェクトを手動で任意のストレージクラスに変換する場合、オブジェクトのストレージ期間は再計算されます。
たとえば、a.txt という名前のオブジェクトが標準オブジェクトとして OSS に 10 日間保存されます。CopyObject 操作を使用してオブジェクトを手動で IA ストレージクラスに変換した後、30 日間の最短ストレージ期間要件を満たすためには、さらに 30 日間保存する必要があります。
IA、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブオブジェクトを、最短ストレージ期間が経過する前に名前変更したり、同じ名前のオブジェクトをアップロードして上書きしたりすると、最短ストレージ期間未満のオブジェクトのストレージ料金が請求されます。たとえば、IA オブジェクトを 29 日間保存した後に名前変更すると、OSS は名前変更されたオブジェクトを新しいオブジェクトとして扱い、そのストレージ期間をリセットします。これは、IA ストレージクラスの最短ストレージ期間要件を満たすために、オブジェクトをさらに 30 日間保存する必要があることを意味します。
復元時間
アーカイブ、コールドアーカイブ、またはディープコールドアーカイブオブジェクトの復元には時間がかかります。ビジネスシナリオでオブジェクトへのリアルタイムアクセスが必要な場合は、オブジェクトのストレージクラスをアーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換しないことを推奨します。
リクエスト料金
変換方法 | オブジェクトのソースストレージクラス | リクエスト料金 |
ライフサイクルルール | 標準、IA、アーカイブ、コールドアーカイブ | オブジェクトのソースストレージクラスに基づいて PUT リクエストの料金が請求されます。料金は現在のバケットに請求されます。 |
CopyObject | アーカイブストレージ |
|
標準、IA、コールドアーカイブ、ディープコールドアーカイブ | オブジェクトのソースストレージクラスに基づいて PUT リクエストの料金が請求されます。料金は宛先バケットに請求されます。 |
①アーカイブオブジェクトのリアルタイムアクセスが有効になっている場合、CopyObject 操作を使用してソースのアーカイブオブジェクトのストレージクラスを変換する際に、事前に復元する必要はありません。アーカイブストレージからのデータ復元料金は請求されませんが、リアルタイムアクセスのためのデータ取得料金が請求されます。
②アーカイブオブジェクトのリアルタイムアクセスが有効になっていない場合、CopyObject 操作を使用してソースのアーカイブオブジェクトのストレージクラスを変換する際に、まず復元する必要があります。アーカイブストレージからのデータ復元料金は請求されますが、リアルタイムアクセスのためのデータ取得料金は請求されません。
詳細については、「データ処理料金」をご参照ください。
データ取得料金
IA オブジェクトにアクセスすると、実際にアクセスされたデータ量に基づいて追加のデータ取得料金が請求されます。アーカイブ、コールドアーカイブ、ディープコールドアーカイブオブジェクトを復元すると、追加のデータ復元料金が請求されます。アーカイブオブジェクトのリアルタイムアクセスを有効にすると、アーカイブオブジェクトに直接アクセスする際にリアルタイムアクセスの追加料金が請求されます。これらの料金は、アウトバウンドトラフィック料金とは別に請求されます。オブジェクトが月に平均 1 回以上アクセスされる場合、IA、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブストレージクラスを使用するコストは、標準ストレージクラスのコストよりも高くなる可能性があります。
一時ストレージ料金
コールドアーカイブまたはディープコールドアーカイブオブジェクトが復元されると、アクセス用にオブジェクトの標準レプリカが作成されます。このレプリカには、復元期間中、標準ストレージクラスのストレージレートで一時ストレージ料金が請求されます。
よくある質問
最終更新日時にもとづくライフサイクルルールを使用して、オブジェクトのストレージクラスを低頻度アクセスから標準に変換できますか。
いいえ、できません。以下のいずれかの方法を使用して、オブジェクトのストレージクラスを IA から標準に変換できます:
CopyObject 操作の使用
CopyObject 操作を呼び出して、単一のオブジェクトのストレージクラスを IA から標準に変換できます。詳細については、「CopyObject 操作を使用したオブジェクトストレージクラスの手動変換」をご参照ください。
ossutil の使用
ossutil を使用して set-props コマンドを --storage-class オプション付きで実行し、オブジェクトのストレージクラスを IA から標準に変換できます。詳細については、「set-props (オブジェクトプロパティの設定)」をご参照ください。