AWS vs OCI Object Storage options and comparison
Tags: aws, oci, cloud, objectstorage
Published: 2021-11-04 19:49:23

We are starting putting some context:
1. **AWS** - Amazon Web Service
2. **OCI** - Oracle Cloud Infrastructure
3. **Object Storage** - data managed as object, where each of this object has a unique identifier and you access it using HTTP protocol.

___________________________________________________________

###What does Object Storage Refers to?

Object Storage has been one of the pillars of cloud infrastructure, and has help to decouple software from servers and file systems. It represents something similar a flat File System, so you will have virtually little limitations, this is ideal to store massive amount of data, we are talking about TBs and TBs of data, and you will be able to access each object using unique identifiers.

Other benefit of object storage is that you can store the data along with metadata for that object, you can apply certain actions based on that metadata. On the transport layer, there is no need for extra equipment, access is through HTTP protocol and using REST APIs, so basically you can **GET** an object or **PUT** an object inside a storage container (most of the cloud providers call this buckets).

___________________________________________________________

###AWS S3 vs OCI Object and archive Storage

Now, each cloud provider provides a flavor of this object storage services, here we are going to see a comparison between AWS S3 and OCI object and archive storage, and the end of this entry we see how we can make a simple operation on both using the CLI.

|Dimension    | AWS         | OCI         |
| ----------- | ----------- | ----------- |
| **Container**      | S3 are deployed inside a region      |OCI storage buckets are deployed inside compartments         |
| **Metadata tags**   | yes, you can assign metadata tags to objects        |yes, you can assign metadata tags to objects        |
| **Object Size**   | From 0B to 5Terabytes        |As small as 0B or as large as 10 TiB        |
| **Multipart upload**   | Recommended for objects bigger than 100MB        |Recommended for objects bigger than 100MB        |
| **API Endpoint**   | AWS S3 buckets are accessed using s3 API endpoints similar to this `http://bucket-name.s3-region.amazonaws.com`        | It can be accessed through a dedicated regional API endpoint, The Native API endpoints are similar to this `https://objectstorage.<region-identifier>.oraclecloud.com`         |
| **Storage Tiers**   | S3 Standard, S3 Standard-InfrequentAccess, S3 One Zone-Infrequent Access for long-lived Amazon S3 Glacier and Amazon S3 Glacier Deep Archive         |Standard Tier, Infrequent Access, Archive        |
| **Auto Tiering**   | Yes, called intelligent-tiering        |Yes, called Auto-Tiering        |
| **Reliability**   | The S3 Standard storage class is designed for 99.99% availability, the S3 Standard-IA storage class and the S3 Intelligent-Tiering storage class are designed for 99.9% availability, the S3 One Zone-IA storage class is designed for 99.5% availability, and the S3 Glacier and S3 Glacier Deep Archive class are designed for 99.99% availability and an SLA of 99.9%.        |The service is designed for 99.9% availability. Multiple safeguards have been built into the platform to monitor the health of the service to guard against unplanned downtime. *It makes no distinction between tiers apparently*        |
| **Durability**   | Amazon S3 Standard, S3 Standard–IA, S3 Intelligent-Tiering, S3 One Zone-IA, S3 Glacier, and S3 Glacier Deep Archive are all designed to provide 99.999999999% (11 9's) of data durability of objects over a given year        |Oracle Object Storage is designed to be highly durable, providing 99.999999999% (Eleven 9's) of annual durability. It achieves this by storing each object redundantly across three servers in different availability domains for regions with multiple availability domains, and in different fault domains in regions with a single availability domain.        |
| **Versioning**   | yes, enabled at the bucket level, S3 preserves existing objects anytime you perform a PUT, POST, COPY, or DELETE operation on them        |Yes, enabled on a bucket, data is not lost when an object is overwritten or when a versioning-unaware delete operation is performed. In both cases, the previous contents of the object are saved as a previous version of the object.       |
| **Data access control**   | Using IAM policies, bucket policies , Access control Lists, and Query String Authentication can be defined at the object level       |IAM policies and set of permissions assigned to a group, only at the compartment or bucket level not the object level        |
| **Encryption**   | Server side using S3 key, using customer key or using KMS service, also support Client side encryption at the object, bucket level        |server side encryption with customer provider key or master key stored on VAULT, also client side encryption is supported at the object and metadata level        |
| **Auditing**   | Yes you can audit access to s3 bucket using cloud trail bucket and object related      |yes, Oracle Cloud Infrastructure Object Storage supports logging for bucket-related events, but not for object-related events.        |
| **Cost**   | For example, S3 standard, $0.023 per GB per month first 50TB*        |For example, for object storage standard $0.0255 per GB per Month *       |

**NOTES**
1. **OCI Compartment** is a collection of related resources, as for example compute instances, buckets, etc. typically deployed in a region. It can only be accessed by a group that has access to this compartment. Each account has a root compartment, and you can create child compartments.
2. **Multipart Upload** allows you to upload a single object as a set of parts. It must be applied using the SDK.
3. **Reliability** is the ability of a workload to perform its intended function correctly and consistently.
4. **Durability** is the probability that the object will remain intact and accessible after a period of one year.

'*' Price obtained at the date of publishing this entry

___________________________________________________________

###Examples for getting an object

###AWS
In order to retrieve an object from an AWS S3 object your user must be enabled to `s3:GetObject` and `s3:GetBucket` on IAM policy for the bucket and objects inside of it.

And you can execute a command similar to:
```
aws s3 cp --region ${REGION} s3://${S3BUCKET}/${OBJECT_NAME} .
```

###OCI
For OCI there is a slightly different approach
You will need to generate either a Pre-Authenticated request for read and write from this bucket

Generate a .pem file on your local machine
copy your key into the API-keys for that bucket

and execute the following command:
```
oci os object get -bn test-interchange-bucket-20211125 --file 16286.jpeg --name 1628612.jpeg
```

Where:
* --file is the filename that will obtain on your local computer
* --name is the name of the object inside the bucket
* -bn is the bucket name

*You must execute the command from the folder where your .pem file is stored

**NOTE** this commands will be expanded on further entries


___________________________________________________________

###Sources:
[S3 FAQs](https://aws.amazon.com/s3/faqs/)
[OCI Object Storage FAQs](https://www.oracle.com/cloud/storage/object-storage/faq/)
[Oracle Cloud Storage Pricing](https://www.oracle.com/cloud/storage/pricing/)
[Amazon S3 pricing](https://aws.amazon.com/s3/pricing/?trkCampaign=acq_paid_search_brand&sc_channel=PS&sc_campaign=acquisition_LATAMO&sc_publisher=Google&sc_category=Storage&sc_country=LATAMO&sc_geo=LATAM&sc_outcome=acq&sc_detail=s3%20pricing&sc_content={ad%20group}&sc_matchtype=e&sc_segment=536393996125&sc_medium=ACQ-P|PS-GO|Brand|Desktop|SU|Storage|S3|LATAMO|EN|Sitelink&s_kwcid=AL!4422!3!536393996125!e!!g!!s3%20pricing&ef_id=CjwKCAjwiY6MBhBqEiwARFSCPg0xsUDrKjIrdNHlgZw7SREuh1Dmu-SqKHuqMD_eSSXUpB1OMxSygBoCaM0QAvD_BwE:G:s&s_kwcid=AL!4422!3!536393996125!e!!g!!s3%20pricing)
[Copy Files To Oracle OCI Cloud Object Storage From Command Line](https://eclipsys.ca/copy-files-to-oracle-oci-cloud-object-storage-from-command-line/)