Planning your transition
This section will help you prepare your transition project and highlights things to consider. In most cases, your application or service consists of multiple components and their dependencies. Being aware of what these dependencies are will help you identify constraints and opportunities for quick wins. If you are primarily interested in the technical activities associated with transitioning to AWS Graviton2, see Transitioning Your Service or Application.
The following figure illustrates the typical components of an application stack. Your application may differ or you may not have full control over some components depending on your software distribution model. For example, you may have full control over all components of the stack if you are distribution software as a SaaS-based product. However, you may have less control over some aspects such as operating systems and software agents if you distribute your software directly to customers (and customers are responsible for deploying and configuring your software).
Typical components of your application stack
The following sections provide additional details around each application component and the specific issues you may encounter when transitioning to AWS Graviton2.
Operating system (OS)
Most popular Linux distributions offer out-of-the-box support for
AWS Graviton2 include Amazon Linux 2, Red Hat Enterprise Linux,
Ubuntu, and SUSE Linux Enterprise Server. Use the latest version
of these operating systems to benefit from performance
enhancements. Consider which operating systems and versions you or
your customers are running in their production environment. Verify
that the operating system offers 64-bit ARM support using the AWS console and CLI. Filter by owner, region, platform and
architecture to check whether a combination is supported today. At
the time of publication, Windows is not available for AWS
Graviton2. For an up-to-date-list of supported operating systems,
see the
AWS
Graviton Getting Started Guide
Language and runtimes
Verify which languages and runtimes make up your codebase and whether your code dependencies include native language extensions (such as Java JNI's) or artifacts (such as x86 shared objects where equivalent ARM versions should be created). Interpreted and bytecode-compiled languages such as Python, Java, Node.js, and .NET Core on Linux mostly run without modifications. This means you should be able to run these applications on AWS Graviton2 by simply installing the corresponding runtime.
For example, the Java Virtual Machine (JVM) runtime added 64-bit
ARM support in version 8 and above. (Java has been available in multiple forms for ARM for a long
time. OpenJDK and Oracle JDK added support for 64-bit ARM in
JDK8 and above. Servers and cloud workloads typically adopt
LTS versions of Java which include JDK8, 11, and 15 which all
have 64-bit ARM support and later versions provide more 64-bit
ARM specific optimizations for best performance.) Check the
Getting
Started Guide
Container services
If your application is deployed using container services, check for multi-architecture
support for containers and infrastructure dependencies. Containers are architecture specific
and you will need to build new container images to support 64-bit ARM. Multi-architecture
support helps simplify the consumption of container images across x86 and ARM. For example,
Docker supports multi-architecture images transparently via the Buildx
You can deploy multi-architecture container images in
Amazon Elastic Container Service
Software agents
If you distribute your application as SaaS, work with your operations team to identify
your dependencies on software agents. Most security, monitoring, and logging use cases require
operations teams to install software agents on virtual machines and container hosts. Lack of
support for 64-bit ARM can be a blocker if your security and application performance
monitoring processes rely on these agents. Most first-party software agents on the AWS
platform provide 64-bit ARM support. This includes the Amazon CloudWatch
Build systems
Consider the state of multi-architecture support for continuous integration/continuous delivery (CI/CD) pipelines and build systems. Maintaining multiple versions of compilers, libraries, and support binaries for different architectures has traditionally been a cumbersome, time-consuming, and an error-prone process. Modern CI/CD tools offer facilities to build and test code submitted to code repositories with minimal manual intervention.
First party CI/CD tools on the AWS platform such as AWS CodeCommit
Edge cases
You may encounter edge cases in older, monolithic applications. While these are rare, they
may impact on your ability to transition to AWS Graviton2. Examples for edge cases include
proprietary legacy applications, hand-tuned code written for x86 in low-level languages, or
workloads that depend on specific features of the x86 architecture. If this is the case,
consider whether AMD-backed instance types