AWS has gone through many growth spurts since this question was first asked. The Serverless platform was introduced which incorporated AWS CLI functionalities. API gateway now incorporates App Sync, security and Lambda. Now the best and easiest way is a service called AWS Amplify. It uses all the aforementioned technologies with the integration of cloud formation templates. Some of the great features include Hosting, Authorization, Storage and API's using REST or GraphQL.
In just a few lines of code add Auth flow. In 10 minutes you can set up a backend with S3 pictures and an S3 Album straight out of the box.
Check out Amplify Storage, Amplify S3 and S3Album here. They offer support for many languages. I personally work with JavaScript in React and was able to import S3Album, configure storage in one line and display it within the render method like this:
import './App.css';
import Amplify from 'aws-amplify';
import { S3Album, withAuthenticator, S3Image } from 'aws-amplify-react';
Amplify.configure(awsmobile);
Class App extends Component {
render() {
return (
<div className="App">
<S3Album path="pictures/" picker />
</div>
);
}
}
export default withAuthenticator(App, true);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>