The simplest definition of AWS is that it's a service provided by Amazon, where you can buy virtual machines, databases, message queues, RESTful API endpoints, and all kinds of software products hosted on their cloud platform. To fully appreciate AWS, we will need to cover some of the major services that are offered on the platform. We will then dig deeper to learn how to reap the power of Go to build applications capable of utilizing the services AWS provides via its cloud APIs.
- Elastic Compute Cloud (EC2): The Elastic Compute Cloud (EC2) is one of the most popular services provided by AWS. It can simply be described as a service to be used when needing to spin new server instances on AWS. EC2 is special in that it makes the process of starting servers and allocating resources practically easy for users and developers. EC2 allows auto-scaling, which means that applications can automatically scale up and down based on the user's needs. The service supports multiple setups and operating systems.
- Simple Storage Service (S3): S3 allows developers to store different types of data for later retrieval and data analysis. S3 is another popular AWS service that is used by numerous developers all over the world. Typically, developers store images, photos, videos, and similar types of data on S3. The service is reliable, scales well, and easy to use. The use cases for S3 are plentiful; it can be used for web sites, mobile applications, IOT sensors, and more.
- Simple Queue Service (SQS): SQS is a hosted message queue service provided by AWS. In a nutshell, we can describe a message queue as a piece of software that can reliably receive messages, queue them, and deliver them between other applications. SQS is a scalable, reliable, and distributed hosted message queue.
- Amazon API Gateway: Amazon API gateway is a hosted service that enables developers to create secure web APIs at scale. It not only allows you to create and publish APIs, but also exposes sophisticated features such as access control, authorization, API versioning, and status monitoring.
- DynamoDB: DynamoDB is a NoSQL database that is hosted in AWS and provided as a service. The database is flexible, reliable, and scalable with a latency of only few milliseconds. NoSQL is a term used to describe databases that are nonrelational and enjoy high performance. A nonrelational database is a type of database that doesn't use tables with relations to store data. DynamoDB makes use of two data models: a document store and a key-value store. A document store database stores data in a collection of document files, whereas a key-value store puts data in simple key value pairs. In the next chapter, you will learn how to build Go applications in AWS that are capable of utilizing the power of DynamoDB.
- AWS SDK for Go: The AWS SDK for Go is a collection of Go libraries that empower developers to write applications that can interact with the AWS ecosystem. Those libraries are the tools we'll utilize to make use of the different AWS services that we have mentioned so far, such as EC2, S3, DynamoDB, and SQS.
Throughout this chapter and the next one, we will be covering those technologies in deeper detail. Every single topic we will discuss in this chapter is massive and can be covered in entire books. So, instead of covering every single aspect of each AWS service, we will provide practical insights into each service and how to utilize them as a whole to build powerful production grade applications. Before diving deep into each AWS service, let's cover some general concepts in the AWS world.