IaaS and PaaS are two of the oldest and most widely used categories of cloud computing services -- similar in some ways but still fundamentally different types of platforms.
Enterprises must understand those differences in order to choose the right type of cloud service for a given use case. This article explains the benefits and drawbacks of IaaS vs. PaaS, and surveys the main IaaS and PaaS offerings available from AWS, Microsoft Azure and Google Cloud Platform.
IaaS vs. PaaS, defined
Infrastructure as a Service (IaaS) provides on-demand access to virtualized IT infrastructure via the internet. Typically, IaaS provides access only to core infrastructure components -- compute, networking and storage. Users install and manage the software they want to run on their cloud-based infrastructure.
Cloud providers maintain and monitor the physical infrastructure to deliver IaaS, but it is the users' responsibility to secure and monitor the workloads that run on that platform. Thus, the primary value of IaaS is that it eliminates the need for users to purchase, set up and maintain physical servers.
Originally, IaaS was the backbone of major public clouds such as AWS, which released database and virtual machine hosting services in the mid-2000s. Only later did those vendors add service options that enabled enterprises to focus more on development rather than management.
Platform as a service (PaaS) provides infrastructure to host applications, as well as software tools to help customers develop and deploy those applications. PaaS simplifies the setup and management of both hardware and software.
PaaS is less flexible than IaaS, and typically caters to a narrow set of approaches to application development or deployment. They are not general-purpose replacements for an organization's entire IT infrastructure and software development workflow.
Heralded by offerings from vendors such as Heroku, PaaS offerings became popular in the mid-2000s, at the same time that IaaS emerged, but PaaS evolved independently from IaaS. In most cases, major IaaS providers at the time did not include PaaS among their cloud services, while PaaS providers did not branch off to provide standalone IaaS services alongside PaaS.
Where the lines blur between IaaS vs. PaaS
Many early PaaS providers restricted which technologies they supported, and their software tools were compatible only with their own hosting platforms. It was difficult to migrate from one PaaS offering to another, or adapt a PaaS-based development pipeline to run on a generic IaaS instead.
As businesses increasingly sought freedom from cloud lock-in, PaaS became more software-agnostic. Open source options, such as Docker containers orchestrated by Kubernetes, replaced some proprietary tooling. As a result, cloud computing vendors that originally specialized in IaaS added PaaS offerings, and increased compatibility with their respective IaaS offerings. For example, some versions of AWS CodePipeline, a continuous delivery service that forms part of a PaaS framework in the AWS cloud, can deploy applications to virtual machines or containers that run on AWS' IaaS.
This integration of PaaS and IaaS has somewhat blurred the differences between the two. Put simply, think of IaaS as any cloud service that is limited strictly to infrastructure. If the service couples software tools with the infrastructure, then it is a PaaS.
However, IaaS platforms do include some preconfigured software environments. For example, a cloud-based VM comes preinstalled with an operating system. But these software stacks are generic and users must put more time into customization to meet their needs. IaaS doesn't provide a complete environment to develop or deploy applications as there would be in the case of PaaS.
When to use IaaS or PaaS
With a basic grasp of the benefits and differences of IaaS vs. PaaS, now you can consider which one is right for a given workload.
IaaS is typically the best option for companies that have the resources to develop, deploy and manage applications -- without the provider's help. IaaS is also preferable if a user requires components that aren't provided by a PaaS offering, such as a specific development tool or a custom operating system.
The most common use case for IaaS is when an organization already has its app, or has the in-house resources to develop it, and simply needs infrastructure to host it. For example, a retailer that has built an online marketplace might turn to an IaaS provider to host that workload. Or, a company could chose an IaaS hosting product to migrate its on-premises payroll system to the cloud.
PaaS is a better option for organizations that have fewer resources to develop and manage applications. PaaS does not totally eliminate the need for developers, but it streamlines development and deployment operations and bundles them with hosting infrastructure. For that reason, PaaS can be more attractive to SMBs that want to get apps out the door quicker.
In general, IaaS costs less than PaaS for workloads that have comparable resource consumption, but you might need to pay for software tools from other sources with an IaaS model, which can be more expensive than acquiring them as part of a PaaS. There's other cost factors as well, including potential overhead for infrastructure maintenance.
How cloud IaaS and PaaS services compare
Today, the major cloud computing vendors -- AWS, Microsoft and Google -- offer both IaaS and PaaS options. However, they vary in how they organize those PaaS-related cloud services.
AWS doesn't provide PaaS in the traditional sense but makes it easy for customers to integrate various AWS products to create a PaaS tailored to their needs. In contrast, Azure and Google Cloud Platform have bundled collections of tools and services to provide an end-to-end PaaS option, although they provide different software tools and hosting options within those service collections.
AWS IaaS and PaaS offerings
On AWS, the primary IaaS to host VMs is Amazon EC2. AWS offers the broadest range of instance types among the major cloud providers, with a range of general-purpose VMs, as well as instances tailored to memory, compute and storage.
Users often combine EC2 with one or more of AWS' data storage services to host an application and the data it requires to operate. AWS offers several storage options, including:
- Amazon S3
- Amazon Elastic Block Store
- Amazon Elastic File System
Although no single Amazon cloud service constitutes a traditional PaaS, AWS offers several services that customers can easily integrate to create a PaaS. For example:
- AWS Cloud9: This cloud-based integrated development environment is used to develop applications.
- AWS CodePipeline: Developers can use this tool to build and deploy applications. It supports deployment to a variety of AWS hosting options, such as EC2 virtual machines, or containers on Amazon Elastic Container Service.
- AWS CodeDeploy: This deployment service enables enterprises to automate deployments to various AWS compute services.
- AWS Elastic Beanstalk: Developers use this tool to upload code for web apps and service. AWS handles the deployment, provisioning and load balancing.
Compared to the other major cloud vendors, AWS offers the least integration between its various PaaS-related services. To provide PaaS features, users must connect several services together to build a complete application development and deployment pipeline. This approach appeals to organizations that prefer to pick and choose their tooling, but they must familiarize themselves with multiple AWS offerings and take steps to integrate them.
Enterprises' infrastructure management responsibilities change, depending on whether they choose an on-premises, IaaS, PaaS or SaaS deployment.
Microsoft IaaS and PaaS offerings
Azure Virtual Machines is Microsoft's main compute offering to host VMs in the cloud. There are compute-optimized, memory-optimized, burstable and general-purpose VM types. For data storage, Azure provides Azure Storage and Azure Databases. Its storage offerings are divided into subcategories, including:
- Azure Disc Storage
- Azure File Storage
- Azure Blob Storage
- Azure Queue Storage
Azure's PaaS offerings are grouped into a category of services called Azure App Service, which provides hosting and tools to streamline application development and deployment using a variety of languages and frameworks. App Service also offers flexibility for organizations that want to customize how their PaaS runs. These tools incorporated in App Service include:
- Azure Web Apps
- Azure Web Apps for Containers
- Azure API Apps
Among all of the cloud providers, Azure arguably comes closest to a single, turnkey PaaS solution via App Service. Thus, Azure is a good choice for businesses that seek an easy on-ramp to set up the tools to run a PaaS.
Google IaaS and PaaS offerings
Like AWS and Azure, Google provides a compute IaaS offering, called Google Compute Engine, which offers predefined and custom machine types. Google also has storage services such as:
- Google Cloud Storage
- Google Cloud Filestore
- Google Persistent Disk
Google's PaaS platform, App Engine, is similar to Azure App Service in that it supports the development and deployment of applications written in a variety of languages and frameworks. It also features a variety of deployment tools and approaches, including:
- A standard environment for sandbox deployments, certain specific source codes, low-cost apps and rapid, spikey scaling demands.
- A flexible environment for containerized apps run on Compute Engine or apps that rely on the Compute Engine network, apps with steady traffic, custom runtimes and apps that rely on frameworks with native code.
Developers can also combine the standard and flexible environments in App Engine as needed.
App Engine caters more toward Linux-based development, whereas Azure App Service is more oriented to Windows-based frameworks and services. An enterprise that builds its apps in .NET might prefer App Service, while App Engine appeals to IT shops that like Unix tooling and want to deploy applications using Docker containers -- which also run on Windows, but are more at home in Linux-based environments.