Description
This issue is to collect the current limitations of the arm64 support of the multi-platform docker image.
Note
The arm64 π€ Docker images should be fully functional β¨ and covered by our tests in CI for every released LocalStack image (including latest
).
π Checkout our documentation for ARM64 Support
Good to Know
- Our current Lambda implementation (v2) even supports multi-architecture scenarios using emulation on compatible machines (e.g., Apple Silicon). Supported since Feb 2023 for Lambda functions #7637 and external layers (#4932).
Known major limitations
If you run the arm64 image, there are currently the following major limitations:
TODO: This list is outdated and needs updating
- ECR (no arm64 binary - could be cross-compiled and redistributed)
- RDS can potentially cause errors due to python
- Websockets (needs triaging)
- ECR (not k3d arm support yet)
- Kinesis (kinesis providers may cause issues on arm64 JVMs)
Detailed list of skipped tests (April 24, 2024)
We skip 3 tests in localstack
and 133 30 tests in localstack-ext
using @markers.only_on_amd64
, which require further investigation. However, several tests need fixing for multi-architecture (e.g., incompatible Lambda build or layer for ARM64), but the actual functionality works.
localstack (3)
There are no known arm64 issues in localstack
. The single API gateway test uses a Rust Lambda function with an incompatible build for armd64, but the Lambda runtime tests show that this functionality works in LocalStack.
The Lambda tests are valid skips because they specifically tests amd64 features or multi-architecture support (unsupported by our CI).
pytest --collect-only --log-cli-level=ERROR -q -m 'only_on_amd64' tests
- tests/aws/services/apigateway/test_apigateway_basic.py::test_apigateway_rust_lambda => TODO: fix test case
- tests/aws/services/lambda_/test_lambda.py::TestLambdaBehavior::test_runtime_introspection_x86 => EXPECTED
- tests/aws/services/lambda_/test_lambda.py::TestLambdaBehavior::test_mixed_architecture => EXPECTED
localstack-ext (133 30)
- Most of the skipped arm64 tests are simply false positives and the marker can be removed after investigation.
- Some tests use an incompatible Lambda build or external Lambda layer -> requires fixing the test case.
- Some services require triaging (e.g., AppSync, ECS, RDS, Kinesis, Kinesisanalytics, ELB, IoT, Kafka, Glue, Cognito, Redshift, ...) whether the issue is just with the test or not
Update: reduced from 133 to 30 in https://github.com/localstack/localstack-ext/pull/2899
pytest --collect-only --log-cli-level=ERROR -q -m 'only_on_amd64' tests/aws
- tests/aws/services/apigateway/test_rest_apis.py::TestRestAPIs::test_custom_authorizer[NONE-GET]
- tests/aws/services/apigateway/test_rest_apis.py::TestRestAPIs::test_custom_authorizer[NONE-POST]
- tests/aws/services/apigateway/test_rest_apis.py::TestRestAPIs::test_custom_authorizer[CUSTOM-GET]
- tests/aws/services/apigateway/test_rest_apis.py::TestRestAPIs::test_custom_authorizer[CUSTOM-POST]
- tests/aws/services/apigateway/test_websocket_apis.py::TestWebSockets::test_websocket_api_with_http_integration[HTTP-False-True]
- tests/aws/services/apigateway/test_websocket_apis.py::TestWebSockets::test_websocket_api_with_http_integration[HTTP-False-False]
- tests/aws/services/appsync/test_appsync.py::TestAppSync::test_integration_and_request[appsync_integrated_service0]
- tests/aws/services/appsync/test_appsync.py::TestAppSync::test_integration_and_request[appsync_integrated_service1]
- tests/aws/services/appsync/test_appsync.py::TestAppSync::test_integration_and_request[appsync_integrated_service2]
- tests/aws/services/appsync/test_appsync.py::TestAppSync::test_integration_and_request[appsync_integrated_service3]
- tests/aws/services/cloudformation/resources/test_kinesisanalytics.py::test_application_with_output_and_reference
- tests/aws/services/cloudformation/resources/test_lambda.py::test_log_group_for_custom_resource_lambda
- tests/aws/services/cloudformation/test_api.py::TestAPI::test_create_stack
- tests/aws/services/cognito/test_cognito.py::TestTriggers::test_cognito_triggers
- tests/aws/services/elb/test_elb.py::TestELB::test_load_balancing
- tests/aws/services/iot/test_iot.py::TestIoTData::test_topic_rule_triggers_firehose_put_record
- tests/aws/services/kafka/test_kafka.py::TestKafka::test_kafka_lambda_event_source_mapping[True]
- tests/aws/services/kafka/test_kafka.py::TestKafka::test_kafka_lambda_event_source_mapping[False]
- tests/aws/services/kinesisanalytics/test_kinesisanalytics.py::TestKinesisAnalytics::test_run_query
- tests/aws/services/kinesisanalytics/test_kinesisanalytics.py::TestKinesisAnalytics::test_run_siddhi_query
- tests/aws/services/kinesisanalytics/test_kinesisanalytics.py::TestKinesisAnalyticsProvider::test_list_and_update_applications
- tests/aws/services/kinesisanalytics/test_kinesisanalytics.py::TestKinesisAnalyticsProvider::test_tag_list_tag_untag_resource
- tests/aws/services/kinesisanalytics/test_kinesisanalytics.py::TestKinesisAnalyticsProvider::test_input_processing_configuration
- tests/aws/services/kinesisanalytics/test_kinesisanalytics.py::TestKinesisAnalyticsProvider::test_application_output
- tests/aws/services/lambda_/test_lambda.py::TestLambdaLayerBehavior::test_function_using_layer
- tests/aws/services/lambda_/test_lambda.py::TestLambdaLayerBehavior::test_function_multiple_layers_override
- tests/aws/services/lambda_/test_lambda.py::TestExternalLayerDownload::test_external_layer_specific
- tests/aws/services/lambda_/test_lambda_xray.py::TestLambdaXrayIntegration::test_basic_xray_integration
- tests/aws/services/rds/test_rds.py::TestRdsMssql::test_create_mssql
- tests/aws/test_serverless.py::TestServerless::test_websocket_deployed
Archive
Detailed list of failing Pro tests (Nov 15, 2021)
This list is badly outdated and is just here for traceability (e.g., might be helpful to compare against latest list).
Apple M1 (with amd64 emulation of lambda containers)
Most issues related to arm64 are mitigated by running additional amd64 emulation.
This will be the case for most Apple M1 users.
-
FAILED tests/integration/test_apigateway.py::TestWebSockets::test_websocket_api[AWS_PROXY-False-True]
-
FAILED tests/integration/test_athena.py::TestAthena::test_simple_query - asse...
-
FAILED tests/integration/test_batch.py::TestBatch::test_create_with_additional_config
-
FAILED tests/integration/test_events.py::test_api_destinations_with_basic_auth
-
FAILED tests/integration/test_glue.py::TestGlue::test_import_data_catalog - A...
-
FAILED tests/integration/test_kinesis_analytics.py::TestKinesisAnalytics::test_run_query
-
FAILED tests/integration/test_kinesis_analytics.py::TestKinesisAnalytics::test_run_siddhi_query
-
FAILED tests/integration/test_lambda.py::test_function_using_layer - botocore...
-
FAILED tests/integration/test_rds.py::TestRDS::test_create_snapshot - Asserti...
-
FAILED tests/integration/test_rds.py::TestRDS::test_query_from_s3 - botocore....
-
FAILED tests/integration/test_redshift.py::TestRedshift::test_create_cluster
-
FAILED tests/integration/test_transfer.py::TestAWSTransfer::test_basic_transfer_api
-
FAILED tests/integration/cloudformation/test_cloudformation_msk.py::test_create_cluster
-
ERROR tests/integration/test_serverless.py::TestServerless::test_websocket_deployed
Ampere Altra (without emulation)
-
FAILED tests/integration/test_apigateway.py::TestWebSockets::test_websocket_api[AWS_PROXY-False-True]
-
FAILED tests/integration/test_apigateway.py::TestWebSockets::test_websocket_api[AWS_PROXY-False-False]
-
FAILED tests/integration/test_apigateway.py::TestHttpApis::test_lambda_request_authorizer
-
FAILED tests/integration/test_apigateway.py::TestHttpApis::test_iam_authorizer
-
FAILED tests/integration/test_apigateway.py::TestHttpApis::test_cognito_authorizer
-
FAILED tests/integration/test_apigateway.py::TestHttpApis::test_lambda_request_authorizer_different_paths[gateway_request_url]
-
FAILED tests/integration/test_apigateway.py::TestHttpApis::test_lambda_request_authorizer_different_paths[_get_request_url_custom_dns]
-
FAILED tests/integration/test_apigateway.py::TestHttpApis::test_lambda_return_gzip_response
-
FAILED tests/integration/test_appsync.py::TestAppSync::test_api_lambda_integration
-
FAILED tests/integration/test_athena.py::TestAthena::test_simple_query - asse...
-
FAILED tests/integration/test_cloudformation.py::TestCloudFormation::test_create_stack
-
FAILED tests/integration/test_cognito.py::TestCognito::test_api_gateway_cognito_authorizer
-
FAILED tests/integration/test_cognito.py::TestCognito::test_cognito_triggers
-
FAILED tests/integration/test_cognito.py::TestCognito::test_user_migration_lambda
-
FAILED tests/integration/test_docdb.py::TestDocDB::test_create_query_db - Exc...
-
FAILED tests/integration/test_ecr.py::TestECR::test_create_delete_image - bot...
-
FAILED tests/integration/test_eks.py::TestEKS::test_create_app_in_k3s_cluster
-
FAILED tests/integration/test_glue.py::TestGlue::test_import_data_catalog - A...
-
FAILED tests/integration/test_kafka.py::TestKafka::test_kafka_lambda_event_source_mapping
-
FAILED tests/integration/test_kinesis_analytics.py::TestKinesisAnalytics::test_run_query
-
FAILED tests/integration/test_kinesis_analytics.py::TestKinesisAnalytics::test_run_siddhi_query
-
FAILED tests/integration/test_lambda.py::test_function_using_layer - botocore...
-
FAILED tests/integration/test_lambda.py::test_function_using_layer_overriding_runtime
-
FAILED tests/integration/test_lambda.py::test_custom_runtime_with_runtime_api
-
FAILED tests/integration/test_rds.py::TestRDS::test_lambda_extensions - Asser...
-
FAILED tests/integration/test_serverless.py::TestServerless::test_websocket_deployed
-
FAILED tests/integration/test_xray.py::TestXRay::test_collect_lambda_traces