Working with 64-bit ARM workloads on Amazon ECS
Amazon ECS supports using 64-bit ARM applications. You can run your applications on the
platform that's powered by AWS
Graviton2
Considerations
Before you begin deploying task definitions that use the 64-bit ARM architecture, consider the following:
-
The applications can use the Fargate or EC2 launch types.
-
The applications can only use the Linux operating system.
-
For the Fargate type, the applications must use Fargate platform version
1.4.0
or later . -
The applications can use Fluent Bit or CloudWatch for monitoring.
-
For the Fargate launch type, the following AWS Regions do not support 64-bit ARM workloads:
-
US East (N. Virginia) , the
use1-az3
Availability Zone -
Asia Pacific (Hyderabad)
-
Asia Pacific (Melbourne)
-
China (Beijing)
-
China (Ningxia)
-
Europe (Zurich)
-
Africa (Cape Town)
-
Middle East (UAE)
-
Middle East (Bahrain)
AWS GovCloud (US-East)
AWS GovCloud (US-West)
-
In Asia Pacific (Osaka), specifically the
apne3-az2
andapne3-az3
Availability Zones only
-
-
For the Amazon EC2 launch type, see the following to verify that the Region that you're in supports the instance type you want to use:
You can also use the Amazon EC2
describe-instance-type-offerings
command with a filter to view the instance offering for your Region.aws ec2 describe-instance-type-offerings --filters Name=instance-type,Values=
instance-type
--regionregion
The following example checks for the M6 instance type availability in the US East (N. Virginia) (us-east-1) Region.
aws ec2 describe-instance-type-offerings --filters Name=instance-type,Values=M6 --region us-east-1
For more information, see describe-instance-type-offerings in the Amazon EC2 Command Line Reference.
Specifying the ARM architecture in your task definition
To use the ARM architecture, specify ARM64
for the
cpuArchitecture
task definition parameter.
In the following example, the ARM architecture is specified in a task definition. It's in JSON format.
{
"runtimePlatform": {
"operatingSystemFamily": "LINUX",
"cpuArchitecture": "ARM64"
},
...
}
In the following example, a task definition for the ARM architecture displays "hello world."
{ "family": "arm64-testapp", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "arm-container", "image": "arm64v8/busybox", "cpu": 100, "memory": 100, "essential": true, "command": [ "echo hello world" ], "entryPoint": [ "sh", "-c" ] } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "memory": "512", "runtimePlatform": { "operatingSystemFamily": "LINUX", "cpuArchitecture": "ARM64" }, "executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole" }
Interfaces for configuring ARM
You can configure the ARM CPU architecture for Amazon ECS task definitions using one of the following interfaces:
-
New Amazon ECS console
-
AWS Command Line Interface (AWS CLI)
-
AWS SDKs
-
AWS Copilot