IBM Cloud Docs
Using storage classes

Using storage classes

Not all data feeds active workloads. Archival data might sit untouched for long periods of time. For less active workloads, you can create buckets with different storage classes. Objects that are stored in these buckets incur charges on a different schedule than standard storage.

This feature is not currently supported in Object Storage for Satellite. Learn more.

What are the classes?

You can choose from four storage classes:

  • Smart Tier can be used for any workload, especially dynamic workloads where access patterns are unknown or difficult to predict. Smart Tier provides a simplified pricing structure and automatic cost optimization by classifying the data into "hot", "cool", and "cold" tiers based on monthly usage patterns. All data in the bucket is then billed at the lowest applicable rate. There are no threshold object sizes or storage periods, and there are no retrieval fees. For a detailed explanation of how it works, see the billing topic.
  • Standard is used for active workloads, with no charge for data retrieved (other than the cost of the operational request itself).
  • Vault is used for cool workloads where data is accessed less than once a month - an extra retrieval charge ($/GB) is applied each time data is read. The service includes a minimum threshold for object size and storage period consistent with the intended use of this service for cooler, less-active data.
  • Cold Vault is used for cold workloads where data is accessed every 90 days or less - a larger extra retrieval charge ($/GB) is applied each time data is read. The service includes a longer minimum threshold for object size and storage period consistent with the intended use of this service for cold, inactive data.

Flex has been replaced by Smart Tier for dynamic workloads. Flex users can continue to manage their data in existing Flex buckets, although no new Flex buckets may be created. Existing users can reference pricing information here.

For more information, see the pricing table at ibm.com.

The Active storage class is only used with One Rate plans, and cannot be used in a Standard plan instance.

For more information about how to create buckets with different storage classes, see the API reference.

For each storage class, billing is based on aggregated usage across all buckets at the instance level. For example, for Smart Tier, the billing is based on usage across all Smart Tier buckets in a given instance - not on the individual buckets.

How do I create a bucket with a different storage class?

When creating a bucket in the console, there is a menu that allows for storage class selection.

When creating buckets programmatically, it is necessary to specify a LocationConstraint that corresponds with the endpoint used. Valid provisioning codes for LocationConstraint are
   BR São Paulo br-sao-standard / br-sao-vault / br-sao-cold / br-sao-smart
   US Geo us-standard / us-vault / us-cold / us-smart
   US East us-east-standard / us-east-vault / us-east-cold / us-east-smart
   US South us-south-standard / us-south-vault/ us-south-cold/ us-south-smart
   EU Geo eu-standard / eu-vault / eu-cold / eu-smart
   EU Great Britain eu-gb-standard / eu-gb-vault / eu-gb-cold / eu-gb-smart
   EU Germany eu-de-standard / eu-de-vault / eu-de-cold / eu-de-smart
   EU Spain eu-es-standard / eu-es-vault / eu-es-cold / eu-es-smart
   AP Geo ap-standard / ap-vault / ap-cold / ap-smart
   AP Tokyo jp-tok-standard / jp-tok-vault / jp-tok-cold / jp-tok-smart
   AP Osaka jp-osa-standard / jp-osa-vault / jp-osa-cold / jp-osa-smart
   AP Australia au-syd-standard / au-syd-vault / au-syd-cold / au-syd-smart
   CA Toronto ca-tor-standard / ca-tor-vault / ca-tor-cold / ca-tor-smart
   Amsterdam ams03-standard / ams03-vault / ams03-cold / ams03-smart
   Chennai che01-standard / che01-vault / che01-cold / che01-smart
   Milan mil01-standard / mil01-vault / mil01-cold / mil01-smart
   Montréal mon01-standard / mon01-vault / mon01-cold / mon01-smart
   Paris par01-standard / par01-vault / par01-cold / par01-smart
   San Jose sjc04-standard / sjc04-vault / sjc04-cold / sjc04-smart
   Singapore sng01-standard / sng01-vault / sng01-cold / sng01-smart

For more information about endpoints, see Endpoints and storage locations.

Using the REST API, Libraries, and SDKs

Several new APIs have been introduced to the IBM COS SDKs to provide support for applications working with retention policies. Select a language (curl, Java, JavaScript, Go, or Python) at the beginning of this page to view examples that use the appropriate COS SDK.

All code examples assume the existence of a client object that is called cos that can call the different methods. For details on creating clients, see the specific SDK guides.

Create a bucket with a storage class

public static void createBucket(String bucketName) {
    System.out.printf("Creating new bucket: %s\n", bucketName);
    _cos.createBucket(bucketName, "us-vault");
    System.out.printf("Bucket: %s created!\n", bucketName);
}
function createBucket(bucketName) {
    console.log(`Creating new bucket: ${bucketName}`);
    return cos.createBucket({
        Bucket: bucketName,
        CreateBucketConfiguration: {
          LocationConstraint: 'us-standard'
        },
    }).promise()
    .then((() => {
        console.log(`Bucket: ${bucketName} created!`);
    }))
    .catch((e) => {
        console.error(`ERROR: ${e.code} - ${e.message}\n`);
    });
}
def create_bucket(bucket_name):
    print("Creating new bucket: {0}".format(bucket_name))
    try:
        cos.Bucket(bucket_name).create(
            CreateBucketConfiguration={
                "LocationConstraint":COS_BUCKET_LOCATION
            }
        )
        print("Bucket: {0} created!".format(bucket_name))
    except ClientError as be:
        print("CLIENT ERROR: {0}\n".format(be))
    except Exception as e:
        print("Unable to create bucket: {0}".format(e))
func main() {

    // Create client
    sess := session.Must(session.NewSession())
    client := s3.New(sess, conf)

    // Bucket Names
    newBucket := "<NEW_BUCKET_NAME>"

    input := &s3.CreateBucketInput{
        Bucket: aws.String(newBucket),
        CreateBucketConfiguration: &s3.CreateBucketConfiguration{
            LocationConstraint: aws.String("us-cold"),
        },
    }
    client.CreateBucket(input)

    d, _ := client.ListBuckets(&s3.ListBucketsInput{})
    fmt.Println(d)
}
curl -X "PUT" "https://(endpoint)/(bucket-name)"
 -H "Content-Type: text/plain; charset=utf-8"
 -H "Authorization: Bearer (token)"
 -H "ibm-service-instance-id: (resource-instance-id)"
 -d "<CreateBucketConfiguration>
       <LocationConstraint>(provisioning-code)</LocationConstraint>
     </CreateBucketConfiguration>"

It isn't possible to change the storage class of a bucket once the bucket is created. If objects need to be reclassified, it's necessary to move the data to another bucket with the wanted storage class.