Amazon S3

# Introduction
Amazon S3 is a secure, durable and highly-scalable objects storage built to retrieve and store data from anywhere or together with other AWS services.
### Amazon S3 characteristics
+ Durable: It provide durable infrastructure to store important data and it is designed to deliver 99.999999% durability.
+ Integrated: The data is stored redundantly across multiple facilities and across multiple device in each facility.
+ Low Cost: It is low cost with the pay-as-you-go model. We just pay for our usage.
+ Available: It is highly available designed for 99.99% availability of objects over a given year backed by SLA (Service Level Agreement) so that we can rely on it when we need it. It allows us to optimize the data across multiple regions, so that we can place the data inside s3 with specific regions.
+ Security: Amazon S3 provides comprehensive security and compliance capabilities to handle through data transfer over SSL (Secure Socket Layer) and variety of different options for encryption of the data.
+ High-Performance: Amazon S3 support multi-part uploads, enable us to maximize utilization of our upstream bandwidth when uploading objects or content into S3 and also very high performance in download and support high volumes of content access for objects store inside S3.

### Amazon S3 Concepts
+ Buckets: It is the containers for objects stored in S3. It organizes the amazon S3 namespace at the highest level. It also play a role in access control.
+ Objects: It is the fundamental entities stored in amazon S3. It consist of data and metadata. Data refer to entities stored in S3 bucket and metadata refer to a set of name-value pairs that describe the object. Object is uniquely identified within a bucket by a key (name) and version ID.
+ Regions: The geographical region where amazon S3 will store the buckets that we create.

### Amazon S3 Accessibility
+ Access via APIs: Amazon S3 supports REST API with SOAP over HTTP and HTTPS. We can make REST API calls directly from our code.
+ Access via SDK: Amazon S3 provides pre-built and maintained SDK. It support with multiple programming languages such as:
    + <b><a href="https://aws.amazon.com/documentation/sdk-for-cpp/">C++</a></b>
    + <b><a href="https://aws.amazon.com/documentation/sdk-for-java/">Java</a></b>
    + <b><a href="https://aws.amazon.com/documentation/sdk-for-javascript/">JavaScript</a></b>
    + <b><a href="https://aws.amazon.com/documentation/sdk-for-go/">Go</a></b>
    + <b><a href="https://aws.amazon.com/documentation/sdk-for-net/">.NET</a></b>
    + <b><a href="https://aws.amazon.com/documentation/sdk-for-php/">PHP</a></b>
    + <b><a href="https://boto3.readthedocs.org/en/latest/">Python (Boto 3)</a></b>
    + <b><a href="https://aws.amazon.com/documentation/sdk-for-ruby/">Ruby</a></b>

+ Access via AWS CLI: It is another mechanism that amazon S3 provide.
    + <b>Installation</b>
        + Window: download and run the <a href="https://s3.amazonaws.com/aws-cli/AWSCLI64.msi">64 bits</a> or <a href="https://s3.amazonaws.com/aws-cli/AWSCLI32.msi">32 bits</a> window installer.
        + Mac and Linux: Requires python 2.6.5 or higher. Install using pip. <pre>pip install awscli</pre>
   + <b>Usage</b>
        + The quickest way to start <pre>aws configure</pre>
        + View contents of S3 bucket in a directory based listing <pre>aws s3 ls s3://mybucket</pre>
        + Perform recursive uploads and downloads of multiple files in a single folder-level command. <pre>aws cp myfolder s3://mybucket/myfolder --recursive</pre>
        + Synchronize the contents of a local folder with a copy in an S3 bucket <pre>aws s3 sync myfolder s3://mybucket/myfolder --exclude * .tmp</pre>
        + Create Buckets <pre>aws s3 mb s3://bucket-name</pre>
        + Removing Buckets <pre>aws s3 rb s3://bucket-name</pre>
        + By default the buckets must be empty for the operation to be succeed. To remove the no-empty buckets, we need to include the force option. <pre>aws s3 rb s3://bucket-name --force</pre>

### Advantages and Disadvantages of AmazonS3
AmazonS3 also has its own advantages and disadvantages. Here are some of those.

+ Advantages
    + Storage is very inexpensive
    + Storage is flexible
    + Incredibly convenient
    + Very fast implementation
+ Disadvantages
    + S3 is basically UI-less. It's not User Friendly for beginner level of computer users.
    + Not all of every business might be comfortable with storing the data in the cloud. Example: Bank.
    + Transaction can be expensive. We pay for activity in addition to storage.
    + Must use Amazon Web Services API to do bulk uploads.
    + Two points of support.  You have to support your software and the AWS back end.

References:
<a href="https://www.datastorageinc.com/blog/amazon-web-services-storage-pros-and-cons-for-document-management">datastorageinc</a> 
<a href="https://www.slideshare.net/parn09/intro-to-amazon-s3-presentation">slideshare</a>