Running agents and tasks on ARM architecture

This is an advanced feature that is not required for the vast majority of self-hosted setups.
By default, all Airplane agent binaries and task images are designed for running on AMD64 (alternatively, referred to as x64 or x86-64) CPUs. Some organizations may prefer to use ARM64 infrastructure, however, for cost or performance reasons. Airplane supports these environments for self-hosted agent setups provided that the corresponding agents and tasks are configured for ARM.

Agent setup

AWS ECS

The CPU architecture to use is configurable via a parameter in the Airplane Terraform and CloudFormation configs. To switch from AMD64 (the default) to ARM64, set the appropriate parameter for the configuration type you're using:
  1. Terraform: Set the cpu_architecture input variable set to ARM64.
  2. CloudFormation: Set the CPUArchitecture stack parameter to ARM64.
Then, apply (or re-apply) the updated configs.

Kubernetes

If you're running in Kubernetes, no explicit configuration changes are required in the Airplane Kubernetes manifests. Each Kubernetes node should pull an image for the platform it's running on; provided that an ARM64 image is available (see the sections below), this should work without any problems.

Images

Airplane agent and built-ins

The images for the Airplane agent and standard built-ins (used for email, GraphQL, MongoDB, REST, Slack, and SQL tasks) are built for multiple platforms by default. Nothing additional is required to use these on ARM.

JavaScript and Python tasks

By default, JavaScript and Python tasks are built for AMD64 only. To also build for ARM64, update the javascript and/or python sections of your project airplane.yaml file to include the extra platform:
yaml
Copied
1
# For JavaScript tasks
2
javascript:
3
buildPlatforms:
4
- linux/amd64
5
- linux/arm64
6
7
# For Python tasks
8
python:
9
buildPlatforms:
10
- linux/amd64
11
- linux/arm64
You can omit the linux/amd64 lines if your architecture is 100% ARM-based and you don't want to build for AMD64 at all.

Shell tasks

Shell tasks can be configured to use multi-platform builds via an extra environment variable in the task config YAML:
yaml
Copied
1
shell:
2
envVars:
3
_AIRPLANE_BUILD_PLATFORM:
4
value: "linux/amd64,linux/arm64"