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

Object Storage Service:Lifecycle (Python SDK V1)

最終更新日:Nov 29, 2025

Object Storage Service (OSS) にアップロードされたすべてのデータが、頻繁なアクセスを必要とするわけではありません。一部のデータは、コンプライアンスやアーカイブ目的でコールドストレージに保管する必要があります。最終更新日時にもとづいてライフサイクルルールを設定し、バケット内で不要になったデータを一括削除できます。また、最終アクセス日時にもとづいてライフサイクルルールを設定し、自動的なストレージ階層化を実現してストレージコストを削減することも可能です。これにより、OSS はデータのアクセスパターンを自動的にモニターし、コールドデータを識別して、データを異なるストレージクラスに移行します。

注意事項

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

  • このトピックでは、アクセス認証情報は環境変数から取得します。アクセス認証情報の設定方法の詳細については、「OSS SDK for Python 1.0 を使用したアクセス認証情報の設定」をご参照ください。

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

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

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

以下のコードは、最終更新日時と最終アクセス日時にもとづいてライフサイクルルールを設定する方法の例を示しています。設定後に 1 つ以上のルールを変更する方法については、「1 つ以上のライフサイクルルール設定を変更するにはどうすればよいですか?」をご参照ください。

最終更新日時にもとづくストレージクラスの移行とオブジェクトの削除

以下のコードは、`examplebucket` バケットにライフサイクルルールを設定する例です。このルールは、一致したオブジェクトのストレージクラスを移行し、最終更新日時にもとづいて削除します。

# -*- 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)

最終更新日時にもとづき、特定のプレフィックスとタグを持たないオブジェクトのストレージクラスを移行

以下のコードは、フィルターノードで Not 要素を使用する例です。この例では、`examplebucket` バケットについて、`logs/not-prefix` プレフィックスと `key1:value1` タグを持つファイルを除くすべてのファイルが、最終更新日時から 30 日後に低頻度アクセスストレージクラスに移行されます。

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import LifecycleRule, BucketLifecycle, StorageTransition, LifecycleFilter, FilterNot, FilterNotTag

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

not_prefix = 'logs/not-prefix'
key = 'key1'
value = 'value1'
not_tag = FilterNotTag(key, value)
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(lifecycle)
print('Lifecycle rule set successfully. Status code: ' + str(result.status))

最終アクセス日時にもとづくストレージクラスの移行

以下のコードは、`examplebucket` バケットに最終アクセス日時にもとづいてストレージクラスを移行するライフサイクルルールを設定する例です。

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import LifecycleRule, BucketLifecycle, StorageTransition, NoncurrentVersionStorageTransition

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

# ライフサイクルルール 1 を指定します。このルールは、プレフィックス 'logs' を持ち、64 KB より大きいすべてのファイルを、最終アクセス日時から 30 日後に低頻度アクセスストレージクラスに移行します。これらのファイルが再度アクセスされた場合、低頻度アクセスストレージクラスに留まります。
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)]

# ライフサイクルルール 2 を指定します。このルールは、プレフィックス 'dir' を持ち、64 KB より大きいすべての非現行バージョンのファイルを、最終アクセス日時から 10 日後に低頻度アクセスストレージクラスに移行します。これらのファイルが再度アクセスされた場合、標準ストレージクラスに移行されます。
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(lifecycle)

print('Lifecycle rule set successfully. Status code: ' + str(result.status))

ライフサイクルルールの確認

以下のコードは、`examplebucket` バケットのライフサイクルルールを確認する方法の例です。

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 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)

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

for rule in lifecycle.rules:
    print('==========')
    # ルール ID を確認します。
    print('id:', rule.id)
    # ルールのプレフィックスを確認します。
    print('prefix:', rule.prefix)
    # ルールのステータスを確認します。
    print('status', rule.status)
    if rule.tagging is not None:
        # ルールのタグを確認します。
        print('tagging:', rule.tagging)

    if rule.abort_multipart_upload is not None:
        if rule.abort_multipart_upload.days is not 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)

    if rule.expiration is not None:
        if rule.expiration.days is not None:
            # 失効までの日数を確認します。
            print('expiration days:', rule.expiration.days)
        elif rule.expiration.expired_detete_marker is not None:
            # 期限切れの削除マーカーが自動的に削除されるかどうかを確認します。
            print('expiration expired_detete_marker:', rule.expiration.expired_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 = ''
        for storage_rule in rule.storage_transitions:
            if storage_rule.days is not None:
                storage_info += 'days={0}, storage_class={1} *** '.format(
                    storage_rule.days, storage_rule.storage_class)
            else:
                storage_info += 'created_before_date={0}, storage_class={1} *** '.format(
                    storage_rule.created_before_date, storage_rule.storage_class)
            # ライフサイクルルールが最終アクセス時間に基づいて設定されているかどうかを確認します。このチェックは Python SDK 2.16.1 以降でのみサポートされています。
            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('storage_transitions:', storage_info)

    if len(rule.noncurrent_version_sotrage_transitions) > 0:
        noncurrent_storage_info = ''
        for storage_rule in rule.noncurrent_version_sotrage_transitions:
            noncurrent_storage_info += 'days={0}, storage_class={1} *** '.format(
                storage_rule.noncurrent_days, storage_rule.storage_class)
            # オブジェクトが低頻度アクセスストレージクラスに移行された後、再度アクセスされたときに標準ストレージクラスに移行されるかどうかを確認します。このチェックは Python SDK 2.16.1 以降でのみサポートされています。
            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)

    if rule.noncurrent_version_expiration is not None:
        # オブジェクトの非現行バージョンの失効ルールを確認します。
        print('noncurrent_version_expiration days:', rule.noncurrent_version_expiration.noncurrent_days)

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

以下のコードは、`examplebucket` バケットのすべてのライフサイクルルールを削除する方法の例です。1 つ以上の特定のライフサイクルルールを削除する方法については、「1 つ以上のライフサイクルルールを削除するにはどうすればよいですか?」をご参照ください。

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

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

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

# ライフサイクルルールを再度表示すると、例外がスローされます。
try:
    lifecycle = bucket.get_bucket_lifecycle()
except oss2.exceptions.NoSuchLifecycle:
    print('lifecycle is not configured')
            

関連ドキュメント

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

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

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

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