What every Software Engineer should know before to start with AWS — Part 1

Yury Niño
5 min readAug 9, 2018

I have worked as a software development engineer for several years, however, I enjoy to learn about many other topics: Databases, DevOps, Machine Learning, Automation Tests, Analytics, Chaos Engineering … Although, it is a good idea to specialize in a field, it’s always better to know a lot — knowledge is power!

Taken from [1]

The author Robert A. Heinlein said: “A human being should be able to change a diaper, butcher a hog, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, solve equations, analyze a new problem, program a computer, cook a tasty meal, fight efficiently …” that is a discussion for another entry.

For now, I decided to further to AWS and before starting I had to brush up some concepts. It is the first part of a series of entries, I am going to introduce the required concepts for involving in the first category of the services in AWS: Elastic Compute Cloud or EC2.

Based in [19]

Although in the previous table I included links for each topic, next I am going to provide a short introduction to each one.

Cloud Computing

It is a concept that embraces a lot of technologies, that allow delivering IT resources and applications on-demand via the Internet, using the pay-as-you-go pricing model. In its simplest form, cloud computing provides an easy way to access to servers, storage, databases and a broad set of application services over the Internet.

Taken from [19]

There are three types of Cloud Computing: IaaS, PaaS and SaaS. IaaS is when the service provider, like AWS, Google Cloud or Oracle Cloud, offers virtualized hardware or computing infrastructure as a service. With PaaS the service provider offers application platforms and tools over the cloud, usually to enable application development. Finally, under SaaS, the service provider offers software or applications as services, such as mail, office packages hosted in the cloud.

The cloud computing is also offered under two models: All-in model and Hybrid deployment. With the All-in model, all components of an application are fully deployed in the cloud. While, with the Hybrid deployment, the cloud lives together with existing on-premises infrastructures.

Virtualization

Virtualization is the process of virtually segregating physical hardware resources into a set of virtual resources. These resources can independently work as a computing resource and provide customized and dedicated CPU, RAM, storage, and so on. The virtualization can be classified according to the software in Bare Metal and Host Based. With Bare Metal, the hypervisor (or software for virtualization) is installed directly on the physical server. AWS uses a customized Xen hypervisor, however other examples include: OpenStack, Hyper-V, and vSphere. Host Based hypervisors are installed above the base operating system such as Windows or Linux. Some examples include VMware, Workstation, VirtualBox, and Virtual PC.

Scalability

Scalability is essential to achieve elasticity. The concept refers to adding resources either to the existing instance (scale up) or in parallel to an existing instance (scale out). Scale up consists in changing the instance type from small to large (that is, changing to more memory or compute) is called scaling up. It is also called Vertical Scaling. While Scale out is about placing one or more new instances parallel to the existing instance. It is also referred to as Horizontal Scaling.

Elasticity

Elasticity is a characteristic of cloud computing that describes the way in which the cloud infrastructure is able to expand and shrink to match the actual dynamic workload. This ability allows automatically provisioning resources in order to meet a high demand and reduce the extended number of resources when the demand lowers. Some patterns include usage Patterns, On and Off, Fast Growth, Variable Peaks, Predictable Peaks.

Content Delivery Network

A content delivery network (CDN) consists of several distributed computer nodes which are networked on the Internet to provide to the users access to large amounts data. This architecture improves the data access by enhancing the bandwidth and minimizing the access latency. CDNs are commonly used for file accessibility, application processing, multimedia delivery and caching.

Containers

Containers are isolated workload environments in a virtualized operating system. They speed up workload processes and application delivery because they can be spun up quickly, and they provide a solution for application-portability challenges because they are not tied to software on physical machines.

Kubernetes

Kubernetes is a container orchestration solution. When developers are dealing with a handful of containers in a development environment, managing the services isn’t a big deal. But when the application is deployed to a production environment and there are hundreds or thousands of containers and services, the management tasks become complex. Kubernetes simplifies the container management problem for large-scale deployments.

Serverless

There are two different approach about this concept. Serverless was first used to describe applications that incorporated third-party, cloud-hosted applications and services in order to manage the logic and state in the server-side. They have been described as Backend as a Service BaaS. In a second approach, which is our focus, Serverless is used to embrace the applications where server-side logic is still written by the application developer, but it’s run in stateless compute containers that are event-triggered and fully managed by a third party. They have been described as Functions as a Service FaaS. AWS Lambda is one of the most popular implementations of a Functions-as-a-Service.

References

[1]https://www.dreamstime.com/stock-illustration-man-evolution-cartoon-vector-clipart-created-adobe-illustrator-eps-format-illustration-use-web-print-image41776376
[2] https://dzone.com/refcardz/getting-started-cloud?chapter=1
[3] https://aws.amazon.com/ec2/?nc2=h_m1
[4] https://dzone.com/articles/set-aws-autoscaling
[5] https://aws.amazon.com/ec2/autoscaling/?nc2=h_m1
[6] https://dzone.com/refcardz/getting-started-with-docker-1
[7] https://aws.amazon.com/ecs/?nc2=h_m1
[8] https://aws.amazon.com/ecr/?nc2=h_m1
[9] https://dzone.com/refcardz/kubernetes-essentials?chapter=1
[10] https://aws.amazon.com/eks/?nc2=h_m1
[11] https://dzone.com/articles/cloud-computing-vs-vps-hosting
[12] https://dzone.com/articles/migrating-my-wordpress-block-to-aws-lightsail
[13] https://aws.amazon.com/fargate/?nc1=h_ls
[14] https://www.javacodegeeks.com/2017/12/amazon-elastic-beanstalk-tutorial.html
[15] https://aws.amazon.com/elasticbeanstalk/?nc2=h_m1
[16] https://www.javacodegeeks.com/2016/05/aws-lambda-beginners.html
[17] https://aws.amazon.com/lambda/?nc2=h_m1
[18] https://aws.amazon.com/elasticbeanstalk/?nc2=h_m1
[19] https://cloudcomputersupes.wordpress.com/category/cloud-funny-messages/

--

--

Yury Niño

Cloud Infrastructure Engineer @Google. Chaos Engineer Advocate. Loves building software applications, DevOps, Security and SRE