Companies that host their workloads on-premises require lots of investment in terms of IT resources, operations, and costs. Cloud providers such as AWS simplify this by abstracting the complexities of the underlying infrastructure. They manage compute, networking, and storage while offering internet-accessible endpoints to enable automation. In this model, the IT teams still need to manage the operating systems, software dependencies, and the application that runs on top of them. From a cost perspective, this has a huge benefit due to the reduction of investment and planning around infrastructure procurement, maintenance, and operations.
The IT teams have a lot of flexibility and control under this model as they can leverage the SDKs and APIs from the cloud provider for programmatically provisioning resources on demand. They can customize the operating systems, libraries, and pretty much everything that impacts the application behavior and performance. With tools such as AWS CloudFormation, AWS CDK, and Terraform, the users can define their entire infrastructure as code and can apply good code management practices to infrastructure.
Services provided under the IaaS tier are particularly useful for teams adopting DevOps approaches that involve frequent software testing and infrastructure management entirely via code. IaaS offerings can be used to spin up environments whenever you want, scale them up to match the production load, and tear them down again when you no longer need the resources. In terms of service reliability and solid security posture, AWS offers a lot of capabilities at this level.
It is common for IT teams to combine the IaaS offerings with other tooling that helps them efficiently manage the software delivery process, be it configuration management tools, or other deployment automation frameworks, such as the AWS Code suite, which we discussed in the previous chapter.
Platform as a Service (PaaS)
In a PaaS service model, cloud providers additionally manage the operating system and application integrations on top of the infrastructure. This further abstracts the system internals fromthe software team, allowing them to focus on business outcomes. With pre-built integrations, all aspects of infrastructure, operations, and configuration management, which is the process of maintaining hardware and software in a desired state, are taken care of by the provider. These platforms, to some degree, are opinionated about the software delivery process and the automation around it. The developers still need to write code, but PaaS takes care of the operations and deployment activities, which results in a seamless merge with the underlying IaaS.
Developers greatly benefit from such offerings as they help them build proof of concepts in no time. In contrast to IaaS, these offerings are generally less flexible to customization and change. It takes time for the developers to get used to the specifics of the framework and what is expected in terms of code structure, configurations, software delivery process, and so on. However, once they have a foundational understanding of the service offered, onboarding time for a new application improves a great deal.