すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:Pythonベースのライフサイクルルール

最終更新日:Feb 23, 2024

Object Storage Service (OSS) バケットにアップロードされるすべてのデータが頻繁にアクセスされるわけではありません。 めったにアクセスされないデータは、コンプライアンスとアーカイブの目的でコールドストレージに保存されます。 複数のOSSバケットに保存されているデータを同時に削除する場合は、データの最終変更時刻に基づいてライフサイクルルールを設定できます。 ストレージコストを削減するために、コールドデータとホットデータを別々に保存することを推奨します。 ホットデータとコールドデータを別々に保存するには、データアクセスモードを自動的に監視し、コールドデータを識別して、コールドデータのストレージクラスを変更するようにOSSを設定します。 このシナリオでは、データの最終アクセス時刻に基づいてライフサイクルルールを設定することもできます。

使用上の注意

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。

  • このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。

  • ライフサイクルルールを設定するには、oss:PutBucketLifecycle権限が必要です。 ライフサイクルルールをクエリするには、oss:GetBucketLifecycle権限が必要です。 ライフサイクルルールをクリアするには、oss:DeleteBucketLifecycle権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。

ライフサイクルルールを設定

次のコードは、2つのライフサイクルルールの例を示します。 1つのライフサイクルルールは、データの最後の変更時刻に基づいて設定されます。 その他のライフサイクルルールは、データの最終アクセス時刻に基づいて設定されます。 ライフサイクルルールを設定した後、ビジネス要件に基づいてライフサイクルルールを変更できます。 既存のライフサイクルルールを変更する方法については、「最終変更時刻に基づくライフサイクルルール」をご参照ください。

最終変更時刻に基づいてライフサイクルルールを設定し、オブジェクトのストレージクラスを変更したり、オブジェクトを削除したりする

次のコードは、examplebucketバケット内のオブジェクトのストレージクラスを変更したり、オブジェクトを削除したりするために、最終変更時刻に基づいてライフサイクルルールを設定する方法の例を示しています。

# -*-コーディング: 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 (ライフサイクル) 

最終変更時刻に基づいてライフサイクルルールを設定し、オブジェクトのストレージクラスを変更します。ただし、名前に特定のプレフィックスが含まれているオブジェクトや特定のタグがあるオブジェクトは除きます。

次のサンプルコードは、最終変更時刻に基づいてライフサイクルルールを設定する方法の例を示しています。 ライフサイクルルールは、オブジェクトが最後に変更されてから30日後に、examplebucketバケット内の次の条件を満たすオブジェクトのストレージクラスをIAに変更します。オブジェクトの名前にはログプレフィックスが含まれておらず、オブジェクトにはキーがtag1で値がvalue1のタグがありません。 条件は、フィルターノードのNot要素で指定されます。

# -*-コーディング: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
oss2.modelsからLifecycleRule、BucketLifecycle、StorageTransition、LifecycleFilter、FilterNot、FilterNotTagをインポートします。# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、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')

not_prefix = 'logs/not-prefix'
key = 'key1'
value = 'value1'
not_tag = FilterNotTag (キー、値)
filter_not = FilterNot(not_prefix, not_tag)
filter = LifecycleFilter([filter_not])

# ストレージクラス変更のライフサイクルルールを作成します。 
rule1 = LifecycleRule('mtime transition1' 、'logs' 、
                      status=LifecycleRule.ENABLED,
                      storage_transitions=[StorageTransition(days=30、storage_class=oss2.BUCKET_STORAGE_CLASS_IA)] 、
                      filter=filter)

lifecycle = BucketLifecycle([rule1])

result = bucket.put_bucket_lifecycle (ライフサイクル)
print ('ライフサイクル設定が成功しました。 '+ str(result.status) が返されます。) 

最終変更時刻に基づいてライフサイクルルールを設定し、オブジェクトのストレージクラスを変更します。

次のコードは、examplebucketバケット内のオブジェクトのストレージクラスを変更するために、最終アクセス時間に基づいてライフサイクルルールを設定する方法の例を示しています。

# -*-コーディング: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
oss2.modelsからLifecycleRule、BucketLifecycle、StorageTransition、NoncurrentVersionStorageTransitionをインポートする

# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、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')

# ライフサイクルルールを作成し、IDをrule1に設定します。 名前にログプレフィックスが含まれ、サイズが64 KBを超えるオブジェクトのストレージクラスを、オブジェクトが最後にアクセスされてから30日後にIAに変更するように指定します。 さらに、オブジェクトが再度アクセスされたときに、オブジェクトが引き続きIAオブジェクトとして格納されるように指定します。 
rule1 = LifecycleRule('rule1', 'logs', status=LifecycleRule.ENABLED)
rule1.storage_transitions = [StorageTransition(days=30、storage_class=oss2.BUCKET_STORAGE_CLASS_IA、is_access_time=True、return_to_std_when_visit=False、allow_small_file=True)]

# ライフサイクルルールを作成し、IDをrule2に設定します。 名前にdirプレフィックスが含まれ、サイズが64 KBを超える以前のバージョンのオブジェクトのストレージクラスを、オブジェクトが最後にアクセスされてから10日後にIAに変更するように指定します。 さらに、オブジェクトが再度アクセスされたときに、オブジェクトのストレージクラスをStandardに変更するように指定します。 
rule2 = LifecycleRule('rule2', 'dir', status=LifecycleRule.ENABLED)
rule2.noncurrent_version_sotrage_transitions = [NoncurrentVersionStorageTransition(10、oss2.BUCKET_STORAGE_CLASS_IA、is_access_time=True、return_to_std_when_visit=True、allow_small_file=False)]

