What is the default way to upload files from a EC2 web server to a S3 bucket for content delivery?
The answer is rather dependent on the purpose. For instance, if your EC2 instance is running a PHP application, then using the PHP-SDK would be the best route. Some applications might find it useful to mount an S3 bucket as a local file-system (e.g. S3-fuse).
If however, you are simply trying to upload a file via the shell from EC2 to S3, I would recommend Tim Kay's aws script. It is a self-contained perl script that can run without installation, or can be installed to setup alias functions. Uploading a file to an existing bucket using this script amounts to the following:
s3put bucket_name/filename.ext /path/to/local/file/name.ext
It supports most of the features of AWS and is sufficiently verbose in its error messages to make debugging a problem fairly easy.
Here's a simple example to illustrate uploading directly to s3
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <h3>refresh the page after you've submitted to see your new image</h3> <div style="width:300px"> <form action="http://s3.amazonaws.com/dev.sente" method="post" enctype="multipart/form-data"> <fieldset> <input type="hidden" name="acl" value="public-read" /> <br /> <i>name of key:</i><input type="text" name="key" readonly="true" value="image.jpg" /> <br /> <input name="file" type="file" /> <br /> <input name="submit" value="Upload" type="submit" /> </fieldset> </form> </div> <br> <a href="http://s3.amazonaws.com/dev.sente/image.jpg">http://s3.amazonaws.com/dev.sente/image.jpg</a> <br> <a href="http://s3.amazonaws.com/dev.sente/image.jpg"><img src="http://s3.amazonaws.com/dev.sente/image.jpg"></a> </a> </body> </html>
copied from my answer to a similar question - here
In general if you're uploading files from an application to S3 for the purpose of setting up a CDN to use for that application you would want to first look and see if that application didn't already have the functionality or a plugin to do that. If you take Wordpress for instance there is the W3 Total Cache plugin that handles this for you very nicely. It is of course written in PHP and using the AWS API calls to handle the uploads/deletions when necessary.
If you're writing your own application then I would look for libraries that assist in communicating with AWS. For Python you would want to look at Boto for instance which allows you to interact with the AWS API seamlessly. As well you can always check out Amazon itself for information on the other SDK APIs that you could use.