Cette rubrique explique comment utiliser le SDK Python V2 pour gérer les règles de cycle de vie d'un bucket.
Informations générales
Dans OSS, toutes les données téléchargées ne nécessitent pas un accès fréquent. Toutefois, pour des raisons de conformité ou d'archivage, certaines données doivent être conservées en stockage froid. Selon vos besoins métier, choisissez l'une des options suivantes :
Règles de cycle de vie basées sur la dernière date de modification : si les données n'ont pas été modifiées depuis longtemps et qu'il n'est plus nécessaire de les conserver, utilisez ce type de règle pour supprimer les données par lots ou convertir leur classe de stockage en une classe de stockage froid afin de libérer de l'espace.
Règles de cycle de vie basées sur la dernière date d'accès : activez ce type de règle pour permettre à OSS de surveiller automatiquement les modèles d'accès aux données. OSS identifie les données non consultées depuis longtemps et les convertit vers une classe de stockage froid plus économique. Ce processus met en œuvre le nivellement automatique du stockage (Automatic Storage Tiering) et réduit les coûts de stockage.
Précautions
Avant de configurer une règle de cycle de vie basée sur la dernière date de modification ou la dernière date d'accès, assurez-vous de bien comprendre cette fonctionnalité. Pour plus d'informations, consultez Règles de cycle de vie basées sur la dernière date de modification et Règles de cycle de vie basées sur la dernière date d'accès.
L'exemple de code de cette rubrique utilise la région Chine (Hangzhou), dont l'ID est
cn-hangzhou. Par défaut, un endpoint public est utilisé. Si vous souhaitez accéder à OSS depuis d'autres services Alibaba Cloud situés dans la même région que votre bucket OSS, utilisez un endpoint interne. Pour plus d'informations sur les régions et endpoints pris en charge par OSS, consultez Régions et endpoints OSS.Pour définir une règle de cycle de vie, vous devez disposer de l'autorisation
oss:PutBucketLifecycle. Pour afficher les règles de cycle de vie, vous devez disposer de l'autorisationoss:GetBucketLifecycle. Pour supprimer toutes les règles de cycle de vie, vous devez disposer de l'autorisationoss:DeleteBucketLifecycle. Pour plus d'informations sur la manière d'effectuer ces opérations, consultez Accorder des autorisations personnalisées à un utilisateur RAM.
Définir des règles de cycle de vie
L'exemple de code suivant illustre la définition de règles de cycle de vie basées sur la dernière date de modification et la dernière date d'accès. Pour modifier une ou plusieurs règles de cycle de vie après leur configuration, consultez Comment modifier la configuration d'une ou plusieurs règles de cycle de vie ?
Convertir la classe de stockage des objets selon une politique utilisant la dernière date de modification
L'exemple de code suivant montre comment définir une règle de cycle de vie pour un bucket afin de convertir la classe de stockage des objets en fonction de leur dernière date de modification.
import argparse
import alibabacloud_oss_v2 as oss
# Create a command-line argument parser to receive user-entered parameters.
parser = argparse.ArgumentParser(description="put bucket lifecycle sample")
# Add the --region command-line argument, which specifies the region where the bucket is located. This argument is required.
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# Add the --bucket command-line argument, which specifies the name of the bucket. This argument is required.
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# Add the --endpoint command-line argument, which specifies the domain name that other services can use to access OSS. This argument is optional.
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
def main():
# Parse command-line arguments.
args = parser.parse_args()
# Load credentials (AccessKey ID and AccessKey secret) from environment variables.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Load the default configurations of the SDK.
cfg = oss.config.load_default()
# Set the credentials provider.
cfg.credentials_provider = credentials_provider
# Set the region where the bucket is located.
cfg.region = args.region
# If a custom endpoint is provided by the user, set it in the configuration.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Initialize the OSS client using the configuration object.
client = oss.Client(cfg)
result = client.put_bucket_lifecycle(oss.PutBucketLifecycleRequest(
bucket=args.bucket,
lifecycle_configuration=oss.LifecycleConfiguration(
rules=[oss.LifecycleRule(
# Specify lifecycle rule rule1. In this rule, objects that have the prefix foo/ and the tag k1:v1 are converted to the Infrequent Access (IA) storage class 30 days after they are last modified.
id='rule1',
status='Enabled',
prefix='foo/',
transitions=[oss.LifecycleRuleTransition(
days=30,
storage_class=oss.StorageClassType.IA,
is_access_time=False, # Set to false, which indicates that the policy is based on the last modified time.
)],
tags=[oss.Tag(
key='k1',
value='v1',
)],
), oss.LifecycleRule(
# Specify lifecycle rule rule2. In this rule, for objects that have the prefix dir/, delete markers are automatically deleted if the objects are in a versioning-enabled bucket and have only delete markers. Non-current versions of objects expire and are deleted after 30 days. Non-current versions of objects are converted to the IA storage class after 10 days.
id='rule2',
status='Enabled',
prefix='dir/',
expiration=oss.LifecycleRuleExpiration(
expired_object_delete_marker=True
),
noncurrent_version_expiration=oss.NoncurrentVersionExpiration(
noncurrent_days=30,
),
noncurrent_version_transitions=[oss.NoncurrentVersionTransition(
noncurrent_days=10,
storage_class=oss.StorageClassType.IA,
is_access_time=False,
)],
)]
),
))
# Print the status code and request ID of the operation.
print(f'status code: {result.status_code}, ' # The HTTP status code, which indicates whether the request is successful.
f'request id: {result.request_id}') # The request ID, which is used to track request logs and for debugging.
if __name__ == "__main__":
# The program entry point that calls the main function to execute the logic.
main()
Convertir la classe de stockage des objets sans préfixe ni tag spécifique selon une politique utilisant la dernière date de modification
L'exemple de code suivant illustre la conversion des objets d'un bucket vers la classe de stockage Infrequent Access 30 jours après leur dernière modification. Cette règle s'applique aux objets qui répondent aux exigences de taille spécifiées, ne possèdent pas le préfixe log et n'ont pas de tag avec la clé key1 et la valeur value1.
import argparse
import datetime
import alibabacloud_oss_v2 as oss
# Create a command-line argument parser to receive user-entered parameters.
parser = argparse.ArgumentParser(description="put bucket lifecycle sample")
# Add the --region command-line argument, which specifies the region where the bucket is located. This argument is required.
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# Add the --bucket command-line argument, which specifies the name of the bucket. This argument is required.
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# Add the --endpoint command-line argument, which specifies the domain name that other services can use to access OSS. This argument is optional.
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
def main():
# Parse command-line arguments.
args = parser.parse_args()
# Load credentials (AccessKey ID and AccessKey secret) from environment variables.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Load the default configurations of the SDK.
cfg = oss.config.load_default()
# Set the credentials provider.
cfg.credentials_provider = credentials_provider
# Set the region where the bucket is located.
cfg.region = args.region
# If a custom endpoint is provided by the user, set it in the configuration.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Initialize the OSS client using the configuration object.
client = oss.Client(cfg)
result = client.put_bucket_lifecycle(oss.PutBucketLifecycleRequest(
bucket=args.bucket,
lifecycle_configuration=oss.LifecycleConfiguration(
rules=[oss.LifecycleRule(
# Specify lifecycle rule rule1. In this rule, objects that have the prefix logs/ and a size between 500 bytes and 1,000 bytes are converted to the Infrequent Access (IA) storage class 30 days after they are last modified. This rule does not apply to objects that also have the prefix logs/log and the tag key:key1 and value:value1.
id='rule1',
status='Enabled',
prefix='logs/',
transitions=[oss.LifecycleRuleTransition(
days=30,
storage_class=oss.StorageClassType.IA,
is_access_time=False, # Set to false, which indicates that the policy is based on the last modified time.
)],
filter=oss.LifecycleRuleFilter(
object_size_greater_than=500,
object_size_less_than=1000,
filter_not=[oss.LifecycleRuleNot(
prefix='logs/log',
tag={
'key': 'key1',
'value': 'value1',
},
)],
)
)]
),
))
# Print the status code and request ID of the operation.
print(f'status code: {result.status_code}, ' # The HTTP status code, which indicates whether the request is successful.
f'request id: {result.request_id}') # The request ID, which is used to track request logs and for debugging.
if __name__ == "__main__":
# The program entry point that calls the main function to execute the logic.
main()
Convertir la classe de stockage des objets selon une politique utilisant la dernière date d'accès
L'exemple de code suivant montre comment définir une règle de cycle de vie pour un bucket afin de convertir la classe de stockage des objets en fonction de leur dernière date d'accès.
import argparse
import datetime
import alibabacloud_oss_v2 as oss
parser = argparse.ArgumentParser(description="put bucket lifecycle sample")
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
def main():
args = parser.parse_args()
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
cfg.region = args.region
if args.endpoint is not None:
cfg.endpoint = args.endpoint
client = oss.Client(cfg)
result = client.put_bucket_lifecycle(oss.PutBucketLifecycleRequest(
bucket=args.bucket,
lifecycle_configuration=oss.LifecycleConfiguration(
rules=[
oss.LifecycleRule(
id='rule1',
status='Enabled',
prefix='data/',
transitions=[oss.LifecycleRuleTransition(
days=200,
storage_class=oss.StorageClassType.IA,
is_access_time=True,
return_to_std_when_visit=False
)]
),
oss.LifecycleRule(
id='rule2',
status='Enabled',
prefix='log/',
transitions=[
oss.LifecycleRuleTransition(
days=120,
storage_class=oss.StorageClassType.IA,
is_access_time=True,
return_to_std_when_visit=False
),
oss.LifecycleRuleTransition(
days=250,
storage_class=oss.StorageClassType.ARCHIVE
# If is_access_time is not set, the rule is based on the last modified time by default.
)
]
)
]
)
))
print(f'status code: {result.status_code}, '
f'request id: {result.request_id}')
if __name__ == "__main__":
main()
Afficher les règles de cycle de vie
L'exemple de code suivant illustre l'affichage des règles de cycle de vie.
import argparse
import alibabacloud_oss_v2 as oss
# Create a command-line argument parser to receive user-entered parameters.
parser = argparse.ArgumentParser(description="get bucket lifecycle sample")
# Add the --region command-line argument, which specifies the region where the bucket is located. This argument is required.
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# Add the --bucket command-line argument, which specifies the name of the bucket. This argument is required.
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# Add the --endpoint command-line argument, which specifies the domain name that other services can use to access OSS. This argument is optional.
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
def main():
# Parse command-line arguments.
args = parser.parse_args()
# Load credentials (AccessKey ID and AccessKey secret) from environment variables.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Load the default configurations of the SDK.
cfg = oss.config.load_default()
# Set the credentials provider.
cfg.credentials_provider = credentials_provider
# Set the region where the bucket is located.
cfg.region = args.region
# If a custom endpoint is provided by the user, set it in the configuration.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Initialize the OSS client using the configuration object.
client = oss.Client(cfg)
# Call the get_bucket_lifecycle method to obtain the lifecycle rules of the bucket.
result = client.get_bucket_lifecycle(
oss.GetBucketLifecycleRequest(
bucket=args.bucket, # Specify the name of the destination bucket.
)
)
# Print the status code and request ID of the operation.
print(f'status code: {result.status_code}, ' # The HTTP status code, which indicates whether the request is successful.
f'request id: {result.request_id}') # The request ID, which is used to track request logs and for debugging.
# If the returned collection of lifecycle rules contains rules, print the details of each rule one by one.
if result.lifecycle_configuration.rules: # Check whether lifecycle rules exist.
for r in result.lifecycle_configuration.rules: # Traverse all rules.
print(f'rule: {r}') # Print the content of each rule.
if __name__ == "__main__":
# The program entry point that calls the main function to execute the logic.
main()
Supprimer toutes les règles de cycle de vie
L'exemple de code suivant montre comment supprimer toutes les règles de cycle de vie d'un bucket nommé examplebucket. Si vous souhaitez supprimer une ou plusieurs règles de cycle de vie, consultez Comment supprimer une ou plusieurs règles de cycle de vie ?
import argparse
import alibabacloud_oss_v2 as oss
# Create a command-line argument parser to receive user-entered parameters.
parser = argparse.ArgumentParser(description="delete bucket lifecycle sample")
# Add the --region command-line argument, which specifies the region where the bucket is located. This argument is required.
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# Add the --bucket command-line argument, which specifies the name of the bucket. This argument is required.
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# Add the --endpoint command-line argument, which specifies the domain name that other services can use to access OSS. This argument is optional.
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
def main():
# Parse command-line arguments.
args = parser.parse_args()
# Load credentials (AccessKey ID and AccessKey secret) from environment variables.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Load the default configurations of the SDK.
cfg = oss.config.load_default()
# Set the credentials provider.
cfg.credentials_provider = credentials_provider
# Set the region where the bucket is located.
cfg.region = args.region
# If a custom endpoint is provided by the user, set it in the configuration.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Initialize the OSS client using the configuration object.
client = oss.Client(cfg)
# Call the delete_bucket_lifecycle method to delete the lifecycle rules of the bucket.
result = client.delete_bucket_lifecycle(
oss.DeleteBucketLifecycleRequest(
bucket=args.bucket, # Specify the name of the destination bucket.
)
)
# Print the status code and request ID of the operation.
print(f'status code: {result.status_code}, ' # The HTTP status code, which indicates whether the request is successful.
f'request id: {result.request_id}') # The request ID, which is used to track request logs and for debugging.
if __name__ == "__main__":
# The program entry point that calls the main function to execute the logic.
main()
Références
Pour obtenir l'exemple de code complet permettant de définir une règle de cycle de vie, consultez put_bucket_lifecycle.py.
Pour obtenir l'exemple de code complet permettant d'afficher les règles de cycle de vie, consultez get_bucket_lifecycle.py.
Pour obtenir l'exemple de code complet permettant de supprimer toutes les règles de cycle de vie, consultez delete_bucket_lifecycle.py.