lifecycle = BucketLifecycle([rule1, rule2])

# ライフサイクルルールを作成します。 
result = bucket.put_bucket_lifecycle (ライフサイクル)

print ('ライフサイクル設定が成功しました。 '+ str(result.status) が返されます。) 

ライフサイクルルールの照会

次のコードは、examplebucketという名前のバケットに設定されたライフサイクルルールを照会する方法の例を示しています。

# -*-コーディング: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、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')

# ライフサイクルルールを照会します。 
lifecycle = bucket.get_bucket_lifecycle()

lifecycle.ru lesのルールの場合:
    プリント ('===========')
    # ライフサイクルルールのIDを照会します。 
    print('id:', rule.id)
    # ライフサイクルルールのプレフィックスを照会します。 
    print('prefix:', rule.prefix)
    # ライフサイクルルールのステータスを照会します。 
    print('status', rule.status)
 
    rule.taggingがNoneではない場合:
        # ライフサイクルルールのタグを照会します。 
        print('tagging:', rule.tagging)

    rule.abort_multipart_uploadがNoneではない場合:
        rule.abort_multipart_upload.daysがNoneではない場合:
            # 期限切れの部品の設定を照会します。 
            print('abort_multipart_upload days:', rule.abort_multipart_upload.days)
        else:
            print('abort_multipart_upload created_before_date:', rule.abort_multipart_upload.created_before_date)

    rule.expirationがNoneではない場合:
        rule.expiration.daysがNoneではない場合:
            # ライフサイクルルールの有効期間を照会します。 
            print('expiration days:', rule.expiration.days)
        elif rule.expiration.expired_detete_marker is not None:
            # 期限切れの削除マーカーが自動的に削除されるかどうかを確認します。 
            print ('expailed_detete_marker: ', rule. expaild_detete_marker)
        elif rule.expiration.created_before_date is not None:
            # ライフサイクルルールの有効期限を照会します。 
            print('expiration created_before_date:', rule.expiration.created_before_date)

    if len(rule.storage_transitions) > 0:
        storage_info = ''
        rule内のstorage_ruleの場合、storage_transitions:
            storage_rule.daysがNoneでない場合:
                storage_info += 'days={0}, storage_class={1} *** '.
                    storage_rule.days, storage_rule.storage_class)
            else:
                storage_info += 'created_before_date={0}, storage_class={1} *** '. フォーマット (
                    storage_rule.created_before_date, storage_rule.storage_class)
            # ライフサイクルルールが最終アクセス時刻に基づいて設定されているかどうかを確認します。 Python 2.16.1以降のOSS SDKのみがこの機能をサポートしています。 
            storage_info += 'is_access_time={0}, return_to_std_when_visit={1} *** '. フォーマット (
                storage_rule.is_access_time, storage_rule.return_to_std_when_visit)
        print('storage_transitions:', storage_info)

    if len(rule.noncurrent_version_sotrage_transitions) > 0:
        noncurrent_storage_info = ''
        ルール内のstorage_rule用。noncurrent_version_sotrage_transitions:
            noncurrent_storage_info += 'days={0}, storage_class={1} *** '. フォーマット (
                storage_rule.noncurrent_days, storage_rule.storage_class)
            # オブジェクトのストレージクラスがIAに変更された後、再度アクセスされたときに、オブジェクトのストレージクラスがStandardに変更されているかどうかを確認します。 Python 2.16.1以降のOSS SDKのみがこの機能をサポートしています。 
            noncurrent_storage_info += 'is_access_time={0}, return_to_std_when_visit={1} *** '.format ()
                storage_rule.is_access_time, storage_rule.return_to_std_when_visit)
        # 以前のバージョンのオブジェクトのストレージクラスを変更するルールを照会します。 
        print('noncurrent_version_sotrage_transitions:', noncurrent_storage_info)

    rule. noncurrent_version_expailationがNoneではない場合:
        # 以前のバージョンのオブジェクトの有効期限設定を照会します。 
        print('noncurrent_version_expiration days:', rule.noncurrent_version_expiration.noncurrent_days) 

ライフサイクルルールの削除

次のコードでは、examplebucketという名前のバケットに設定されたライフサイクルルールをクリアする方法の例を示します。 1つ以上のライフサイクルルールを削除する場合は、「前回変更時刻に基づくライフサイクルルール」をご参照ください。

# -*-コーディング: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート

# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、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')

# ライフサイクルルールを削除します。 
bucket.de lete_bucket_lifecycle()

# ライフサイクルルールを再度クエリすると例外が発生します。 
試してみてください。
    lifecycle = bucket.get_bucket_lifecycle()
oss2.exceptionsを除きます。NoSuchLifecycle:
    print('lifecycle is not configured')
            

参考資料

  • ライフサイクルルールの完全なサンプルコードについては、『GitHub』をご参照ください。

  • ライフサイクルルールを設定するためのAPI操作の詳細については、「PutBucketLifecycle」をご参照ください。

  • ライフサイクルルールを照会するために呼び出すAPI操作の詳細については、「GetBucketLifecycle」をご参照ください。

  • ライフサイクルルールをクリアするためのAPI操作の詳細については、「DeleteBucketLifecycle」をご参照ください。