This post was originally published by the Cloud Security Alliance.
The use of the public cloud has become the new norm for any size organization.
Organizations are adopting cloud services, migrating systems to the cloud, consuming SaaS applications, and beginning to see the true benefits of the public cloud.
In this blog post, I will explain what it means to embrace a cloud-native mindset.
When talking about cloud-native, there are two complimentary terms:
- Cloud-Native Infrastructure – Services that were specifically built to run on public cloud environments, such as containers, API gateways, managed databases, and more.
- Cloud-Native applications – Applications that take the full benefits of the public cloud, such as auto-scaling (up or down), microservice architectures, function as a service, and more.
For many years, there was a misconception among organizations and decision-makers, should we embrace a "cloud first" mindset, meaning, any new application we develop or consume must reside in the public cloud?
Cloud-first mindset is no longer relevant.
Cloud, like any other IT system, is meant to support the business, not to dictate business decisions.
One of the main reasons for any organization to create a cloud strategy is to allow decision-makers to align IT capabilities or services to business requirements.
There might be legacy systems generating value for the organization, and the cost to re-architect and migrate to the cloud is higher than the benefit of migration – in this case, the business should decide how to manage this risk.
When considering developing a new application or migrating an existing application to the cloud, consider the benefits of cloud-native (see below), and in any case, choosing the cloud makes sense (in terms of alignment to business goals, costs, performance, etc.), make it your first choice.
Since we previously mentioned cloud-native, let us review some of the main benefits of cloud-native:
One of the pre-requirements of cloud-native applications is the ability to deploy an entire workload in an automated manner using Infrastructure as Code.
In cloud environments, IaC comes naturally, but do not wait until your workloads are migrated or developed in the cloud – begin automating on-premise infrastructure deployments using scripts today.
Cloud-native applications benefit from the infinite scale of the public cloud.
Modern applications will scale up or down according to customers' demand.
Legacy environments may have the ability to add more virtual machines in case of high load, but in most cases, they fail to release unneeded compute resources when the load on the application goes down, increasing resource costs.
One of the main benefits of cloud-native applications is the ability to break down complex architecture into small components (i.e., microservices)
Microservices allows development teams to own, develop, and maintain small portions of an application, making upgrading to newer versions an easy task.
If you are building new applications today, start architecting your applications using a microservices architecture, regardless if you are developing on-premise or in the public cloud.
It is important to note that microservices architecture increases the overall complexity of an application, by having many small components, so plan carefully.
One of the main benefits when designing applications (or migrating an existing application) in the cloud, is to gain the benefit of managed services.
By consuming managed services (such as managed databases, storage, API gateways, etc.), you shift the overall maintenance, security, and stability to the cloud provider, which allows you to consume a service, without having to deal with the underlying infrastructure maintenance.
Whenever possible, prefer to choose a serverless managed service, which completely removes your requirement to deal with infrastructure scale (you simply do not specify how much computing power is required to run a service at any given time).
Modern applications are developed using a CI/CD pipeline, which creates a fast development lifecycle.
Each development team shares its code using a code repository, able to execute its build process, which ends up with an artifact ready to be deployed in any environment (Dev, Test, or Prod).
Cloud-native applications allow us to have optimum use of the hardware.
Compute services such as containers and function as a service, make better use of hardware resources, when compared to physical or even virtual machines.
Containers can run on any platform (from on-premise to cloud environments), and although it may take some time for developers and DevOps to learn how to use them, they can suit most workloads (including AI/ML), and be your first step in embracing cloud-native applications.
Function as a Service is a different story – they suit specific tasks, and in most cases bound to a specific cloud environment, but if used wisely, they offer great efficiency when compared to other types of compute services.
What does it mean to embrace a cloud-native mindset?
Measuring the benefits of cloud-native applications, consuming cloud-native services, looking into the future of IT services, and wisely adopting the public cloud.
Will the public cloud suit 100% of scenarios? No, but it has more benefits than keeping legacy systems inside traditional data centers.
Whether you are a developer, DevOps, architect, or cybersecurity expert, I invite you to read, take online courses, practice, and gain experience using cloud-native infrastructure and applications, and consider them the better alternatives for running modern applications.
Eyal Estrin is a cloud and information security architect, the owner of the blog Security & Cloud 24/7 and the author of the book Cloud Security Handbook, with more than 20 years in the IT industry.
You can connect with him on Twitter.
Opinions are his own and not the views of his employer.