Object Storage Service (OSS) は、標準、低頻度アクセス (IA) 、アーカイブ、コールドアーカイブ、およびディープコールドアーカイブのストレージクラスを提供します。 ライフサイクルルールを使用するか、CopyObject操作を呼び出して、オブジェクトのストレージクラスを変換できます。
のオブジェクトのストレージクラスは変更しないことをお勧めします。OSS-HDFSが有効になっているバケットのdlsdata/
ディレクトリ。
でオブジェクトのストレージクラスを変更した場合。dlsdata/
ディレクトリを低頻度アクセス (IA) にすると、オブジェクトはOSS-HDFSを使用してアクセス可能なままになります。 ディレクトリ内のオブジェクトのストレージクラスをアーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変更した場合、OSS-HDFSを使用してオブジェクトに直接アクセスすることはできません。 オブジェクトにアクセスする前に、オブジェクトを復元する必要があります。
オブジェクトのストレージクラスを自動的に変換するライフサイクルルールの設定
ライフサイクルルールを設定して、OSSがオブジェクトのストレージクラスを自動的に変換できるようにすることができます。 コスト削減の詳細については、「
オブジェクトの最終変更時刻に基づくストレージクラス変換
LRS
ローカル冗長ストレージ (LRS) オブジェクトのストレージクラスは、次のルールに基づいて変換できます。
標準LRSからIA LRS、アーカイブLRS、コールドアーカイブLRS、またはコールドアーカイブLRSへの変換
IA LRSからアーカイブLRS、コールドアーカイブLRS、またはディープコールドアーカイブLRSへの変換
アーカイブLRSからコールドアーカイブLRSまたはディープコールドアーカイブLRSへの変換
コールドアーカイブLRSからディープコールドアーカイブLRSへの変換
オブジェクトのストレージクラスをIA、Archive、Cold Archive、およびDeep Cold Archiveに変換するために、異なるポリシーがバケットに同時に設定されている場合、ポリシーで指定された期間は次の要件を満たす必要があります。
IAへの変換に要する時間 <アーカイブへの変換に要する時間 <コールドアーカイブへの変換に要する時間 <ディープコールドアーカイブへの変換に要する時間
ZRS
ゾーン冗長ストレージ (ZRS) オブジェクトのストレージクラスは、次のルールに基づいて変換できます。
標準ZRSからIA ZRS、アーカイブZRS、コールドアーカイブLRS、またはディープコールドアーカイブLRSへの変換
IA ZRSからアーカイブZRS、コールドアーカイブLRS、またはディープコールドアーカイブLRSへの変換
アーカイブZRSからコールドアーカイブLRSまたはディープコールドアーカイブLRSへの変換
詳細については、「最終変更時刻に基づくライフサイクルルール」をご参照ください。
オブジェクトの最終アクセス時間に基づくストレージクラス変換
前の図に示すストレージクラス変換ルールは、LRSオブジェクトのストレージクラス変換にのみ適用されます。
オブジェクトの最終アクセス時間に基づいて設定されたライフサイクルルールでポリシーを指定して、オブジェクトのストレージクラスを標準からIAに変換できます。 オブジェクトにアクセスしたときに、オブジェクトのストレージクラスをIAからStandardに変換するかどうかを指定することもできます。
オブジェクトの最終アクセス時間に基づいて設定されたライフサイクルルールでポリシーを指定して、オブジェクトのストレージクラスを標準またはIAからアーカイブまたはコールドアーカイブに変換できます。 ライフサイクルルールでポリシーを指定して、オブジェクトのストレージクラスをアーカイブからコールドアーカイブに変換することもできます。 オブジェクトのストレージクラスをStandardまたはIAからArchiveまたはCold Archiveに変換する場合は、 チケットを起票し、必要な権限を申請します。 アプリケーションが承認されたら、オブジェクトを変換するストレージクラスを指定する必要があります。
重要アプリケーションが承認された後、バケットのオブジェクトの最終アクセス時間に基づいてライフサイクルルールを設定し、バケット内のオブジェクトのストレージクラスを標準またはIAからアーカイブまたはコールドアーカイブに変換する場合、バケット内のアーカイブまたはコールドアーカイブオブジェクトの最終アクセス時間は、バケットのアクセス追跡が有効になっている時間です。
詳細については、「最終アクセス時間に基づくライフサイクルルール」をご参照ください。
オブジェクトのストレージクラスを変換するライフサイクルルールの設定
複数の方法を使用してライフサイクルルールを設定できます。 設定したライフサイクルルールに基づいて、複数のオブジェクトのストレージクラスを指定されたストレージクラスに変換するか、指定された期間が経過するとオブジェクトとパーツを削除します。 次のいずれかの方法を使用して、オブジェクトのストレージクラスを特定のストレージクラスに変換することで、ライフサイクルルールを設定できます。
OSS コンソールの使用
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションツリーで、データ管理 > ライフサイクル を選択します。
(オプション) 最終アクセス時刻に基づいてライフサイクルルールを作成する場合は、ライフサイクル ページで [アクセストラッキングの有効化] をオンにします。
ライフサイクル ページで、ルールの作成をクリックします。
[ルールの作成] パネルで、パラメーターを設定します。 下表に、各パラメーターを説明します。
バージョン管理が無効になっているバケット
セクション
パラメーター
説明
基本設定
ステータス
ライフサイクルルールのステータスを指定します。 有効な値: 開始 および [無効] 。
ライフサイクルルールを有効にすると、設定されたライフサイクルルールに基づいて、オブジェクトのストレージクラスが変換されるか、オブジェクトが削除されます。
ライフサイクルルールを無効にすると、ライフサイクルタスクは中断されます。
ポリシー
ライフサイクルルールを有効にするオブジェクトを指定します。 有効な値: オブジェクトプレフィックスおよびバケット全体に適用。
重複するプレフィックスを許可
重複するプレフィックスを許可するかどうかを指定します。 デフォルトでは、各ライフサイクルルールのプレフィックスが重複するかどうかをチェックします。 たとえば、重複するプレフィックスを含む次のライフサイクルルールを設定します。
ルール1
バケット内のdir1/ プレフィックスが名前に含まれるすべてのオブジェクトは、オブジェクトが最後に変更されてから180日後に削除されます。
ルール2
バケット内で名前にdir1/dir2/ プレフィックスが含まれるすべてのオブジェクトは、オブジェクトが最後に変更されてから30日後にIAオブジェクトに変換され、60日後に削除されます。
ライフサイクル設定でプレフィックスの重複を許可しない場合、OSSはdir1/dir2/ ディレクトリ内のオブジェクトが2つの削除ルールに一致することを検出します。 したがって、2つのライフサイクルルールは拒否され、Overlap for same action type Expiration. エラーメッセージが返されます。
ライフサイクル設定でプレフィックスの重複を許可した場合、dir1/dir2/ ディレクトリ内のオブジェクトは30日後にIAオブジェクトに変換され、60日後に削除されます。 dir1/ ディレクトリ内の他のオブジェクトは、180日後に削除されます。
接頭辞
ライフサイクルルールを有効にするオブジェクトの名前にプレフィックスを指定します。
Prefixパラメーターをimgに設定した場合、imgtest.pngやimg/example.jpgなど、名前にimgプレフィックスが含まれるすべてのオブジェクトがライフサイクルルールと一致します。
プレフィックスをimg/ に設定した場合、img/example.jpgやimg/test.jpgなど、名前にimg /プレフィックスが含まれるすべてのオブジェクトがライフサイクルルールと一致します。
タグ
タグを指定します。 このルールは、指定されたタグを含むオブジェクトに対してのみ有効です。 たとえば、オブジェクトプレフィックス を選択し、Prefixをimgに、Keyをaに、Valueを1に設定した場合、このルールは、名前にimgプレフィックスが含まれ、a=1タグが含まれるすべてのオブジェクトに対して有効になります。 オブジェクトタグの詳細については、「オブジェクトタグ付け」をご参照ください。
ではない
指定されたプレフィックスとタグを含むオブジェクトに対してライフサイクルルールが有効にならないように指定します。
重要NOTをオンにすると、各ライフサイクルルールには、オブジェクトのプレフィックスとタグの少なくとも1つが含まれている必要があります。
NOTパラメーターに指定されたタグのキーは、タグパラメーターに指定されたキーと同じにすることはできません。
NOTをオンにすると、部品に対して有効になるライフサイクルルールを設定できません。
ファイルサイズ
ライフサイクルルールを有効にするオブジェクトのサイズを指定します。
最小サイズ: 指定されたサイズのしきい値より大きいオブジェクトに対してのみライフサイクルルールが有効になるように指定します。 オブジェクトの最小サイズは、0 Bより大きく5テラバイト未満で指定できます。
最大サイズ: 指定されたサイズのしきい値より小さいオブジェクトに対してのみライフサイクルルールが有効になるように指定します。 オブジェクトの最大サイズは、0 Bより大きく5テラバイト未満で指定できます。
重要同じライフサイクルルールでオブジェクトの最小サイズと最大サイズを指定する場合は、次の項目に注意してください。
最大オブジェクトサイズが最小オブジェクトサイズより大きいことを確認します。
部品のライフサイクルルールは指定できません。
ライフサイクルルールを指定して削除マーカーを削除することはできません。
オブジェクトに対するポリシー
ファイル時間ポリシー
オブジェクトの有効期限を指定するオブジェクトのルールを設定します。 有効な値: 有効期間、有効期限、および有効になっていません。 有効になっていません を選択した場合、ファイルライフサイクルの設定は有効になりません。
ライフサイクルベースのルール
ライフサイクルルールを設定して、オブジェクトのストレージクラスを変換するか、期限切れのオブジェクトを削除します。
例1: [アクセス時間] を選択した場合、有効期間 を30に設定し、有効期間の経過後にオブジェクトのストレージクラスをIA (アクセス後に変換しない) に変換するように指定します。 この場合、2021年9月1日に最後にアクセスされたオブジェクトのストレージクラスは、2021年10月1日にIAに変換されます。
例2: [変更期間] を選択した場合、有効期限を2021年9月24日に設定し、この日付より前に最後に変更されたオブジェクトを削除するように指定します。 この場合、2021年9月24日より前に最後に変更されたオブジェクトは自動的に削除されます。 削除されたオブジェクトは復元できません。
フラグメントに対するポリシー
フラグメント期限切れポリシー
期限切れの部品に対して実行する操作を指定します。 タグ をオンにすると、このパラメーターは使用できません。 有効な値: 有効期間、有効期限、および有効になっていません。 有効になっていません を選択した場合、部品ライフサイクルの設定は有効になりません。
重要各ライフサイクルルールには、オブジェクト有効期限ポリシーと部品有効期限ポリシーの少なくとも1つが含まれている必要があります。
フラグメントに対するルール
Part Lifecycleパラメーターの値に基づいて、パーツの有効期限を指定します。 期限切れのパーツは自動的に削除され、復元できません。
バージョン管理が有効になっているバケット
基本設定 セクションと フラグメントに対するポリシー セクションのパラメーターは、バージョン化されていないバケットのパラメーターと同じ方法で設定します。 次の表では、バージョン化されていないバケットに設定するパラメーターとは異なるパラメーターのみを説明します。
セクション
パラメーター
説明
現在のバージョンのポリシー
クリーンアップ削除マーカー
バケットのバージョン管理を有効にすると、[Clean Up Delete Marker] オプションが [File Lifecycle] パラメーターに追加されます。 その他のパラメーターは、バージョン化されていないバケットに対して設定できるパラメーターと同じです。
削除マーカーのクリーンアップを選択した場合、オブジェクトに削除マーカーであるバージョンが1つしかない場合、OSSは削除マーカーの有効期限が切れたと見なし、削除マーカーを削除します。 オブジェクトに複数のバージョンがあり、オブジェクトの現在のバージョンが削除マーカーの場合、OSSは削除マーカーを保持します。 削除マーカーの詳細については、「マーカーの削除」をご参照ください。
以前のバージョンに対するポリシー
ファイル時間ポリシー
以前のバージョンの有効期限を指定します。 有効な値: 有効期間および有効になっていません。 有効になっていません を選択した場合、ファイルライフサイクルの設定は有効になりません。
ライフサイクルベースのルール
オブジェクトが以前のバージョンになってから保持できる日数を指定します。 有効期限が切れると、指定された操作は翌日以前のバージョンで実行されます。 たとえば、Validity Period (Days) パラメーターを30に設定した場合、2021年9月1日に以前のバージョンになったオブジェクトは、指定されたストレージクラスに変換されるか、2021年10月1日に削除されます。
重要オブジェクトが以前のバージョンになるときは、それ以降のバージョンが生成された時刻に基づいて判断できます。
OK をクリックします。
ライフサイクルルールの作成後、ライフサイクルルールリストでルールを表示できます。
OSS SDKの使用
次のサンプルコードは、一般的なプログラミング言語でOSS SDKを使用してライフサイクルルールを設定する方法の例を示しています。 他のプログラミング言語でOSS SDKを使用してライフサイクルルールを設定するためのサンプルコードの詳細については、「概要」をご参照ください。
Java
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。impor t com.aliyun.oss.com mon.utils.DateUtil;
com.aliyun.oss.mo del.LifecycleRuleをインポートします。com.aliyun.oss.mo del.SetBucketLifecycleRequestをインポートします。com.aliyun.oss.mo del.StorageClassをインポートします。java.util.ArrayListをインポートします。java.util.HashMapをインポートします。java.util.Listをインポートします。java.util.Mapをインポートします。public classデモ {
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";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// SetBucketLifecycleRequestを使用してリクエストを作成します。
SetBucketLifecycleRequest request = new SetBucketLifecycleRequest(bucketName);
// ライフサイクルルールのIDを指定します。
String ruleId0 = "rule0";
// ライフサイクルルールを一致させるプレフィックスを指定します。
String matchPrefix0 = "A0/";
// ライフサイクルルールを一致させるタグを指定します。
Map<String, String> matchTags0 = new HashMap<String, String>();
// タグのキーと値を指定します。 この例では、キーは所有者に設定され、値は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/";
文字列ruleId4 = "rule4";
文字列matchPrefix4 = "A4/";
文字列ruleId5 = "rule5";
文字列matchPrefix5 = "A5/";
文字列ruleId6 = "rule6";
文字列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. アーカイブ);
storageTransition.setExpirationDays(30);
storageTransitions.add(storageTransition);
rule.setStorageTransition(storageTransitions);
request.AddLifecycleRule(rule);
// 10月12日2022より前に最後に変更されたオブジェクトのストレージクラスをアーカイブに変換するように指定します。
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. アーカイブ);
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. アーカイブ);
storageTransition.setExpirationDays(365);
storageTransitions.add(storageTransition);
rule.setStorageTransition(storageTransitions);
// 削除マーカーが期限切れになると自動的に削除されるように指定します。
rule.setExpiredDeleteMarker(true);
// オブジェクトが最後に変更されてから10日後に、以前のバージョンのオブジェクトのストレージクラスをIAに変換するように指定します。
LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition=
新しいLifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(10).withStrorageClass(StorageClass.IA);
// オブジェクトが最後に変更されてから20日後に、以前のバージョンのオブジェクトのストレージクラスをアーカイブに変換するように指定します。
LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition2=
新しいLifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(20).withStrorageClass(StorageClass.Archive);
// オブジェクトが最後に変更されてから30日後に、以前のバージョンのオブジェクトを削除するように指定します。
LifecycleRule.NoncurrentVersionExpiration noncurrentVersionExpiration = new LifecycleRule.NoncurrentVersionExpiration().withNoncurrentDays(30);
リスト <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);
// バケットに設定されているライフサイクルルールを照会します。
リスト <LifecycleRule> listRules = ossClient.getBucketLifecycle(bucketName);
for(LifecycleRuleルール: listRules){
System.out.println("ruleId=" + rules.getId()+ ", matchPrefix=" + rules.getPrefix());
}
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
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';
}
OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。OSS\Model\LifecycleConfigを使用します。OSS\Model\LifecycleRuleを使用します。OSS\Model\LifecycleActionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数を指定していることを確認してください。
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
$end point = "https://oss-cn-hangzhou.aliyuncs.com";
// バケットの名前を指定します。
$bucket= "yourBucketName";
// ルール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 {
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
$ossClient->putBucketLifecycle($bucket、$lifecycleConfig);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage()) 。 "\n");
戻ります。}
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、
// バケットの名前を指定します。
bucket: 'yourbucketname'
});
async関数getBucketLifecycle () {
try {
const result = await client.getBucketLifecycle('Yourbucketname');
console.log(result.ru les); // ライフサイクルルールを照会します。
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
# -*-コーディング: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
datetimeのインポート
oss2.modelsインポートから (LifecycleExpiration, LifecycleRule,
BucketLifecycle、AbortMultipartUpload、
TaggingRule, タグ付け, StorageTransition,
NoncurrentVersionStorageTransition、
NoncurrentVersionExpiration)
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数OSS_ACCESS_KEY_IDとOSS_ACCESS_KEY_SECRETが設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。
# バケットの名前を指定します。 例: examplebucket.
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'examplebucket')
# オブジェクトが最後に変更されてから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_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 (ライフサイクル)
C#
Aliyun.OSSを使用した
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";
// OSSClientインスタンスを作成します。
var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret);
トライ
{
var setBucketLifecycleRequest = new SetBucketLifecycleRequest(bucketName);
// 最初のライフサイクルルールを作成します。
LifecycleRule lcr1 = new LifecycleRule()
{
ID = "delete obsoleted files",
Prefix = "obsoleted/",
Status = RuleStatus.Enabled,
ExpriationDays = 3、
タグ=新しいタグ [1]
};
// 最初のルールのタグを指定します。
var tag1=新しいタグ
{
キー="プロジェクト" 、
値="projectone"
};
lcr1.タグ [0] = tag1;
// Create the second lifecycle rule.
LifecycleRule lcr2 = new LifecycleRule()
{
ID = "delete temporary files",
Prefix = "temporary/",
Status = RuleStatus.Enabled,
ExpriationDays = 20、
タグ=新しいタグ [1]
};
// 2番目のルールのタグを指定します。
var tag2=新しいタグ
{
キー="ユーザー" 、
値="jsmith"
};
lcr2.タグ [0] = tag2;
// 最後に変更してから30日後に期限切れになるように指定します。
lcr2.AbortMultipartUpload = new LifecycleRule.LifeCycleExpiration()
{
日数=30
};
LifecycleRule lcr3 = new LifecycleRule();
lcr3.ID = "のみNoncurrentVersionTransition";
lcr3.Prefix = "test1";
lcr3.Status = RuleStatus.Enabled;
lcr3.NoncurrentVersionTransitions = new LifecycleRule.LifeCycleNoncurrentVersionTransition[2]
{
// オブジェクトのストレージクラスを以前のバージョンになってから90日後に低頻度アクセス (IA) に変換するように指定します。
新しいLifecycleRule。LifeCycleNoncurrentVersionTransition(){
StorageClass = StorageClass.IA、
NoncurrentDays = 90
},
// 以前のバージョンのオブジェクトのストレージクラスが、最後に変更されてから180日後にアーカイブに変換されるように指定します。
新しいLifecycleRule。LifeCycleNoncurrentVersionTransition(){
StorageClass = StorageClass. アーカイブ、
NoncurrentDays = 180
}
};
setBucketLifecycleRequest.AddLifecycleRule(lcr1);
setBucketLifecycleRequest.AddLifecycleRule(lcr2);
setBucketLifecycleRequest.AddLifecycleRule(lcr3);
// Configure lifecycle rules.
client.SetBucketLifecycle(setBucketLifecycleRequest);
Console.WriteLine("Set bucket:{0} Lifecycle successful", bucketName);
}
キャッチ (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; エラー情報: {1} 。 \nRequestID:{2}\tHostID:{3}"、
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
キャッチ (例外ex)
{
Console.WriteLine("Failed with error info: {0}" 、メッセージなど);
}
Android-Java
PutBucketLifecycleRequest request = new PutBucketLifecycleRequest();
request.setBucketName("examplebucket");
BucketLifecycleRule rule1=新しい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=新しい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>() {
@オーバーライド
public void onSuccess(PutBucketLifecycleRequestリクエスト, PutBucketLifecycleResult結果) {
OSSLog.logInfo("code::" + result.getStatusCode());
}
@オーバーライド
public void onFailure(PutBucketLifecycleRequest request, ClientException clientException, ServiceException serviceException) {
OSSLog.logError("error: " + serviceException.getRawMessage());
}
});
task.waitUntilFinished();
行く
パッケージメイン
import (import (import)
"fmt"
"os"
「github.com/aliyun/aliyun-oss-go-sdk/oss」
)
func main() {
// バケットの名前を指定します。
bucketName := "yourBucketName"
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、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に設定します。 実際のエンドポイントを指定します。
client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// ライフサイクルルールを作成し、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" 、プレフィックス: "yourObjectPrefix" 、ステータス: "Enabled" 、有効期限:&有効期限、NonVersionExpiration: &versionExpiration、NonVersionTransition: &versionTransition、}
// ライフサイクルルールを作成し、IDをrule3に設定します。 このルールは、キーがtag1で値がvalue1のタグを含むオブジェクトに対して有効になります。 これらのオブジェクトは、オブジェクトが最後に変更されてから3日後に期限切れになります。
rule3 := oss.LifecycleRule {
ID: "rule3" 、プレフィックス: "",
ステータス: "Enabled" 、タグ: []oss.Tag {
oss. タグ {
キー: "tag1" 、値: "value1" 、},
},
有効期限: &oss。LifecycleExpiration{Days: 3} 、}
// ライフサイクルルールを設定します。
rules := []oss.LifecycleRule{rule1, rule2, rule3}
// バケットの名前を指定します。 例: examplebucket.
bucketName := "examplebucket"
err = client.SetBucketLifecycle(bucketName, rules)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
C ++
#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
/* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
/* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
std::string Endpoint = "yourEndpoint";
/* バケットの名前を指定します。 例: examplebucket. */
std::string BucketName = "examplebucket";
/* ネットワークリソースなどのリソースを初期化します。 */
InitializeSdk();
ClientConfiguration conf;
/* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClientクライアント (Endpoint, credentialsProvider, conf);
SetBucketLifecycleRequestリクエスト (BucketName);
std::string date("2022-10-12T00:00:00.000Z");
/* タグ付けを設定します。 */
タグ付け;
tagging.addTag (タグ ("key1", "value1"));
tagging.addTag (タグ ("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:: 無効);
rule2.setExpiration (日付);
/* バケットのバージョン管理状態が有効になっている場合は、バケットに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:: アーカイブ);
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:: アーカイブ);
/* バージョンが更新されてから30日後にオブジェクトを削除することを指定します。 */
自動有効期限=LifeCycleExpiration(30);
rule3.setNoncurrentVersionExpiration (有効期限);
LifeCycleTransitionList noncurrentVersionStorageTransitions{transition1, transition2};
rule3.setNoncurrentVersionTransitionList(noncurrentVersionStorageTransitions);
/* ライフサイクルルールを設定します。 */
LifecycleRuleListリスト {rule1, rule2, rule3};
request.setLifecycleRules (リスト);
auto outcome = client.SetBucketLifecycle (リクエスト);
if (!outcome.isSuccess()) {
/* 例外を処理します。 */
std::cout << "SetBucketLifecycle fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* ネットワークリソースなどのリソースを解放します。 */
ShutdownSdk();
0を返します。}
C
#include "oss_api.h"
# 「aos_http_io.h」を含める
/* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 * /
const char * endpoint = "yourEndpoint";
/* バケットの名前を指定します。 例: examplebucket. * /
const char * bucket_name = "examplebucket";
void init_options(oss_request_options_t * オプション)
{
options->config = oss_config_create(options->pool);
/* char * stringを使用して、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"));
/* 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);
/* Create and initialize options. このパラメーターには、エンドポイント、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-> プレフィックス、"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-> プレフィックス、"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();
0を返します。}
ルビー
'aliyun/oss 'が必要です
client = Aliyun::OSS::Client.new (
# この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
エンドポイント: '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を使用してライフサイクルルールを設定する方法の詳細については、「ライフサイクルルールの追加または変更」をご参照ください。
RESTful APIの使用
ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketLifecycle」をご参照ください。
CopyObjectを呼び出して、オブジェクトのストレージクラスを手動で変換します。
CopyObject操作を呼び出して、オブジェクトを上書きしてオブジェクトのストレージクラスを変換できます。
オブジェクトのストレージクラスをIA、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換する場合、IAオブジェクトのオブジェクトサイズとストレージ期間に基づいてストレージ料金が課金されます。また、オブジェクトサイズとストレージ期間に基づいてストレージ料金が課金されます。 詳細については、「使用状況のメモ」セクションをご参照ください。
アーカイブオブジェクト、Cold Archiveオブジェクト、またはDeep Cold Archiveオブジェクトのストレージクラスを変換するには、まずオブジェクトを復元する必要があります。 オブジェクトを復元する方法の詳細については、「オブジェクトの復元」をご参照ください。 バケットに対してArchiveオブジェクトのリアルタイムアクセスが有効になっている場合、バケット内のArchiveオブジェクトのストレージクラスを復元せずに直接変換できます。 アーカイブオブジェクトのリアルタイムアクセスを有効にする方法の詳細については、「アーカイブオブジェクトのリアルタイムアクセス」をご参照ください。
CopyObject操作を呼び出して、バージョン管理が有効になっているバケット内のオブジェクトのストレージクラスを変換すると、OSSは自動的に宛先オブジェクトの一意のバージョンIDを生成します。 バージョンIDは、x-oss-version-id
レスポンスヘッダーで返されます。 バケットのバージョン管理が有効または一時停止されていない場合、OSSは宛先オブジェクトのIDがnullのバージョンを生成し、IDがnullの既存のバージョンを上書きします。
CopyObjectの呼び出しによるストレージクラス変換のルール
LRS
LRSオブジェクトは、標準LRS、IA LRS、アーカイブLRS、コールドアーカイブLRS、およびディープコールドアーカイブLRSの2つのストレージクラス間で変換できます。
ZRS
ZRSオブジェクトは、標準ZRSとIA ZRSの間でのみ変換できます。
オブジェクトのストレージクラスを手動で変換するメソッド
OSS コンソールの使用
OSSコンソールでオブジェクトのストレージクラスを変換する場合、オブジェクトのサイズは1 GBを超えることはできません。 サイズが1 GBを超えるオブジェクトのストレージクラスを変換するには、OSS SDKまたはossutilを使用することを推奨します。
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、変換するストレージクラスのオブジェクトを含むバケットをクリックします。
左側のナビゲーションツリーで、ファイル > オブジェクト を選択します。
オブジェクト ページで、ストレージクラスを変換するオブジェクトを見つけ、 > ストレージクラスの変更 を選択します。
ストレージクラスの変換後、オブジェクトのユーザーメタデータを保持するには、ユーザーメタデータの保持 をオンにしておくことをお勧めします。
オブジェクトを変換するストレージクラスを選択し、OK をクリックします。
OSS SDKの使用
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.CopyObjectRequestをインポートします。com.aliyun.oss.mo del.CopyObjectResultをインポートします。com.aliyun.oss.mo del.ObjectMetadataをインポートします。com.aliyun.oss.mo del.StorageClassをインポートします。public classデモ {
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();
// この例では、バケットとStandardまたはIAオブジェクトが作成されます。
// バケットの名前を指定します。 例: examplebucket.
String bucketName = "examplebucket";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampleobject.txt。
文字列objectName = "exampleobject.txt";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// CopyObjectRequestオブジェクトを作成します。
CopyObjectRequest request = new CopyObjectRequest(bucketName, objectName, bucketName, objectName) ;
// ObjectMetadataオブジェクトを作成します。
ObjectMetadata objectMetadata = new ObjectMetadata();
// オブジェクトのストレージクラスをアーカイブに変換します。
objectMetadata.setHeader("x-oss-storage-class", StorageClass.Archive);
// オブジェクトのストレージクラスをCold Archiveに変換します。
// objectMetadata.setHeader("x-oss-storage-class", StorageClass.ColdArchive);
// オブジェクトのストレージクラスをDeep Cold Archiveに変換します。
// objectMetadata.setHeader("x-oss-storage-class", StorageClass.DeepColdArchive);
request.setNewObjectMetadata(objectMetadata);
// オブジェクトのストレージクラスを変換します。
CopyObjectResult result = ossClient.copyObject (リクエスト);
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
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';
}
OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
$end point = "https://oss-cn-hangzhou.aliyuncs.com";
// バケットの名前を指定します。
$bucket= "<yourBucketName>";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: destfolder/exampleobject.txt。
$object = "<yourObjectName>";
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $end point);
try {
// オブジェクトのストレージクラスを変換するストレージクラスを指定します。 この例では、Archiveストレージクラスを指定します。
$copyOptions = array(
OssClient::OSS_HEADERS => array(
'x-oss-storage-classs'=> 'Archive' 、
'x-oss-metadata-directive' => 'REPLACE' 、
),
);
$ossClient->copyObject($bucket、$object、$bucket、$object、$copyOptions);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage()) 。 "\n");
戻ります。}
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、
// バケットの名前を指定します。
bucket: 'yourbucketname'
})
const options = {
ヘッダー:{'x-oss-storage-classs': 'Archive'}
}
client.copy('Objectname','Objectname',options).then((res) => {
console.log(res);
}).catch(err => {
console.log(err)
})
# -*-コーディング: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
osのインポート
# 環境変数からアクセス資格情報を取得します。 コードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
# バケットの名前を指定します。 例: examplebucket.
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'examplebucket')
# オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。
# オブジェクトのストレージクラスがStandardまたはIAであることを確認します。
object_name = 'exampledir/exampleobject.txt'
# x-oss-storage-classヘッダーを指定して、オブジェクトのストレージクラスをアーカイブに変換します。
headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_ARCHIVE}
# x-oss-storage-classヘッダーを指定して、オブジェクトのストレージクラスをコールドアーカイブに変換します。
# headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_COLD_ARCHIVE}
# x-oss-storage-classヘッダーを指定して、オブジェクトのストレージクラスをDeep Cold Archiveに変換します。
# headers = {'x-oss-storage-classs': oss2.BUCKET_STORAGE_CLASS_DEEP_COLD_ARCHIVE}
# オブジェクトのストレージクラスを変換します。
bucket.copy_object(bucket.bucket_name, object_name, object_name, headers)
package main
import (import (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)
}
// Create an OSSClient instance.
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。
client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// バケットの名前を指定します。
bucketName := "yourBucketName"
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。
objectName := "yourObjectName"
bucket, err := client.Bucket(bucketName)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// オブジェクトのストレージクラスをアーカイブに変換します。
_, err = bucket.CopyObject(objectName, objectName, oss.ObjectStorageClass(oss.StorageArchive)))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
OSSCopyObjectRequest * copy = [OSSCopyObjectRequest new];
copy.sourceBucketName = @ "examplebucket";
copy.sourceobjectKey = @ "exampleobject.txt";
copy.bucketName = @ "examplebucket";
copy.objectKey = @ "exampleobject.txt";
// exampleobject.txtという名前のオブジェクトのストレージクラスをArchiveに設定します。
copy.objectMeta = @{@ "x-oss-storage-class" : @ "Archive"};
OSSTask * task = [client copyObject:copy];
[task continueWithBlock:^ id(OSSTask * task) {
if (!task.error) {
NSLog(@ "オブジェクトのコピー成功!");
} else {
NSLog(@ "copy object failed, error: % @" , task.error);
}
nilを返します。}];
#include <iostream>
# include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
/* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
std::stringエンドポイント="https://oss-cn-hangzhou.aliyuncs.com";
/* バケットの名前を指定します。 例: examplebucket. */
std::string BucketName = "examplebucket";
/* オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 */
std::string ObjectName = "exampledir/exampleobject.txt";
/* ネットワークリソースなどのリソースを初期化します。 */
InitializeSdk();
ClientConfiguration conf;
/* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClientクライアント (Endpoint, credentialsProvider, conf);
/* オブジェクトを変換するストレージクラスを指定します。 この例では、ストレージクラスはArchiveに設定されています。 */
ObjectMetaData objectMeta;
objectMeta.addHeader("x-oss-storage-class" 、"Archive");
std::string SourceBucketName = BucketName;
std::string SourceObjectName = ObjectName;
CopyObjectRequestリクエスト (SourceBucketName, ObjectName, objectMeta);
request.setCopySource(SourceBucketName, SourceObjectName);
/* オブジェクトのストレージクラスを指定されたストレージクラスに変換します。 */
auto outcome = client.CopyObject (リクエスト);
if (!outcome.isSuccess()) {
/* 例外を処理します。 */
std::cout << "CopyObject fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* ネットワークリソースなどのリソースをリリースします。 */
ShutdownSdk();
0を返します。}
ossutil の使用
ossutilを使用してオブジェクトのストレージクラスを変換する方法の詳細については、「オブジェクトのコピー」をご参照ください。
RESTful APIの使用
ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「CopyObject」をご参照ください。
使用上の注意
オブジェクトのストレージクラスをIA、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換する場合は、次の項目に注意してください。
最小請求可能サイズ
オブジェクトの最小課金サイズは64 KBです。 オブジェクトのサイズが64 KB未満の場合、オブジェクトの最小課金サイズに対して課金されます。
最小保存期間
最小保存期間は、IAオブジェクトの場合は30日、アーカイブオブジェクトの場合は60日、コールドアーカイブとディープコールドアーカイブオブジェクトの場合は180日です。 オブジェクトが最小保存期間未満の期間保存されている場合、最小保存期間未満の期間保存されているオブジェクトのストレージ使用量に対して課金されます。 詳細については、「ストレージ料金」をご参照ください。
オブジェクトのストレージクラスを自動的に変換するライフサイクルルールの設定
オブジェクトのストレージクラスをIAまたはArchiveに変換した場合、OSSは保持期間を再計算しません。
たとえば、a.txtという名前のオブジェクトはStandardオブジェクトです。 オブジェクトがOSSに10日間保存されると、ストレージクラスはライフサイクルルールに基づいてIAに変換されます。 ストレージクラスの変換後、IAストレージクラスの最小保存期間要件を満たすために、オブジェクトをさらに20日間IAオブジェクトとして保存する必要があります。
オブジェクトのストレージクラスをCold ArchiveまたはDeep Cold Archiveに変換すると、OSSは保持期間を再計算します。
例1: a.txtという名前のオブジェクトは、StandardまたはIAオブジェクトです。 オブジェクトがOSSに10日間保存されると、ストレージクラスはライフサイクルルールに基づいてコールドアーカイブまたはディープコールドアーカイブに変換されます。 ストレージクラスの変換後、オブジェクトは、コールドアーカイブまたはディープコールドアーカイブストレージクラスの最小ストレージ期間要件を満たすために、180日間保存する必要があります。
例2: a.txtという名前のオブジェクトは、Cold Archiveオブジェクトです。 オブジェクトがOSSに30日間保存されると、ストレージクラスはライフサイクルルールに基づいてDeep Cold Archiveに変換されます。 30日間保存されたCold Archiveオブジェクトのストレージ使用量と、最小保存期間 (180 - 30) 未満保存されたCold Archiveオブジェクトのストレージ使用量に対して課金されます。 オブジェクトをDeep Cold Archiveオブジェクトに変換した後、Deep Cold Archiveストレージクラスの最小保存期間要件を満たすために、オブジェクトを180日間保存する必要があります。
CopyObjectを呼び出して、オブジェクトのストレージクラスを手動で変換します。
CopyObject操作を呼び出してオブジェクトのストレージクラスを手動で変換する場合、OSSはオブジェクトの保存期間を再計算します。
たとえば、a.txtという名前のオブジェクトはStandardオブジェクトです。 オブジェクトがOSSに10日間保存されると、CopyObject操作を呼び出してストレージクラスがIAに変換されます。 ストレージクラスの変換後、IAストレージクラスの最小保存期間要件を満たすために、オブジェクトをIAオブジェクトとして30日間保存する必要があります。
IAオブジェクト、アーカイブオブジェクト、コールドアーカイブ、またはディープコールドアーカイブオブジェクトの名前を変更した場合、または最小保存期間が経過する前に同じ名前のオブジェクトをアップロードしてオブジェクトを上書きした場合、最小保存期間未満で保存されたオブジェクトのストレージ使用量に対しても課金されます。 たとえば、IAオブジェクトが29日間保存された後に名前を変更した場合、OSSはオブジェクトの最終変更時刻を再計算します。 つまり、IAストレージクラスの最小保存期間要件を満たすには、オブジェクトをさらに30日間保存する必要があります。
修復時間
Archive、Cold Archive、およびDeep Cold Archiveオブジェクトは、アクセスする前に復元する必要があります。 アーカイブ、コールドアーカイブ、またはDeep Cold Archiveオブジェクトの復元には時間がかかります。 ビジネスシナリオでオブジェクトへのリアルタイムアクセスが必要な場合は、オブジェクトのストレージクラスをアーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換しないことをお勧めします。
API操作呼び出し料金
変換方法 | 変換前のストレージクラス | API操作呼び出し料金 |
ライフサイクルルール | 標準、IA、アーカイブ、コールドアーカイブ | 変換前のストレージクラスに基づいて、PUTリクエストに対して課金されます。 API操作呼び出し料金は、現在のバケットの請求書に含まれています。 |
CopyObject | アーカイブ |
|
標準、IA、コールドアーカイブ、ディープコールドアーカイブ | ソースオブジェクトのストレージクラスに基づいて、PUTリクエストに対して課金されます。 API操作呼び出し料金は、宛先バケットの請求書に含まれています。 |
① CopyObject操作を呼び出して、アーカイブオブジェクトのリアルタイムアクセスが有効になっているバケット内のアーカイブオブジェクトを変換する場合、事前にオブジェクトを復元する必要はなく、復元に対して課金されません。 アクセスしたアーカイブデータのサイズに基づいて、アーカイブデータ取得料金が請求されます。
② Archiveオブジェクトのリアルタイムアクセスが有効になっていないバケット内のArchiveオブジェクトを変換するためにCopyObject操作を呼び出した場合、オブジェクトを最初に復元する必要があり、復元に対して課金されます。
詳細については、「データ処理料金」をご参照ください。
データ取得料金
取得したIAデータのサイズに基づいてIAオブジェクトにアクセスすると、データ取得料金が発生します。 Archive、Cold Archive、およびDeep Cold Archiveオブジェクトを復元すると、追加料金が発生します。 バケットに対してArchiveオブジェクトのリアルタイムアクセスが有効になっている場合、Archiveオブジェクトにリアルタイムでアクセスすると課金されます。 データ取得料金とアウトバウンドトラフィック料金は別々に計算されます。 標準オブジェクトに1か月に複数回アクセスする場合、オブジェクトのストレージクラスをIA、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換すると、コストが高くなる可能性があります。
一時ストレージ料金
Cold ArchiveオブジェクトまたはDeep Cold Archiveオブジェクトを復元すると、アクセスを容易にするためにオブジェクトの標準レプリカが作成されます。 復元期間が終了する前に、標準オブジェクトとしてレプリカの期間に対して一時的なストレージ料金が請求されます。
よくある質問
最終変更時刻に基づいてライフサイクルルールを設定して、オブジェクトのストレージクラスをIAから標準に変換できますか?
いいえ。ライフサイクルルールを使用して、オブジェクトのストレージクラスをIAからStandardに変換することはできません。 次のいずれかのメソッドを使用して、オブジェクトのストレージクラスをIAからStandardに変換できます。
CopyObject操作の呼び出し
CopyObject操作を呼び出して、オブジェクトのストレージクラスをIAからStandardに変換できます。 詳細については、「CopyObjectを呼び出してオブジェクトのストレージクラスを手動で変換する」をご参照ください。
ossutil の使用
ossutilを使用してset-metaコマンドを実行し、X-Oss-Storage-Classオプションを指定できます。 これにより、1つ以上のオブジェクトのストレージクラスをIAからStandardに変換できます。 詳細については、「set-meta (オブジェクトメタデータの管理) 」をご参照ください。