Choosing a modern application strategy
Taking the first step
Purpose |
Help determine which modern application development approach is the best fit for your organization. |
Last updated |
November 23, 2023 |
Covered services |
Introduction
Amazon Web Services (AWS) provides you with the flexibility to choose different compute options to build and run modern applications that map to your business needs. We provide you with access to the right operational model for your compute choice.
Developers and data engineers prefer a level of autonomy when choosing which compute models match which workloads. When initially developing modern applications, development teams need to manage and operate their applications directly.
As more workloads are developed, you might decide to create central platform or operations teams. The function of these central teams varies - some provide standard architectures and templated patterns for development teams to use, and others operate and manage workloads on behalf of multiple development teams.
These central teams strive to create standards for controlling costs, achieving the right performance and security, simplifying operations, and providing common architecture patterns. Achieving the right balance between autonomy and standardization is a challenge that enterprises and other large organizations often deal with.
It is common to choose one of two operational models to meet this challenge: serverless compute
Understand
Developers and data engineers may have different compute requirements. For example, a developer might choose AWS Lambda because it is optimized for event-driven patterns and gives access to hundreds of managed integrations.
Alternatively, a data engineer might choose an open-source framework like KubeFlow or Ray on Amazon Elastic Kubernetes Service (Amazon EKS) because it simplifies deployment of machine-learning models but allows access to the right high-powered instances.
Each role tends to develop skills in technology stacks over time, and has preferences about the tools they use, both look at their compute choice on a workload-by-workload basis, which means operational roles need to support a variety of workloads since they often work across teams. These roles include platform engineers, cloud administrators, or site reliability engineers (SREs).
Those in operational roles are challenged to provide autonomy for developers and data engineers while making sure they can deploy, operate, and monitor all workloads consistently to meet security, performance, resiliency, and cost requirements. Over time, as you develop more modern applications, these roles need to standardize on the tools to automate the deployment and monitoring of their workloads.
The choice between serverless compute and Kubernetes as an operational model is often driven by the need to have the right balance between autonomy and standardization with the number of resources one dedicates to running and operating workloads. Many workloads can be built successfully using either of these options. But, for some workloads, there are inherent advantages of one over the other.
A good team can make the compute choice entirely transparent to developers. Poor choices can limit developers options, and lead to sub-standard outcomes. Operators are always affected by the selected operating model and it will determine needs such as common libraries and networking configuration - as well as how the organization will interact with underlying services it needs to configure.
The operational model will often be determined by your organizational structure and skill around automation and operations. These roles might be distributed across development teams, different parts of your organization, or be centralized. The structure and skills of these teams are often among the most important considerations when choosing between a serverless or Kubernetes operational model.
The serverless operational model prioritizes shifting much of the work involved in provisioning and managing compute resources to AWS. This model includes services such as AWS Lambda and the Amazon Elastic Container Service (Amazon ECS).
The second model, Kubernetes on AWS, meets an important need for organizations that
prioritize the Cloud Native Computing Foundation (CNCF)
ecosystem
Consider
For developers and data engineers, we recommend that you evaluate the most appropriate compute option on a workload-by-workload basis within your operational strategy. Here are some of the key criteria to consider when determining your strategy.
Enterprises tend to organize their development teams around one of the following models:
-
Distributed: Each team owns their development, deployment, and operational functions. This model provides a great level of autonomy and allow teams to innovate at their own pace.
-
Centralized: A centralized team maintains standards, creates automations, and facilitates the sharing of knowledge and best practices.
These are separate ends of a spectrum, and organizations may start with a distributed model and later migrate towards a centralized model as the number of workloads increases and the need for consistency across cost, performance and security of workloads becomes an important factor. However, in both models, serverless can reduce the infrastructure management overhead.
Another model organizations adopt, especially in the Kubernetes space, are the formation of central teams that specialize in platform engineering. These skilled engineering teams have developer skills and build and maintain platforms made up of common automation, deployment, and observability tools. Amazon EKS is often the choice for these organizations.
Identifying the structure and skill of your development teams can be critical to choosing the appropriate platform.
Choose
AWS offers different container options, such as Amazon ECS, serverless containers with AWS Fargate, and AWS App Runner, and different Kubernetes options, such as Amazon EKS, ROSA, and self-managed Kubernetes on Amazon EC2.
The following comparison table can help you determine your approach based on your workload requirements. You might choose pieces of both approaches, or have different teams that use different approaches. It is not uncommon to see a very large organizations have departments with different strategies.
Modern application approach | When would you use it? | What workload is it optimized for? | Serverless services |
---|---|---|---|
Serverless |
Use when AWS managed services and tools are your first choice, such as AWS Lambda, AWS App Runner, and Amazon ECS. |
Optimized for enabling developers to focus solely on writing code without the need to manage or provision servers, minimizing operational overhead. |
|
Kubernetes |
Use when Kubernetes is your primary compute platform interface. |
Optimized for teams with central platforms teams that invest in platform engineering skills. Platform engineers are skilled at keeping clusters up to date with the fast-moving CNCF Kubernetes versioning strategy. |
Use
Now that you have determined which approach best fits your workload for your environment, we recommend that you review the following service-specific resources to help you begin implementing your approach. This include links to in-depth documentation, hands-on tutorials, and other key assets to help get you started.
Getting started with Amazon ECS We provide an introduction to the tools available to access Amazon ECS and introductory step-by-step procedures to run containers. |
Tutorials for Amazon ECS Explore more than a dozen tutorials on how to perform common tasks—including the creation of clusters and VPCs. |
What's new and what's next with Amazon ECS Learn what’s new since the launch of Amazon ECS Anywhere, new features of AWS Fargate, and a look ahead at the exciting enhancements to Amazon ECS |
Amazon ECS deployment This guide offers an overview of Amazon ECS deployment options on AWS and shows how it can be used to manage a simple containerized application. |
Amazon ECS workshop This workshop is designed to educate those that might not be familiar with AWS Fargate, Amazon ECS, and possibly even Docker container workflow. |
Deploy Docker containers on Amazon ECS Learn how to run a Docker-enabled sample application on an Amazon ECS cluster behind a load balancer, test the application, and delete your resources to avoid charges. |
Explore
Architecture diagrams Explore reference architecture diagrams to help you implement your modern app development approach. |
Whitepapers Explore whitepapers to learn best practices in implementing your modern app development approach. |
AWS Solutions Explore vetted solutions and architectural guidance for common modern app development use cases. |