Object Storage Service (OSS) ofrece diversas clases de almacenamiento para cubrir distintos escenarios, desde datos de acceso frecuente hasta datos fríos: Standard, Infrequent Access (IA), Archive, Cold Archive y Deep Cold Archive. En OSS, una vez que se crea un objeto, su contenido no se puede modificar. Si necesita cambiar la clase de almacenamiento de un objeto, utilice el método Bucket.CopyObject para copiarlo y generar uno nuevo con la clase de almacenamiento deseada.
Notas
En este tema se utiliza el endpoint público de la región China (Hangzhou). Si accede a OSS desde otros servicios de Alibaba Cloud ubicados en la misma región, use un endpoint interno. Para obtener más información sobre las regiones y los endpoints de OSS, consulte Regions and endpoints.
Las credenciales de acceso se obtienen de variables de entorno. Para conocer cómo configurar estas credenciales, consulte Configure access credentials using OSS SDK for Python 1.0.
Este tema muestra cómo crear una instancia de OSSClient con un endpoint de OSS. Para configuraciones alternativas, como usar un dominio personalizado o autenticarse con credenciales de Security Token Service (STS), consulte Initialization.
Para cambiar la clase de almacenamiento de un objeto, es obligatorio contar con los permisos
oss:GetObject,oss:PutObjectyoss:RestoreObject. Para obtener más información, consulte Grant a custom policy.
Ejemplos
Si cambia la clase de almacenamiento de un objeto IA, Archive, Cold Archive o Deep Cold Archive, o si lo elimina antes de que transcurra la duración mínima de almacenamiento, se le cobrará por el uso del almacenamiento correspondiente al tiempo inferior a dicha duración mínima. Para obtener más información, consulte How am I charged for objects whose storage duration is less than the minimum storage duration?.
Cambio de la clase de almacenamiento de un objeto de Standard o IA a Archive, Cold Archive o Deep Cold Archive
A continuación se muestra un ejemplo de código que convierte la clase de almacenamiento de un objeto de Standard o IA a Archive, Cold Archive o Deep Cold Archive:
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import os
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the bucket region (for example: https://oss-cn-hangzhou.aliyuncs.com).
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of your bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt.
# Make sure that the storage class of the object is Standard or IA.
object_name = 'exampledir/exampleobject.txt'
# Convert the storage class of the object to Archive by setting the x-oss-storage-class header to oss2.BUCKET_STORAGE_CLASS_ARCHIVE.
headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_ARCHIVE}
# Convert the storage class of the object to Cold Archive by setting the x-oss-storage-class header to oss2.BUCKET_STORAGE_CLASS_COLD_ARCHIVE.
# headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_COLD_ARCHIVE}
# Convert the storage class of the object to Deep Cold Archive by setting the x-oss-storage-class header to BUCKET_STORAGE_CLASS_DEEP_COLD_ARCHIVE
# headers = {'x-oss-storage-class': oss2.models.BUCKET_STORAGE_CLASS_DEEP_COLD_ARCHIVE}
# Convert the storage class of the object.
bucket.copy_object(bucket.bucket_name, object_name, object_name, headers)
Cambio de la clase de almacenamiento de un objeto de Archive a Standard o IA
El siguiente fragmento de código ilustra cómo convertir la clase de almacenamiento de un objeto de Archive a Standard o IA:
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import os
import time
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the bucket region (for example: https://oss-cn-hangzhou.aliyuncs.com).
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of your bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt.
# Make sure that the storage class of the object is Archive.
object_name = 'exampledir/exampleobject.txt'
# Obtain the object metadata.
meta = bucket.head_object(object_name)
# Restore the object. The amount of time required to restore an object varies based on the size of the object.
if meta.resp.headers['x-oss-storage-class'] == oss2.BUCKET_STORAGE_CLASS_ARCHIVE:
bucket.restore_object(object_name)
while True:
meta = bucket.head_object(object_name)
if meta.resp.headers['x-oss-restore'] == 'ongoing-request="true"':
time.sleep(5)
else:
break
# Convert the storage class of the object to Standard by setting the x-oss-storage-class header to oss2.BUCKET_STORAGE_CLASS_STANDARD.
headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_STANDARD}
# Convert the storage class of the object to IA by setting the x-oss-storage-class header to oss2.BUCKET_STORAGE_CLASS_IA.
# headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_IA}
# Convert the storage class of the object.
bucket.copy_object(bucket.bucket_name, object_name, object_name, headers)
Cambio de la clase de almacenamiento de un objeto de Cold Archive a Standard o IA
A continuación se muestra un ejemplo de código que convierte la clase de almacenamiento de un objeto de Cold Archive a Standard o IA:
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import os
import time
from oss2.models import RESTORE_TIER_EXPEDITED, RestoreJobParameters
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the bucket region (for example: https://oss-cn-hangzhou.aliyuncs.com).
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of your bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt.
# Make sure that the storage class of the object is Cold Archive.
object_name = 'exampledir/exampleobject.txt'
# Obtain the object metadata.
meta = bucket.head_object(object_name)
# Restore the object.
if meta.resp.headers['x-oss-storage-class'] == oss2.BUCKET_STORAGE_CLASS_COLD_ARCHIVE:
# Specify the restoration priority. RESTORE_TIER_EXPEDITED specifies that the object is restored within 1 hour.
job_parameters = RestoreJobParameters(RESTORE_TIER_EXPEDITED)
# Specify the duration for which the object can remain in the restored state. Unit: days.
restore_config = oss2.models.RestoreConfiguration(days=5, job_parameters=job_parameters)
bucket.restore_object(object_name, input=restore_config)
while True:
meta = bucket.head_object(object_name)
if meta.resp.headers['x-oss-restore'] == 'ongoing-request="true"':
time.sleep(5)
else:
break
# Convert the storage class of the object to Standard by setting the x-oss-storage-class header to oss2.BUCKET_STORAGE_CLASS_STANDARD.
headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_STANDARD}
# Convert the storage class of the object to IA by setting the x-oss-storage-class header to oss2.BUCKET_STORAGE_CLASS_IA.
# headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_IA}
# Convert the storage class of the object.
bucket.copy_object(bucket.bucket_name, object_name, object_name, headers)
Referencias
Para obtener más información sobre la operación de API que permite cambiar la clase de almacenamiento de un objeto, consulte CopyObject.