diff --git a/AutomatedTesting/Gem/PythonTests/AWS/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/AWS/CMakeLists.txt
index 2a5e1d7cab..d6740152a7 100644
--- a/AutomatedTesting/Gem/PythonTests/AWS/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/AWS/CMakeLists.txt
@@ -13,7 +13,8 @@
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
# Only enable AWS automated tests on Windows
- if(NOT "${PAL_PLATFORM_NAME}" STREQUAL "Windows")
+ set(SUPPORTED_PLATFORMS "Windows" "Linux")
+ if (NOT "${PAL_PLATFORM_NAME}" IN_LIST SUPPORTED_PLATFORMS)
return()
endif()
@@ -23,7 +24,6 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
TEST_SERIAL
PATH ${CMAKE_CURRENT_LIST_DIR}/${PAL_PLATFORM_NAME}/
RUNTIME_DEPENDENCIES
- Legacy::Editor
AZ::AssetProcessor
AutomatedTesting.GameLauncher
AutomatedTesting.Assets
diff --git a/AutomatedTesting/Gem/PythonTests/AWS/README.md b/AutomatedTesting/Gem/PythonTests/AWS/README.md
index 0d046cbe4c..a25f39d9c2 100644
--- a/AutomatedTesting/Gem/PythonTests/AWS/README.md
+++ b/AutomatedTesting/Gem/PythonTests/AWS/README.md
@@ -2,30 +2,61 @@
## Prerequisites
1. Build the O3DE Editor and AutomatedTesting.GameLauncher in Profile.
-2. AWS CLI is installed and configured following [Configuration and Credential File Settings](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html).
-3. [AWS Cloud Development Kit (CDK)](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_install) is installed.
+2. Install the latest version of NodeJs.
+3. AWS CLI is installed and configured following [Configuration and Credential File Settings](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html).
+4. [AWS Cloud Development Kit (CDK)](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_install) is installed.
## Deploy CDK Applications
1. Go to the AWS IAM console and create an IAM role called o3de-automation-tests which adds your own account as as a trusted entity and uses the "AdministratorAccess" permissions policy.
-2. Copy {engine_root}\scripts\build\Platform\Windows\deploy_cdk_applications.cmd to your engine root folder.
-3. Open a new Command Prompt window at the engine root and set the following environment variables:
-```
- Set O3DE_AWS_PROJECT_NAME=AWSAUTO
- Set O3DE_AWS_DEPLOY_REGION=us-east-1
- Set O3DE_AWS_DEPLOY_ACCOUNT={your_aws_account_id}
- Set ASSUME_ROLE_ARN=arn:aws:iam::{your_aws_account_id}:role/o3de-automation-tests
- Set COMMIT_ID=HEAD
-```
-4. In the same Command Prompt window, Deploy the CDK applications for AWS gems by running deploy_cdk_applications.cmd.
+2. Copy the following deployment script to your engine root folder:
+ * Windows (Command Prompt)
+ ```
+ {engine_root}\scripts\build\Platform\Windows\deploy_cdk_applications.cmd
+ ```
+ * Linux
+ ```
+ {engine_root}/scripts/build/Platform/Linux/deploy_cdk_applications.sh
+ ```
+3. Open a new CLI window at the engine root and set the following environment variables:
+ * Windows
+ ```
+ Set O3DE_AWS_PROJECT_NAME=AWSAUTO
+ Set O3DE_AWS_DEPLOY_REGION=us-east-1
+ Set ASSUME_ROLE_ARN=arn:aws:iam::{your_aws_account_id}:role/o3de-automation-tests
+ Set COMMIT_ID=HEAD
+ ```
+ * Linux
+ ```
+ export O3DE_AWS_PROJECT_NAME=AWSAUTO
+ export O3DE_AWS_DEPLOY_REGION=us-east-1
+ export ASSUME_ROLE_ARN=arn:aws:iam::{your_aws_account_id}:role/o3de-automation-tests
+ export COMMIT_ID=HEAD
+ ```
+4. In the same CLI window, Deploy the CDK applications for AWS gems by running deploy_cdk_applications.cmd.
## Run Automation Tests
### CLI
-In the same Command Prompt window, run the following CLI command:
-python\python.cmd -m pytest {path_to_the_test_file} --build-directory {directory_to_the_profile_build}
+1. In the same CLI window, run the following CLI command:
+ * Windows
+ ```
+ python\python.cmd -m pytest {path_to_the_test_file} --build-directory {directory_to_the_profile_build}
+ ```
+ * Linux
+ ```
+ python/python.sh -m pytest {path_to_the_test_file} --build-directory {directory_to_the_profile_build}
+ ```
### Pycharm
You can also run any specific automation test directly from Pycharm by providing the "--build-directory" argument in the Run Configuration.
## Destroy CDK Applications
-1. Copy {engine_root}\scripts\build\Platform\Windows\destroy_cdk_applications.cmd to your engine root folder.
-2. In the same Command Prompt window, destroy the CDK applications for AWS gems by running destroy_cdk_applications.cmd.
\ No newline at end of file
+1. Copy the following destruction script to your engine root folder:
+ * Windows
+ ```
+ {engine_root}\scripts\build\Platform\Windows\destroy_cdk_applications.cmd
+ ```
+ * Linux
+ ```
+ {engine_root}/scripts/build/Platform/Linux/destroy_cdk_applications.sh
+ ```
+2. In the same CLI window, destroy the CDK applications for AWS gems by running destroy_cdk_applications.cmd.
diff --git a/AutomatedTesting/Gem/PythonTests/AWS/Windows/aws_metrics/__init__.py b/AutomatedTesting/Gem/PythonTests/AWS/Windows/aws_metrics/__init__.py
deleted file mode 100644
index 50cbb262dd..0000000000
--- a/AutomatedTesting/Gem/PythonTests/AWS/Windows/aws_metrics/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-"""
-Copyright (c) Contributors to the Open 3D Engine Project.
-For complete copyright and license terms please see the LICENSE at the root of this distribution.
-
-SPDX-License-Identifier: Apache-2.0 OR MIT
-"""
diff --git a/AutomatedTesting/Gem/PythonTests/AWS/Windows/core/__init__.py b/AutomatedTesting/Gem/PythonTests/AWS/aws_metrics/__init__.py
similarity index 100%
rename from AutomatedTesting/Gem/PythonTests/AWS/Windows/core/__init__.py
rename to AutomatedTesting/Gem/PythonTests/AWS/aws_metrics/__init__.py
diff --git a/AutomatedTesting/Gem/PythonTests/AWS/Windows/aws_metrics/aws_metrics_automation_test.py b/AutomatedTesting/Gem/PythonTests/AWS/aws_metrics/aws_metrics_automation_test.py
similarity index 96%
rename from AutomatedTesting/Gem/PythonTests/AWS/Windows/aws_metrics/aws_metrics_automation_test.py
rename to AutomatedTesting/Gem/PythonTests/AWS/aws_metrics/aws_metrics_automation_test.py
index 6f3113d771..77d71df370 100644
--- a/AutomatedTesting/Gem/PythonTests/AWS/Windows/aws_metrics/aws_metrics_automation_test.py
+++ b/AutomatedTesting/Gem/PythonTests/AWS/aws_metrics/aws_metrics_automation_test.py
@@ -1,289 +1,289 @@
-"""
-Copyright (c) Contributors to the Open 3D Engine Project.
-For complete copyright and license terms please see the LICENSE at the root of this distribution.
-
-SPDX-License-Identifier: Apache-2.0 OR MIT
-"""
-
-import logging
-import os
-import pytest
-import typing
-from datetime import datetime
-
-import ly_test_tools.log.log_monitor
-
-from AWS.common import constants
-from AWS.common.resource_mappings import AWS_RESOURCE_MAPPINGS_ACCOUNT_ID_KEY
-from .aws_metrics_custom_thread import AWSMetricsThread
-
-# fixture imports
-from assetpipeline.ap_fixtures.asset_processor_fixture import asset_processor
-from .aws_metrics_utils import aws_metrics_utils
-
-AWS_METRICS_FEATURE_NAME = 'AWSMetrics'
-
-logger = logging.getLogger(__name__)
-
-
-def setup(launcher: pytest.fixture,
- asset_processor: pytest.fixture) -> pytest.fixture:
- """
- Set up the resource mapping configuration and start the log monitor.
- :param launcher: Client launcher for running the test level.
- :param asset_processor: asset_processor fixture.
- :return log monitor object.
- """
- asset_processor.start()
- asset_processor.wait_for_idle()
-
- file_to_monitor = os.path.join(launcher.workspace.paths.project_log(), constants.GAME_LOG_NAME)
-
- # Initialize the log monitor.
- log_monitor = ly_test_tools.log.log_monitor.LogMonitor(launcher=launcher, log_file_path=file_to_monitor)
-
- return log_monitor
-
-
-def monitor_metrics_submission(log_monitor: pytest.fixture) -> None:
- """
- Monitor the messages and notifications for submitting metrics.
- :param log_monitor: Log monitor to check the log messages.
- """
- expected_lines = [
- '(Script) - Submitted metrics without buffer.',
- '(Script) - Submitted metrics with buffer.',
- '(Script) - Flushed the buffered metrics.',
- '(Script) - Metrics is sent successfully.'
- ]
-
- unexpected_lines = [
- '(Script) - Failed to submit metrics without buffer.',
- '(Script) - Failed to submit metrics with buffer.',
- '(Script) - Failed to send metrics.'
- ]
-
- result = log_monitor.monitor_log_for_lines(
- expected_lines=expected_lines,
- unexpected_lines=unexpected_lines,
- halt_on_unexpected=True)
-
- # Assert the log monitor detected expected lines and did not detect any unexpected lines.
- assert result, (
- f'Log monitoring failed. Used expected_lines values: {expected_lines} & '
- f'unexpected_lines values: {unexpected_lines}')
-
-
-def query_metrics_from_s3(aws_metrics_utils: pytest.fixture, resource_mappings: pytest.fixture) -> None:
- """
- Verify that the metrics events are delivered to the S3 bucket and can be queried.
- :param aws_metrics_utils: aws_metrics_utils fixture.
- :param resource_mappings: resource_mappings fixture.
- """
- aws_metrics_utils.verify_s3_delivery(
- resource_mappings.get_resource_name_id('AWSMetrics.AnalyticsBucketName')
- )
- logger.info('Metrics are sent to S3.')
-
- aws_metrics_utils.run_glue_crawler(
- resource_mappings.get_resource_name_id('AWSMetrics.EventsCrawlerName'))
-
- # Remove the events_json table if exists so that the sample query can create a table with the same name.
- aws_metrics_utils.delete_table(resource_mappings.get_resource_name_id('AWSMetrics.EventDatabaseName'), 'events_json')
- aws_metrics_utils.run_named_queries(resource_mappings.get_resource_name_id('AWSMetrics.AthenaWorkGroupName'))
- logger.info('Query metrics from S3 successfully.')
-
-
-def verify_operational_metrics(aws_metrics_utils: pytest.fixture,
- resource_mappings: pytest.fixture, start_time: datetime) -> None:
- """
- Verify that operational health metrics are delivered to CloudWatch.
- :param aws_metrics_utils: aws_metrics_utils fixture.
- :param resource_mappings: resource_mappings fixture.
- :param start_time: Time when the game launcher starts.
- """
- aws_metrics_utils.verify_cloud_watch_delivery(
- 'AWS/Lambda',
- 'Invocations',
- [{'Name': 'FunctionName',
- 'Value': resource_mappings.get_resource_name_id('AWSMetrics.AnalyticsProcessingLambdaName')}],
- start_time)
- logger.info('AnalyticsProcessingLambda metrics are sent to CloudWatch.')
-
- aws_metrics_utils.verify_cloud_watch_delivery(
- 'AWS/Lambda',
- 'Invocations',
- [{'Name': 'FunctionName',
- 'Value': resource_mappings.get_resource_name_id('AWSMetrics.EventProcessingLambdaName')}],
- start_time)
- logger.info('EventsProcessingLambda metrics are sent to CloudWatch.')
-
-
-def update_kinesis_analytics_application_status(aws_metrics_utils: pytest.fixture,
- resource_mappings: pytest.fixture, start_application: bool) -> None:
- """
- Update the Kinesis analytics application to start or stop it.
- :param aws_metrics_utils: aws_metrics_utils fixture.
- :param resource_mappings: resource_mappings fixture.
- :param start_application: whether to start or stop the application.
- """
- if start_application:
- aws_metrics_utils.start_kinesis_data_analytics_application(
- resource_mappings.get_resource_name_id('AWSMetrics.AnalyticsApplicationName'))
- else:
- aws_metrics_utils.stop_kinesis_data_analytics_application(
- resource_mappings.get_resource_name_id('AWSMetrics.AnalyticsApplicationName'))
-
-@pytest.mark.SUITE_awsi
-@pytest.mark.usefixtures('automatic_process_killer')
-@pytest.mark.usefixtures('aws_credentials')
-@pytest.mark.usefixtures('resource_mappings')
-@pytest.mark.parametrize('assume_role_arn', [constants.ASSUME_ROLE_ARN])
-@pytest.mark.parametrize('feature_name', [AWS_METRICS_FEATURE_NAME])
-@pytest.mark.parametrize('profile_name', ['AWSAutomationTest'])
-@pytest.mark.parametrize('project', ['AutomatedTesting'])
-@pytest.mark.parametrize('region_name', [constants.AWS_REGION])
-@pytest.mark.parametrize('resource_mappings_filename', [constants.AWS_RESOURCE_MAPPING_FILE_NAME])
-@pytest.mark.parametrize('session_name', [constants.SESSION_NAME])
-@pytest.mark.parametrize('stacks', [[f'{constants.AWS_PROJECT_NAME}-{AWS_METRICS_FEATURE_NAME}-{constants.AWS_REGION}']])
-class TestAWSMetricsWindows(object):
- """
- Test class to verify the real-time and batch analytics for metrics.
- """
- @pytest.mark.parametrize('level', ['AWS/Metrics'])
- def test_realtime_and_batch_analytics(self,
- level: str,
- launcher: pytest.fixture,
- asset_processor: pytest.fixture,
- workspace: pytest.fixture,
- aws_utils: pytest.fixture,
- resource_mappings: pytest.fixture,
- aws_metrics_utils: pytest.fixture):
- """
- Verify that the metrics events are sent to CloudWatch and S3 for analytics.
- """
- # Start Kinesis analytics application on a separate thread to avoid blocking the test.
- kinesis_analytics_application_thread = AWSMetricsThread(target=update_kinesis_analytics_application_status,
- args=(aws_metrics_utils, resource_mappings, True))
- kinesis_analytics_application_thread.start()
-
- log_monitor = setup(launcher, asset_processor)
-
- # Kinesis analytics application needs to be in the running state before we start the game launcher.
- kinesis_analytics_application_thread.join()
- launcher.args = ['+LoadLevel', level]
- launcher.args.extend(['-rhi=null'])
- start_time = datetime.utcnow()
- with launcher.start(launch_ap=False):
- monitor_metrics_submission(log_monitor)
-
- # Verify that real-time analytics metrics are delivered to CloudWatch.
- aws_metrics_utils.verify_cloud_watch_delivery(
- AWS_METRICS_FEATURE_NAME,
- 'TotalLogins',
- [],
- start_time)
- logger.info('Real-time metrics are sent to CloudWatch.')
-
- # Run time-consuming operations on separate threads to avoid blocking the test.
- operational_threads = list()
- operational_threads.append(
- AWSMetricsThread(target=query_metrics_from_s3,
- args=(aws_metrics_utils, resource_mappings)))
- operational_threads.append(
- AWSMetricsThread(target=verify_operational_metrics,
- args=(aws_metrics_utils, resource_mappings, start_time)))
- operational_threads.append(
- AWSMetricsThread(target=update_kinesis_analytics_application_status,
- args=(aws_metrics_utils, resource_mappings, False)))
- for thread in operational_threads:
- thread.start()
- for thread in operational_threads:
- thread.join()
-
- @pytest.mark.parametrize('level', ['AWS/Metrics'])
- def test_realtime_and_batch_analytics_no_global_accountid(self,
- level: str,
- launcher: pytest.fixture,
- asset_processor: pytest.fixture,
- workspace: pytest.fixture,
- aws_utils: pytest.fixture,
- resource_mappings: pytest.fixture,
- aws_metrics_utils: pytest.fixture):
- """
- Verify that the metrics events are sent to CloudWatch and S3 for analytics.
- """
- # Remove top-level account ID from resource mappings
- resource_mappings.clear_select_keys([AWS_RESOURCE_MAPPINGS_ACCOUNT_ID_KEY])
- # Start Kinesis analytics application on a separate thread to avoid blocking the test.
- kinesis_analytics_application_thread = AWSMetricsThread(target=update_kinesis_analytics_application_status,
- args=(aws_metrics_utils, resource_mappings, True))
- kinesis_analytics_application_thread.start()
-
- log_monitor = setup(launcher, asset_processor)
-
- # Kinesis analytics application needs to be in the running state before we start the game launcher.
- kinesis_analytics_application_thread.join()
- launcher.args = ['+LoadLevel', level]
- launcher.args.extend(['-rhi=null'])
- start_time = datetime.utcnow()
- with launcher.start(launch_ap=False):
- monitor_metrics_submission(log_monitor)
-
- # Verify that real-time analytics metrics are delivered to CloudWatch.
- aws_metrics_utils.verify_cloud_watch_delivery(
- AWS_METRICS_FEATURE_NAME,
- 'TotalLogins',
- [],
- start_time)
- logger.info('Real-time metrics are sent to CloudWatch.')
-
- # Run time-consuming operations on separate threads to avoid blocking the test.
- operational_threads = list()
- operational_threads.append(
- AWSMetricsThread(target=query_metrics_from_s3,
- args=(aws_metrics_utils, resource_mappings)))
- operational_threads.append(
- AWSMetricsThread(target=verify_operational_metrics,
- args=(aws_metrics_utils, resource_mappings, start_time)))
- operational_threads.append(
- AWSMetricsThread(target=update_kinesis_analytics_application_status,
- args=(aws_metrics_utils, resource_mappings, False)))
- for thread in operational_threads:
- thread.start()
- for thread in operational_threads:
- thread.join()
-
- @pytest.mark.parametrize('level', ['AWS/Metrics'])
- def test_unauthorized_user_request_rejected(self,
- level: str,
- launcher: pytest.fixture,
- asset_processor: pytest.fixture,
- workspace: pytest.fixture):
- """
- Verify that unauthorized users cannot send metrics events to the AWS backed backend.
- """
- log_monitor = setup(launcher, asset_processor)
-
- # Set invalid AWS credentials.
- launcher.args = ['+LoadLevel', level, '+cl_awsAccessKey', 'AKIAIOSFODNN7EXAMPLE',
- '+cl_awsSecretKey', 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY']
- launcher.args.extend(['-rhi=null'])
-
- with launcher.start(launch_ap=False):
- result = log_monitor.monitor_log_for_lines(
- expected_lines=['(Script) - Failed to send metrics.'],
- unexpected_lines=['(Script) - Metrics is sent successfully.'],
- halt_on_unexpected=True)
- assert result, 'Metrics events are sent successfully by unauthorized user'
- logger.info('Unauthorized user is rejected to send metrics.')
-
- def test_clean_up_s3_bucket(self,
- aws_utils: pytest.fixture,
- resource_mappings: pytest.fixture,
- aws_metrics_utils: pytest.fixture):
- """
- Clear the analytics bucket objects so that the S3 bucket can be destroyed during tear down.
- """
- aws_metrics_utils.empty_bucket(
- resource_mappings.get_resource_name_id('AWSMetrics.AnalyticsBucketName'))
+"""
+Copyright (c) Contributors to the Open 3D Engine Project.
+For complete copyright and license terms please see the LICENSE at the root of this distribution.
+
+SPDX-License-Identifier: Apache-2.0 OR MIT
+"""
+
+import logging
+import os
+import pytest
+import typing
+from datetime import datetime
+
+import ly_test_tools.log.log_monitor
+
+from AWS.common import constants
+from AWS.common.resource_mappings import AWS_RESOURCE_MAPPINGS_ACCOUNT_ID_KEY
+from .aws_metrics_custom_thread import AWSMetricsThread
+
+# fixture imports
+from assetpipeline.ap_fixtures.asset_processor_fixture import asset_processor
+from .aws_metrics_utils import aws_metrics_utils
+
+AWS_METRICS_FEATURE_NAME = 'AWSMetrics'
+
+logger = logging.getLogger(__name__)
+
+
+def setup(launcher: pytest.fixture,
+ asset_processor: pytest.fixture) -> pytest.fixture:
+ """
+ Set up the resource mapping configuration and start the log monitor.
+ :param launcher: Client launcher for running the test level.
+ :param asset_processor: asset_processor fixture.
+ :return log monitor object.
+ """
+ asset_processor.start()
+ asset_processor.wait_for_idle()
+
+ file_to_monitor = os.path.join(launcher.workspace.paths.project_log(), constants.GAME_LOG_NAME)
+
+ # Initialize the log monitor.
+ log_monitor = ly_test_tools.log.log_monitor.LogMonitor(launcher=launcher, log_file_path=file_to_monitor)
+
+ return log_monitor
+
+
+def monitor_metrics_submission(log_monitor: pytest.fixture) -> None:
+ """
+ Monitor the messages and notifications for submitting metrics.
+ :param log_monitor: Log monitor to check the log messages.
+ """
+ expected_lines = [
+ '(Script) - Submitted metrics without buffer.',
+ '(Script) - Submitted metrics with buffer.',
+ '(Script) - Flushed the buffered metrics.',
+ '(Script) - Metrics is sent successfully.'
+ ]
+
+ unexpected_lines = [
+ '(Script) - Failed to submit metrics without buffer.',
+ '(Script) - Failed to submit metrics with buffer.',
+ '(Script) - Failed to send metrics.'
+ ]
+
+ result = log_monitor.monitor_log_for_lines(
+ expected_lines=expected_lines,
+ unexpected_lines=unexpected_lines,
+ halt_on_unexpected=True)
+
+ # Assert the log monitor detected expected lines and did not detect any unexpected lines.
+ assert result, (
+ f'Log monitoring failed. Used expected_lines values: {expected_lines} & '
+ f'unexpected_lines values: {unexpected_lines}')
+
+
+def query_metrics_from_s3(aws_metrics_utils: pytest.fixture, resource_mappings: pytest.fixture) -> None:
+ """
+ Verify that the metrics events are delivered to the S3 bucket and can be queried.
+ :param aws_metrics_utils: aws_metrics_utils fixture.
+ :param resource_mappings: resource_mappings fixture.
+ """
+ aws_metrics_utils.verify_s3_delivery(
+ resource_mappings.get_resource_name_id('AWSMetrics.AnalyticsBucketName')
+ )
+ logger.info('Metrics are sent to S3.')
+
+ aws_metrics_utils.run_glue_crawler(
+ resource_mappings.get_resource_name_id('AWSMetrics.EventsCrawlerName'))
+
+ # Remove the events_json table if exists so that the sample query can create a table with the same name.
+ aws_metrics_utils.delete_table(resource_mappings.get_resource_name_id('AWSMetrics.EventDatabaseName'), 'events_json')
+ aws_metrics_utils.run_named_queries(resource_mappings.get_resource_name_id('AWSMetrics.AthenaWorkGroupName'))
+ logger.info('Query metrics from S3 successfully.')
+
+
+def verify_operational_metrics(aws_metrics_utils: pytest.fixture,
+ resource_mappings: pytest.fixture, start_time: datetime) -> None:
+ """
+ Verify that operational health metrics are delivered to CloudWatch.
+ :param aws_metrics_utils: aws_metrics_utils fixture.
+ :param resource_mappings: resource_mappings fixture.
+ :param start_time: Time when the game launcher starts.
+ """
+ aws_metrics_utils.verify_cloud_watch_delivery(
+ 'AWS/Lambda',
+ 'Invocations',
+ [{'Name': 'FunctionName',
+ 'Value': resource_mappings.get_resource_name_id('AWSMetrics.AnalyticsProcessingLambdaName')}],
+ start_time)
+ logger.info('AnalyticsProcessingLambda metrics are sent to CloudWatch.')
+
+ aws_metrics_utils.verify_cloud_watch_delivery(
+ 'AWS/Lambda',
+ 'Invocations',
+ [{'Name': 'FunctionName',
+ 'Value': resource_mappings.get_resource_name_id('AWSMetrics.EventProcessingLambdaName')}],
+ start_time)
+ logger.info('EventsProcessingLambda metrics are sent to CloudWatch.')
+
+
+def update_kinesis_analytics_application_status(aws_metrics_utils: pytest.fixture,
+ resource_mappings: pytest.fixture, start_application: bool) -> None:
+ """
+ Update the Kinesis analytics application to start or stop it.
+ :param aws_metrics_utils: aws_metrics_utils fixture.
+ :param resource_mappings: resource_mappings fixture.
+ :param start_application: whether to start or stop the application.
+ """
+ if start_application:
+ aws_metrics_utils.start_kinesis_data_analytics_application(
+ resource_mappings.get_resource_name_id('AWSMetrics.AnalyticsApplicationName'))
+ else:
+ aws_metrics_utils.stop_kinesis_data_analytics_application(
+ resource_mappings.get_resource_name_id('AWSMetrics.AnalyticsApplicationName'))
+
+@pytest.mark.SUITE_awsi
+@pytest.mark.usefixtures('automatic_process_killer')
+@pytest.mark.usefixtures('aws_credentials')
+@pytest.mark.usefixtures('resource_mappings')
+@pytest.mark.parametrize('assume_role_arn', [constants.ASSUME_ROLE_ARN])
+@pytest.mark.parametrize('feature_name', [AWS_METRICS_FEATURE_NAME])
+@pytest.mark.parametrize('profile_name', ['AWSAutomationTest'])
+@pytest.mark.parametrize('project', ['AutomatedTesting'])
+@pytest.mark.parametrize('region_name', [constants.AWS_REGION])
+@pytest.mark.parametrize('resource_mappings_filename', [constants.AWS_RESOURCE_MAPPING_FILE_NAME])
+@pytest.mark.parametrize('session_name', [constants.SESSION_NAME])
+@pytest.mark.parametrize('stacks', [[f'{constants.AWS_PROJECT_NAME}-{AWS_METRICS_FEATURE_NAME}-{constants.AWS_REGION}']])
+class TestAWSMetricsWindows(object):
+ """
+ Test class to verify the real-time and batch analytics for metrics.
+ """
+ @pytest.mark.parametrize('level', ['levels/aws/metrics/metrics.spawnable'])
+ def test_realtime_and_batch_analytics(self,
+ level: str,
+ launcher: pytest.fixture,
+ asset_processor: pytest.fixture,
+ workspace: pytest.fixture,
+ aws_utils: pytest.fixture,
+ resource_mappings: pytest.fixture,
+ aws_metrics_utils: pytest.fixture):
+ """
+ Verify that the metrics events are sent to CloudWatch and S3 for analytics.
+ """
+ # Start Kinesis analytics application on a separate thread to avoid blocking the test.
+ kinesis_analytics_application_thread = AWSMetricsThread(target=update_kinesis_analytics_application_status,
+ args=(aws_metrics_utils, resource_mappings, True))
+ kinesis_analytics_application_thread.start()
+
+ log_monitor = setup(launcher, asset_processor)
+
+ # Kinesis analytics application needs to be in the running state before we start the game launcher.
+ kinesis_analytics_application_thread.join()
+ launcher.args = ['+LoadLevel', level]
+ launcher.args.extend(['-rhi=null'])
+ start_time = datetime.utcnow()
+ with launcher.start(launch_ap=False):
+ monitor_metrics_submission(log_monitor)
+
+ # Verify that real-time analytics metrics are delivered to CloudWatch.
+ aws_metrics_utils.verify_cloud_watch_delivery(
+ AWS_METRICS_FEATURE_NAME,
+ 'TotalLogins',
+ [],
+ start_time)
+ logger.info('Real-time metrics are sent to CloudWatch.')
+
+ # Run time-consuming operations on separate threads to avoid blocking the test.
+ operational_threads = list()
+ operational_threads.append(
+ AWSMetricsThread(target=query_metrics_from_s3,
+ args=(aws_metrics_utils, resource_mappings)))
+ operational_threads.append(
+ AWSMetricsThread(target=verify_operational_metrics,
+ args=(aws_metrics_utils, resource_mappings, start_time)))
+ operational_threads.append(
+ AWSMetricsThread(target=update_kinesis_analytics_application_status,
+ args=(aws_metrics_utils, resource_mappings, False)))
+ for thread in operational_threads:
+ thread.start()
+ for thread in operational_threads:
+ thread.join()
+
+ @pytest.mark.parametrize('level', ['levels/aws/metrics/metrics.spawnable'])
+ def test_realtime_and_batch_analytics_no_global_accountid(self,
+ level: str,
+ launcher: pytest.fixture,
+ asset_processor: pytest.fixture,
+ workspace: pytest.fixture,
+ aws_utils: pytest.fixture,
+ resource_mappings: pytest.fixture,
+ aws_metrics_utils: pytest.fixture):
+ """
+ Verify that the metrics events are sent to CloudWatch and S3 for analytics.
+ """
+ # Remove top-level account ID from resource mappings
+ resource_mappings.clear_select_keys([AWS_RESOURCE_MAPPINGS_ACCOUNT_ID_KEY])
+ # Start Kinesis analytics application on a separate thread to avoid blocking the test.
+ kinesis_analytics_application_thread = AWSMetricsThread(target=update_kinesis_analytics_application_status,
+ args=(aws_metrics_utils, resource_mappings, True))
+ kinesis_analytics_application_thread.start()
+
+ log_monitor = setup(launcher, asset_processor)
+
+ # Kinesis analytics application needs to be in the running state before we start the game launcher.
+ kinesis_analytics_application_thread.join()
+ launcher.args = ['+LoadLevel', level]
+ launcher.args.extend(['-rhi=null'])
+ start_time = datetime.utcnow()
+ with launcher.start(launch_ap=False):
+ monitor_metrics_submission(log_monitor)
+
+ # Verify that real-time analytics metrics are delivered to CloudWatch.
+ aws_metrics_utils.verify_cloud_watch_delivery(
+ AWS_METRICS_FEATURE_NAME,
+ 'TotalLogins',
+ [],
+ start_time)
+ logger.info('Real-time metrics are sent to CloudWatch.')
+
+ # Run time-consuming operations on separate threads to avoid blocking the test.
+ operational_threads = list()
+ operational_threads.append(
+ AWSMetricsThread(target=query_metrics_from_s3,
+ args=(aws_metrics_utils, resource_mappings)))
+ operational_threads.append(
+ AWSMetricsThread(target=verify_operational_metrics,
+ args=(aws_metrics_utils, resource_mappings, start_time)))
+ operational_threads.append(
+ AWSMetricsThread(target=update_kinesis_analytics_application_status,
+ args=(aws_metrics_utils, resource_mappings, False)))
+ for thread in operational_threads:
+ thread.start()
+ for thread in operational_threads:
+ thread.join()
+
+ @pytest.mark.parametrize('level', ['levels/aws/metrics/metrics.spawnable'])
+ def test_unauthorized_user_request_rejected(self,
+ level: str,
+ launcher: pytest.fixture,
+ asset_processor: pytest.fixture,
+ workspace: pytest.fixture):
+ """
+ Verify that unauthorized users cannot send metrics events to the AWS backed backend.
+ """
+ log_monitor = setup(launcher, asset_processor)
+
+ # Set invalid AWS credentials.
+ launcher.args = ['+LoadLevel', level, '+cl_awsAccessKey', 'AKIAIOSFODNN7EXAMPLE',
+ '+cl_awsSecretKey', 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY']
+ launcher.args.extend(['-rhi=null'])
+
+ with launcher.start(launch_ap=False):
+ result = log_monitor.monitor_log_for_lines(
+ expected_lines=['(Script) - Failed to send metrics.'],
+ unexpected_lines=['(Script) - Metrics is sent successfully.'],
+ halt_on_unexpected=True)
+ assert result, 'Metrics events are sent successfully by unauthorized user'
+ logger.info('Unauthorized user is rejected to send metrics.')
+
+ def test_clean_up_s3_bucket(self,
+ aws_utils: pytest.fixture,
+ resource_mappings: pytest.fixture,
+ aws_metrics_utils: pytest.fixture):
+ """
+ Clear the analytics bucket objects so that the S3 bucket can be destroyed during tear down.
+ """
+ aws_metrics_utils.empty_bucket(
+ resource_mappings.get_resource_name_id('AWSMetrics.AnalyticsBucketName'))
diff --git a/AutomatedTesting/Gem/PythonTests/AWS/Windows/aws_metrics/aws_metrics_custom_thread.py b/AutomatedTesting/Gem/PythonTests/AWS/aws_metrics/aws_metrics_custom_thread.py
similarity index 96%
rename from AutomatedTesting/Gem/PythonTests/AWS/Windows/aws_metrics/aws_metrics_custom_thread.py
rename to AutomatedTesting/Gem/PythonTests/AWS/aws_metrics/aws_metrics_custom_thread.py
index 1bba9c3e39..99f9072c4b 100644
--- a/AutomatedTesting/Gem/PythonTests/AWS/Windows/aws_metrics/aws_metrics_custom_thread.py
+++ b/AutomatedTesting/Gem/PythonTests/AWS/aws_metrics/aws_metrics_custom_thread.py
@@ -1,29 +1,29 @@
-"""
-Copyright (c) Contributors to the Open 3D Engine Project.
-For complete copyright and license terms please see the LICENSE at the root of this distribution.
-
-SPDX-License-Identifier: Apache-2.0 OR MIT
-"""
-
-from threading import Thread
-
-
-class AWSMetricsThread(Thread):
- """
- Custom thread for raising assertion errors on the main thread.
- """
- def __init__(self, **kwargs):
- super().__init__(**kwargs)
- self._error = None
-
- def run(self) -> None:
- try:
- super().run()
- except AssertionError as e:
- self._error = e
-
- def join(self, **kwargs) -> None:
- super().join(**kwargs)
-
- if self._error:
- raise AssertionError(self._error)
+"""
+Copyright (c) Contributors to the Open 3D Engine Project.
+For complete copyright and license terms please see the LICENSE at the root of this distribution.
+
+SPDX-License-Identifier: Apache-2.0 OR MIT
+"""
+
+from threading import Thread
+
+
+class AWSMetricsThread(Thread):
+ """
+ Custom thread for raising assertion errors on the main thread.
+ """
+ def __init__(self, **kwargs):
+ super().__init__(**kwargs)
+ self._error = None
+
+ def run(self) -> None:
+ try:
+ super().run()
+ except AssertionError as e:
+ self._error = e
+
+ def join(self, **kwargs) -> None:
+ super().join(**kwargs)
+
+ if self._error:
+ raise AssertionError(self._error)
diff --git a/AutomatedTesting/Gem/PythonTests/AWS/Windows/aws_metrics/aws_metrics_utils.py b/AutomatedTesting/Gem/PythonTests/AWS/aws_metrics/aws_metrics_utils.py
similarity index 97%
rename from AutomatedTesting/Gem/PythonTests/AWS/Windows/aws_metrics/aws_metrics_utils.py
rename to AutomatedTesting/Gem/PythonTests/AWS/aws_metrics/aws_metrics_utils.py
index e7eb486d02..64ee224f4e 100644
--- a/AutomatedTesting/Gem/PythonTests/AWS/Windows/aws_metrics/aws_metrics_utils.py
+++ b/AutomatedTesting/Gem/PythonTests/AWS/aws_metrics/aws_metrics_utils.py
@@ -1,239 +1,239 @@
-"""
-Copyright (c) Contributors to the Open 3D Engine Project.
-For complete copyright and license terms please see the LICENSE at the root of this distribution.
-
-SPDX-License-Identifier: Apache-2.0 OR MIT
-"""
-
-import logging
-import pathlib
-import pytest
-import typing
-
-from datetime import datetime
-from botocore.exceptions import WaiterError
-
-from .aws_metrics_waiters import KinesisAnalyticsApplicationUpdatedWaiter, \
- CloudWatchMetricsDeliveredWaiter, DataLakeMetricsDeliveredWaiter, GlueCrawlerReadyWaiter
-
-logging.getLogger('boto').setLevel(logging.CRITICAL)
-
-# Expected directory and file extension for the S3 objects.
-EXPECTED_S3_DIRECTORY = 'firehose_events/'
-EXPECTED_S3_OBJECT_EXTENSION = '.parquet'
-
-
-class AWSMetricsUtils:
- """
- Provide utils functions for the AWSMetrics gem to interact with the deployed resources.
- """
-
- def __init__(self, aws_utils: pytest.fixture):
- self._aws_util = aws_utils
-
- def start_kinesis_data_analytics_application(self, application_name: str) -> None:
- """
- Start the Kenisis Data Analytics application for real-time analytics.
- :param application_name: Name of the Kenisis Data Analytics application.
- """
- input_id = self.get_kinesis_analytics_application_input_id(application_name)
- assert input_id, 'invalid Kinesis Data Analytics application input.'
-
- client = self._aws_util.client('kinesisanalytics')
- try:
- client.start_application(
- ApplicationName=application_name,
- InputConfigurations=[
- {
- 'Id': input_id,
- 'InputStartingPositionConfiguration': {
- 'InputStartingPosition': 'NOW'
- }
- },
- ]
- )
- except client.exceptions.ResourceInUseException:
- # The application has been started.
- return
-
- try:
- KinesisAnalyticsApplicationUpdatedWaiter(client, 'RUNNING').wait(application_name=application_name)
- except WaiterError as e:
- assert False, f'Failed to start the Kinesis Data Analytics application: {str(e)}.'
-
- def get_kinesis_analytics_application_input_id(self, application_name: str) -> str:
- """
- Get the input ID for the Kenisis Data Analytics application.
- :param application_name: Name of the Kenisis Data Analytics application.
- :return: Input ID for the Kenisis Data Analytics application.
- """
- client = self._aws_util.client('kinesisanalytics')
- response = client.describe_application(
- ApplicationName=application_name
- )
- if not response:
- return ''
- input_descriptions = response.get('ApplicationDetail', {}).get('InputDescriptions', [])
- if len(input_descriptions) != 1:
- return ''
-
- return input_descriptions[0].get('InputId', '')
-
- def stop_kinesis_data_analytics_application(self, application_name: str) -> None:
- """
- Stop the Kenisis Data Analytics application.
- :param application_name: Name of the Kenisis Data Analytics application.
- """
- client = self._aws_util.client('kinesisanalytics')
- client.stop_application(
- ApplicationName=application_name
- )
-
- try:
- KinesisAnalyticsApplicationUpdatedWaiter(client, 'READY').wait(application_name=application_name)
- except WaiterError as e:
- assert False, f'Failed to stop the Kinesis Data Analytics application: {str(e)}.'
-
- def verify_cloud_watch_delivery(self, namespace: str, metrics_name: str,
- dimensions: typing.List[dict], start_time: datetime) -> None:
- """
- Verify that the expected metrics is delivered to CloudWatch.
- :param namespace: Namespace of the metrics.
- :param metrics_name: Name of the metrics.
- :param dimensions: Dimensions of the metrics.
- :param start_time: Start time for generating the metrics.
- """
- client = self._aws_util.client('cloudwatch')
-
- try:
- CloudWatchMetricsDeliveredWaiter(client).wait(
- namespace=namespace,
- metrics_name=metrics_name,
- dimensions=dimensions,
- start_time=start_time
- )
- except WaiterError as e:
- assert False, f'Failed to deliver metrics to CloudWatch: {str(e)}.'
-
- def verify_s3_delivery(self, analytics_bucket_name: str) -> None:
- """
- Verify that metrics are delivered to S3 for batch analytics successfully.
- :param analytics_bucket_name: Name of the deployed S3 bucket.
- """
- client = self._aws_util.client('s3')
- bucket_name = analytics_bucket_name
-
- try:
- DataLakeMetricsDeliveredWaiter(client).wait(bucket_name=bucket_name, prefix=EXPECTED_S3_DIRECTORY)
- except WaiterError as e:
- assert False, f'Failed to find the S3 directory for storing metrics data: {str(e)}.'
-
- # Check whether the data is converted to the expected data format.
- response = client.list_objects_v2(
- Bucket=bucket_name,
- Prefix=EXPECTED_S3_DIRECTORY
- )
- assert response.get('KeyCount', 0) != 0, f'Failed to deliver metrics to the S3 bucket {bucket_name}.'
-
- s3_objects = response.get('Contents', [])
- for s3_object in s3_objects:
- key = s3_object.get('Key', '')
- assert pathlib.Path(key).suffix == EXPECTED_S3_OBJECT_EXTENSION, \
- f'Invalid data format is found in the S3 bucket {bucket_name}'
-
- def run_glue_crawler(self, crawler_name: str) -> None:
- """
- Run the Glue crawler and wait for it to finish.
- :param crawler_name: Name of the Glue crawler
- """
- client = self._aws_util.client('glue')
- try:
- client.start_crawler(
- Name=crawler_name
- )
- except client.exceptions.CrawlerRunningException:
- # The crawler has already been started.
- return
-
- try:
- GlueCrawlerReadyWaiter(client).wait(crawler_name=crawler_name)
- except WaiterError as e:
- assert False, f'Failed to run the Glue crawler: {str(e)}.'
-
- def run_named_queries(self, work_group: str) -> None:
- """
- Run the named queries under the specific Athena work group.
- :param work_group: Name of the Athena work group.
- """
- client = self._aws_util.client('athena')
- # List all the named queries.
- response = client.list_named_queries(
- WorkGroup=work_group
- )
- named_query_ids = response.get('NamedQueryIds', [])
-
- # Run each of the queries.
- for named_query_id in named_query_ids:
- get_named_query_response = client.get_named_query(
- NamedQueryId=named_query_id
- )
- named_query = get_named_query_response.get('NamedQuery', {})
-
- start_query_execution_response = client.start_query_execution(
- QueryString=named_query.get('QueryString', ''),
- QueryExecutionContext={
- 'Database': named_query.get('Database', '')
- },
- WorkGroup=work_group
- )
-
- # Wait for the query to finish.
- state = 'RUNNING'
- while state == 'QUEUED' or state == 'RUNNING':
- get_query_execution_response = client.get_query_execution(
- QueryExecutionId=start_query_execution_response.get('QueryExecutionId', '')
- )
-
- state = get_query_execution_response.get('QueryExecution', {}).get('Status', {}).get('State', '')
-
- assert state == 'SUCCEEDED', f'Failed to run the named query {named_query.get("Name", {})}'
-
- def empty_bucket(self, bucket_name: str) -> None:
- """
- Empty the S3 bucket following:
- https://boto3.amazonaws.com/v1/documentation/api/latest/guide/migrations3.html
-
- :param bucket_name: Name of the S3 bucket.
- """
- s3 = self._aws_util.resource('s3')
- bucket = s3.Bucket(bucket_name)
-
- for key in bucket.objects.all():
- key.delete()
-
- def delete_table(self, database_name: str, table_name: str) -> None:
- """
- Delete an existing Glue table.
-
- :param database_name: Name of the Glue database.
- :param table_name: Name of the table to delete.
- """
- client = self._aws_util.client('glue')
- client.delete_table(
- DatabaseName=database_name,
- Name=table_name
- )
-
-
-@pytest.fixture(scope='function')
-def aws_metrics_utils(
- request: pytest.fixture,
- aws_utils: pytest.fixture):
- """
- Fixture for the AWS metrics util functions.
- :param request: _pytest.fixtures.SubRequest class that handles getting
- a pytest fixture from a pytest function/fixture.
- :param aws_utils: aws_utils fixture.
- """
- aws_utils_obj = AWSMetricsUtils(aws_utils)
- return aws_utils_obj
+"""
+Copyright (c) Contributors to the Open 3D Engine Project.
+For complete copyright and license terms please see the LICENSE at the root of this distribution.
+
+SPDX-License-Identifier: Apache-2.0 OR MIT
+"""
+
+import logging
+import pathlib
+import pytest
+import typing
+
+from datetime import datetime
+from botocore.exceptions import WaiterError
+
+from .aws_metrics_waiters import KinesisAnalyticsApplicationUpdatedWaiter, \
+ CloudWatchMetricsDeliveredWaiter, DataLakeMetricsDeliveredWaiter, GlueCrawlerReadyWaiter
+
+logging.getLogger('boto').setLevel(logging.CRITICAL)
+
+# Expected directory and file extension for the S3 objects.
+EXPECTED_S3_DIRECTORY = 'firehose_events/'
+EXPECTED_S3_OBJECT_EXTENSION = '.parquet'
+
+
+class AWSMetricsUtils:
+ """
+ Provide utils functions for the AWSMetrics gem to interact with the deployed resources.
+ """
+
+ def __init__(self, aws_utils: pytest.fixture):
+ self._aws_util = aws_utils
+
+ def start_kinesis_data_analytics_application(self, application_name: str) -> None:
+ """
+ Start the Kenisis Data Analytics application for real-time analytics.
+ :param application_name: Name of the Kenisis Data Analytics application.
+ """
+ input_id = self.get_kinesis_analytics_application_input_id(application_name)
+ assert input_id, 'invalid Kinesis Data Analytics application input.'
+
+ client = self._aws_util.client('kinesisanalytics')
+ try:
+ client.start_application(
+ ApplicationName=application_name,
+ InputConfigurations=[
+ {
+ 'Id': input_id,
+ 'InputStartingPositionConfiguration': {
+ 'InputStartingPosition': 'NOW'
+ }
+ },
+ ]
+ )
+ except client.exceptions.ResourceInUseException:
+ # The application has been started.
+ return
+
+ try:
+ KinesisAnalyticsApplicationUpdatedWaiter(client, 'RUNNING').wait(application_name=application_name)
+ except WaiterError as e:
+ assert False, f'Failed to start the Kinesis Data Analytics application: {str(e)}.'
+
+ def get_kinesis_analytics_application_input_id(self, application_name: str) -> str:
+ """
+ Get the input ID for the Kenisis Data Analytics application.
+ :param application_name: Name of the Kenisis Data Analytics application.
+ :return: Input ID for the Kenisis Data Analytics application.
+ """
+ client = self._aws_util.client('kinesisanalytics')
+ response = client.describe_application(
+ ApplicationName=application_name
+ )
+ if not response:
+ return ''
+ input_descriptions = response.get('ApplicationDetail', {}).get('InputDescriptions', [])
+ if len(input_descriptions) != 1:
+ return ''
+
+ return input_descriptions[0].get('InputId', '')
+
+ def stop_kinesis_data_analytics_application(self, application_name: str) -> None:
+ """
+ Stop the Kenisis Data Analytics application.
+ :param application_name: Name of the Kenisis Data Analytics application.
+ """
+ client = self._aws_util.client('kinesisanalytics')
+ client.stop_application(
+ ApplicationName=application_name
+ )
+
+ try:
+ KinesisAnalyticsApplicationUpdatedWaiter(client, 'READY').wait(application_name=application_name)
+ except WaiterError as e:
+ assert False, f'Failed to stop the Kinesis Data Analytics application: {str(e)}.'
+
+ def verify_cloud_watch_delivery(self, namespace: str, metrics_name: str,
+ dimensions: typing.List[dict], start_time: datetime) -> None:
+ """
+ Verify that the expected metrics is delivered to CloudWatch.
+ :param namespace: Namespace of the metrics.
+ :param metrics_name: Name of the metrics.
+ :param dimensions: Dimensions of the metrics.
+ :param start_time: Start time for generating the metrics.
+ """
+ client = self._aws_util.client('cloudwatch')
+
+ try:
+ CloudWatchMetricsDeliveredWaiter(client).wait(
+ namespace=namespace,
+ metrics_name=metrics_name,
+ dimensions=dimensions,
+ start_time=start_time
+ )
+ except WaiterError as e:
+ assert False, f'Failed to deliver metrics to CloudWatch: {str(e)}.'
+
+ def verify_s3_delivery(self, analytics_bucket_name: str) -> None:
+ """
+ Verify that metrics are delivered to S3 for batch analytics successfully.
+ :param analytics_bucket_name: Name of the deployed S3 bucket.
+ """
+ client = self._aws_util.client('s3')
+ bucket_name = analytics_bucket_name
+
+ try:
+ DataLakeMetricsDeliveredWaiter(client).wait(bucket_name=bucket_name, prefix=EXPECTED_S3_DIRECTORY)
+ except WaiterError as e:
+ assert False, f'Failed to find the S3 directory for storing metrics data: {str(e)}.'
+
+ # Check whether the data is converted to the expected data format.
+ response = client.list_objects_v2(
+ Bucket=bucket_name,
+ Prefix=EXPECTED_S3_DIRECTORY
+ )
+ assert response.get('KeyCount', 0) != 0, f'Failed to deliver metrics to the S3 bucket {bucket_name}.'
+
+ s3_objects = response.get('Contents', [])
+ for s3_object in s3_objects:
+ key = s3_object.get('Key', '')
+ assert pathlib.Path(key).suffix == EXPECTED_S3_OBJECT_EXTENSION, \
+ f'Invalid data format is found in the S3 bucket {bucket_name}'
+
+ def run_glue_crawler(self, crawler_name: str) -> None:
+ """
+ Run the Glue crawler and wait for it to finish.
+ :param crawler_name: Name of the Glue crawler
+ """
+ client = self._aws_util.client('glue')
+ try:
+ client.start_crawler(
+ Name=crawler_name
+ )
+ except client.exceptions.CrawlerRunningException:
+ # The crawler has already been started.
+ return
+
+ try:
+ GlueCrawlerReadyWaiter(client).wait(crawler_name=crawler_name)
+ except WaiterError as e:
+ assert False, f'Failed to run the Glue crawler: {str(e)}.'
+
+ def run_named_queries(self, work_group: str) -> None:
+ """
+ Run the named queries under the specific Athena work group.
+ :param work_group: Name of the Athena work group.
+ """
+ client = self._aws_util.client('athena')
+ # List all the named queries.
+ response = client.list_named_queries(
+ WorkGroup=work_group
+ )
+ named_query_ids = response.get('NamedQueryIds', [])
+
+ # Run each of the queries.
+ for named_query_id in named_query_ids:
+ get_named_query_response = client.get_named_query(
+ NamedQueryId=named_query_id
+ )
+ named_query = get_named_query_response.get('NamedQuery', {})
+
+ start_query_execution_response = client.start_query_execution(
+ QueryString=named_query.get('QueryString', ''),
+ QueryExecutionContext={
+ 'Database': named_query.get('Database', '')
+ },
+ WorkGroup=work_group
+ )
+
+ # Wait for the query to finish.
+ state = 'RUNNING'
+ while state == 'QUEUED' or state == 'RUNNING':
+ get_query_execution_response = client.get_query_execution(
+ QueryExecutionId=start_query_execution_response.get('QueryExecutionId', '')
+ )
+
+ state = get_query_execution_response.get('QueryExecution', {}).get('Status', {}).get('State', '')
+
+ assert state == 'SUCCEEDED', f'Failed to run the named query {named_query.get("Name", {})}'
+
+ def empty_bucket(self, bucket_name: str) -> None:
+ """
+ Empty the S3 bucket following:
+ https://boto3.amazonaws.com/v1/documentation/api/latest/guide/migrations3.html
+
+ :param bucket_name: Name of the S3 bucket.
+ """
+ s3 = self._aws_util.resource('s3')
+ bucket = s3.Bucket(bucket_name)
+
+ for key in bucket.objects.all():
+ key.delete()
+
+ def delete_table(self, database_name: str, table_name: str) -> None:
+ """
+ Delete an existing Glue table.
+
+ :param database_name: Name of the Glue database.
+ :param table_name: Name of the table to delete.
+ """
+ client = self._aws_util.client('glue')
+ client.delete_table(
+ DatabaseName=database_name,
+ Name=table_name
+ )
+
+
+@pytest.fixture(scope='function')
+def aws_metrics_utils(
+ request: pytest.fixture,
+ aws_utils: pytest.fixture):
+ """
+ Fixture for the AWS metrics util functions.
+ :param request: _pytest.fixtures.SubRequest class that handles getting
+ a pytest fixture from a pytest function/fixture.
+ :param aws_utils: aws_utils fixture.
+ """
+ aws_utils_obj = AWSMetricsUtils(aws_utils)
+ return aws_utils_obj
diff --git a/AutomatedTesting/Gem/PythonTests/AWS/Windows/aws_metrics/aws_metrics_waiters.py b/AutomatedTesting/Gem/PythonTests/AWS/aws_metrics/aws_metrics_waiters.py
similarity index 96%
rename from AutomatedTesting/Gem/PythonTests/AWS/Windows/aws_metrics/aws_metrics_waiters.py
rename to AutomatedTesting/Gem/PythonTests/AWS/aws_metrics/aws_metrics_waiters.py
index 46070a3a64..7b09557c79 100644
--- a/AutomatedTesting/Gem/PythonTests/AWS/Windows/aws_metrics/aws_metrics_waiters.py
+++ b/AutomatedTesting/Gem/PythonTests/AWS/aws_metrics/aws_metrics_waiters.py
@@ -1,139 +1,139 @@
-"""
-Copyright (c) Contributors to the Open 3D Engine Project.
-For complete copyright and license terms please see the LICENSE at the root of this distribution.
-
-SPDX-License-Identifier: Apache-2.0 OR MIT
-"""
-
-import botocore.client
-import logging
-
-from datetime import timedelta
-from AWS.common.custom_waiter import CustomWaiter, WaitState
-
-logging.getLogger('boto').setLevel(logging.CRITICAL)
-
-
-class KinesisAnalyticsApplicationUpdatedWaiter(CustomWaiter):
- """
- Subclass of the base custom waiter class.
- Wait for the Kinesis analytics application being updated to a specific status.
- """
- def __init__(self, client: botocore.client, status: str):
- """
- Initialize the waiter.
-
- :param client: Boto3 client to use.
- :param status: Expected status.
- """
- super().__init__(
- 'KinesisAnalyticsApplicationUpdated',
- 'DescribeApplication',
- 'ApplicationDetail.ApplicationStatus',
- {status: WaitState.SUCCESS},
- client)
-
- def wait(self, application_name: str):
- """
- Wait for the expected status.
-
- :param application_name: Name of the Kinesis analytics application.
- """
- self._wait(ApplicationName=application_name)
-
-
-class GlueCrawlerReadyWaiter(CustomWaiter):
- """
- Subclass of the base custom waiter class.
- Wait for the Glue crawler to finish its processing. Return when the crawler is in the "Stopping" status
- to avoid wasting too much time in the automation tests on its shutdown process.
- """
- def __init__(self, client: botocore.client):
- """
- Initialize the waiter.
-
- :param client: Boto3 client to use.
- """
- super().__init__(
- 'GlueCrawlerReady',
- 'GetCrawler',
- 'Crawler.State',
- {'STOPPING': WaitState.SUCCESS},
- client)
-
- def wait(self, crawler_name):
- """
- Wait for the expected status.
-
- :param crawler_name: Name of the Glue crawler.
- """
- self._wait(Name=crawler_name)
-
-
-class DataLakeMetricsDeliveredWaiter(CustomWaiter):
- """
- Subclass of the base custom waiter class.
- Wait for the expected directory being created in the S3 bucket.
- """
- def __init__(self, client: botocore.client):
- """
- Initialize the waiter.
-
- :param client: Boto3 client to use.
- """
- super().__init__(
- 'DataLakeMetricsDelivered',
- 'ListObjectsV2',
- 'KeyCount > `0`',
- {True: WaitState.SUCCESS},
- client)
-
- def wait(self, bucket_name, prefix):
- """
- Wait for the expected directory being created.
-
- :param bucket_name: Name of the S3 bucket.
- :param prefix: Name of the expected directory prefix.
- """
- self._wait(Bucket=bucket_name, Prefix=prefix)
-
-
-class CloudWatchMetricsDeliveredWaiter(CustomWaiter):
- """
- Subclass of the base custom waiter class.
- Wait for the expected metrics being delivered to CloudWatch.
- """
- def __init__(self, client: botocore.client):
- """
- Initialize the waiter.
-
- :param client: Boto3 client to use.
- """
- super().__init__(
- 'CloudWatchMetricsDelivered',
- 'GetMetricStatistics',
- 'length(Datapoints) > `0`',
- {True: WaitState.SUCCESS},
- client)
-
- def wait(self, namespace, metrics_name, dimensions, start_time):
- """
- Wait for the expected metrics being delivered.
-
- :param namespace: Namespace of the metrics.
- :param metrics_name: Name of the metrics.
- :param dimensions: Dimensions of the metrics.
- :param start_time: Start time for generating the metrics.
- """
- self._wait(
- Namespace=namespace,
- MetricName=metrics_name,
- Dimensions=dimensions,
- StartTime=start_time,
- EndTime=start_time + timedelta(0, self.timeout),
- Period=60,
- Statistics=[
- 'SampleCount'
- ],
- Unit='Count'
- )
+"""
+Copyright (c) Contributors to the Open 3D Engine Project.
+For complete copyright and license terms please see the LICENSE at the root of this distribution.
+
+SPDX-License-Identifier: Apache-2.0 OR MIT
+"""
+
+import botocore.client
+import logging
+
+from datetime import timedelta
+from AWS.common.custom_waiter import CustomWaiter, WaitState
+
+logging.getLogger('boto').setLevel(logging.CRITICAL)
+
+
+class KinesisAnalyticsApplicationUpdatedWaiter(CustomWaiter):
+ """
+ Subclass of the base custom waiter class.
+ Wait for the Kinesis analytics application being updated to a specific status.
+ """
+ def __init__(self, client: botocore.client, status: str):
+ """
+ Initialize the waiter.
+
+ :param client: Boto3 client to use.
+ :param status: Expected status.
+ """
+ super().__init__(
+ 'KinesisAnalyticsApplicationUpdated',
+ 'DescribeApplication',
+ 'ApplicationDetail.ApplicationStatus',
+ {status: WaitState.SUCCESS},
+ client)
+
+ def wait(self, application_name: str):
+ """
+ Wait for the expected status.
+
+ :param application_name: Name of the Kinesis analytics application.
+ """
+ self._wait(ApplicationName=application_name)
+
+
+class GlueCrawlerReadyWaiter(CustomWaiter):
+ """
+ Subclass of the base custom waiter class.
+ Wait for the Glue crawler to finish its processing. Return when the crawler is in the "Stopping" status
+ to avoid wasting too much time in the automation tests on its shutdown process.
+ """
+ def __init__(self, client: botocore.client):
+ """
+ Initialize the waiter.
+
+ :param client: Boto3 client to use.
+ """
+ super().__init__(
+ 'GlueCrawlerReady',
+ 'GetCrawler',
+ 'Crawler.State',
+ {'STOPPING': WaitState.SUCCESS},
+ client)
+
+ def wait(self, crawler_name):
+ """
+ Wait for the expected status.
+
+ :param crawler_name: Name of the Glue crawler.
+ """
+ self._wait(Name=crawler_name)
+
+
+class DataLakeMetricsDeliveredWaiter(CustomWaiter):
+ """
+ Subclass of the base custom waiter class.
+ Wait for the expected directory being created in the S3 bucket.
+ """
+ def __init__(self, client: botocore.client):
+ """
+ Initialize the waiter.
+
+ :param client: Boto3 client to use.
+ """
+ super().__init__(
+ 'DataLakeMetricsDelivered',
+ 'ListObjectsV2',
+ 'KeyCount > `0`',
+ {True: WaitState.SUCCESS},
+ client)
+
+ def wait(self, bucket_name, prefix):
+ """
+ Wait for the expected directory being created.
+
+ :param bucket_name: Name of the S3 bucket.
+ :param prefix: Name of the expected directory prefix.
+ """
+ self._wait(Bucket=bucket_name, Prefix=prefix)
+
+
+class CloudWatchMetricsDeliveredWaiter(CustomWaiter):
+ """
+ Subclass of the base custom waiter class.
+ Wait for the expected metrics being delivered to CloudWatch.
+ """
+ def __init__(self, client: botocore.client):
+ """
+ Initialize the waiter.
+
+ :param client: Boto3 client to use.
+ """
+ super().__init__(
+ 'CloudWatchMetricsDelivered',
+ 'GetMetricStatistics',
+ 'length(Datapoints) > `0`',
+ {True: WaitState.SUCCESS},
+ client)
+
+ def wait(self, namespace, metrics_name, dimensions, start_time):
+ """
+ Wait for the expected metrics being delivered.
+
+ :param namespace: Namespace of the metrics.
+ :param metrics_name: Name of the metrics.
+ :param dimensions: Dimensions of the metrics.
+ :param start_time: Start time for generating the metrics.
+ """
+ self._wait(
+ Namespace=namespace,
+ MetricName=metrics_name,
+ Dimensions=dimensions,
+ StartTime=start_time,
+ EndTime=start_time + timedelta(0, self.timeout),
+ Period=60,
+ Statistics=[
+ 'SampleCount'
+ ],
+ Unit='Count'
+ )
diff --git a/AutomatedTesting/Gem/PythonTests/AWS/Windows/__init__.py b/AutomatedTesting/Gem/PythonTests/AWS/client_auth/__init__.py
similarity index 100%
rename from AutomatedTesting/Gem/PythonTests/AWS/Windows/__init__.py
rename to AutomatedTesting/Gem/PythonTests/AWS/client_auth/__init__.py
diff --git a/AutomatedTesting/Gem/PythonTests/AWS/Windows/client_auth/aws_client_auth_automation_test.py b/AutomatedTesting/Gem/PythonTests/AWS/client_auth/aws_client_auth_automation_test.py
similarity index 94%
rename from AutomatedTesting/Gem/PythonTests/AWS/Windows/client_auth/aws_client_auth_automation_test.py
rename to AutomatedTesting/Gem/PythonTests/AWS/client_auth/aws_client_auth_automation_test.py
index 077a068a18..b185a155ed 100644
--- a/AutomatedTesting/Gem/PythonTests/AWS/Windows/client_auth/aws_client_auth_automation_test.py
+++ b/AutomatedTesting/Gem/PythonTests/AWS/client_auth/aws_client_auth_automation_test.py
@@ -40,7 +40,7 @@ class TestAWSClientAuthWindows(object):
Test class to verify AWS Client Auth gem features on Windows.
"""
- @pytest.mark.parametrize('level', ['AWS/ClientAuth'])
+ @pytest.mark.parametrize('level', ['levels/aws/clientauth/clientauth.spawnable'])
def test_anonymous_credentials(self,
level: str,
launcher: pytest.fixture,
@@ -72,7 +72,7 @@ class TestAWSClientAuthWindows(object):
)
assert result, 'Anonymous credentials fetched successfully.'
- @pytest.mark.parametrize('level', ['AWS/ClientAuth'])
+ @pytest.mark.parametrize('level', ['levels/aws/clientauth/clientauth.spawnable'])
def test_anonymous_credentials_no_global_accountid(self,
level: str,
launcher: pytest.fixture,
@@ -140,7 +140,7 @@ class TestAWSClientAuthWindows(object):
except cognito_idp.exceptions.UserNotFoundException:
pass
- launcher.args = ['+LoadLevel', 'AWS/ClientAuthPasswordSignUp']
+ launcher.args = ['+LoadLevel', 'levels/aws/clientauthpasswordsignup/clientauthpasswordsignup.spawnable']
launcher.args.extend(['-rhi=null'])
with launcher.start(launch_ap=False):
@@ -158,7 +158,7 @@ class TestAWSClientAuthWindows(object):
Username='test1'
)
- launcher.args = ['+LoadLevel', 'AWS/ClientAuthPasswordSignIn']
+ launcher.args = ['+LoadLevel', 'levels/aws/clientauthpasswordsignin/clientauthpasswordsignin.spawnable']
launcher.args.extend(['-rhi=null'])
with launcher.start(launch_ap=False):
diff --git a/AutomatedTesting/Gem/PythonTests/AWS/Windows/client_auth/__init__.py b/AutomatedTesting/Gem/PythonTests/AWS/core/__init__.py
similarity index 99%
rename from AutomatedTesting/Gem/PythonTests/AWS/Windows/client_auth/__init__.py
rename to AutomatedTesting/Gem/PythonTests/AWS/core/__init__.py
index bbcbcf1807..f5193b300e 100644
--- a/AutomatedTesting/Gem/PythonTests/AWS/Windows/client_auth/__init__.py
+++ b/AutomatedTesting/Gem/PythonTests/AWS/core/__init__.py
@@ -4,4 +4,3 @@ For complete copyright and license terms please see the LICENSE at the root of t
SPDX-License-Identifier: Apache-2.0 OR MIT
"""
-
diff --git a/AutomatedTesting/Gem/PythonTests/AWS/Windows/core/test_aws_resource_interaction.py b/AutomatedTesting/Gem/PythonTests/AWS/core/test_aws_resource_interaction.py
similarity index 99%
rename from AutomatedTesting/Gem/PythonTests/AWS/Windows/core/test_aws_resource_interaction.py
rename to AutomatedTesting/Gem/PythonTests/AWS/core/test_aws_resource_interaction.py
index 59c517fd1c..367f02cac3 100644
--- a/AutomatedTesting/Gem/PythonTests/AWS/Windows/core/test_aws_resource_interaction.py
+++ b/AutomatedTesting/Gem/PythonTests/AWS/core/test_aws_resource_interaction.py
@@ -84,7 +84,7 @@ def write_test_data_to_dynamodb_table(resource_mappings: pytest.fixture, aws_uti
@pytest.mark.parametrize('session_name', [constants.SESSION_NAME])
@pytest.mark.usefixtures('workspace')
@pytest.mark.parametrize('project', ['AutomatedTesting'])
-@pytest.mark.parametrize('level', ['AWS/Core'])
+@pytest.mark.parametrize('level', ['levels/aws/core/core.spawnable'])
@pytest.mark.usefixtures('resource_mappings')
@pytest.mark.parametrize('resource_mappings_filename', [constants.AWS_RESOURCE_MAPPING_FILE_NAME])
@pytest.mark.parametrize('stacks', [[f'{constants.AWS_PROJECT_NAME}-{AWS_CORE_FEATURE_NAME}',
diff --git a/AutomatedTesting/Levels/AWS/ClientAuth/ClientAuth.ly b/AutomatedTesting/Levels/AWS/ClientAuth/ClientAuth.ly
deleted file mode 100644
index b4a2d6cb3a..0000000000
--- a/AutomatedTesting/Levels/AWS/ClientAuth/ClientAuth.ly
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:19f2c4454bb395cdc0a36d1e45e6a384bbd23037af1a2fb93e088ecfa0f10e5b
-size 9343
diff --git a/AutomatedTesting/Levels/AWS/ClientAuth/ClientAuth.prefab b/AutomatedTesting/Levels/AWS/ClientAuth/ClientAuth.prefab
new file mode 100644
index 0000000000..8f2fb61c71
--- /dev/null
+++ b/AutomatedTesting/Levels/AWS/ClientAuth/ClientAuth.prefab
@@ -0,0 +1,620 @@
+{
+ "ContainerEntity": {
+ "Id": "Entity_[1146574390643]",
+ "Name": "Level",
+ "Components": {
+ "Component_[10641544592923449938]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 10641544592923449938
+ },
+ "Component_[12039882709170782873]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 12039882709170782873
+ },
+ "Component_[12265484671603697631]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 12265484671603697631
+ },
+ "Component_[14126657869720434043]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 14126657869720434043,
+ "Child Entity Order": [
+ "Entity_[1176639161715]",
+ "Entity_[2670735447885]",
+ "Entity_[2670735447885]"
+ ]
+ },
+ "Component_[15230859088967841193]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 15230859088967841193,
+ "Parent Entity": ""
+ },
+ "Component_[16239496886950819870]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 16239496886950819870
+ },
+ "Component_[5688118765544765547]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 5688118765544765547
+ },
+ "Component_[6545738857812235305]": {
+ "$type": "SelectionComponent",
+ "Id": 6545738857812235305
+ },
+ "Component_[7247035804068349658]": {
+ "$type": "EditorPrefabComponent",
+ "Id": 7247035804068349658
+ },
+ "Component_[9307224322037797205]": {
+ "$type": "EditorLockComponent",
+ "Id": 9307224322037797205
+ },
+ "Component_[9562516168917670048]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9562516168917670048
+ }
+ }
+ },
+ "Entities": {
+ "Entity_[1155164325235]": {
+ "Id": "Entity_[1155164325235]",
+ "Name": "Sun",
+ "Components": {
+ "Component_[10440557478882592717]": {
+ "$type": "SelectionComponent",
+ "Id": 10440557478882592717
+ },
+ "Component_[13620450453324765907]": {
+ "$type": "EditorLockComponent",
+ "Id": 13620450453324765907
+ },
+ "Component_[2134313378593666258]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 2134313378593666258
+ },
+ "Component_[234010807770404186]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 234010807770404186
+ },
+ "Component_[2970359110423865725]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 2970359110423865725
+ },
+ "Component_[3722854130373041803]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3722854130373041803
+ },
+ "Component_[5992533738676323195]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5992533738676323195
+ },
+ "Component_[7378860763541895402]": {
+ "$type": "AZ::Render::EditorDirectionalLightComponent",
+ "Id": 7378860763541895402,
+ "Controller": {
+ "Configuration": {
+ "Intensity": 1.0,
+ "CameraEntityId": "",
+ "ShadowFilterMethod": 1
+ }
+ }
+ },
+ "Component_[7892834440890947578]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 7892834440890947578,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Translate": [
+ 0.0,
+ 0.0,
+ 13.487043380737305
+ ],
+ "Rotate": [
+ -76.13099670410156,
+ -0.847000002861023,
+ -15.8100004196167
+ ]
+ }
+ },
+ "Component_[8599729549570828259]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 8599729549570828259
+ },
+ "Component_[952797371922080273]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 952797371922080273
+ }
+ }
+ },
+ "Entity_[1159459292531]": {
+ "Id": "Entity_[1159459292531]",
+ "Name": "Ground",
+ "Components": {
+ "Component_[11701138785793981042]": {
+ "$type": "SelectionComponent",
+ "Id": 11701138785793981042
+ },
+ "Component_[12260880513256986252]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 12260880513256986252
+ },
+ "Component_[13711420870643673468]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 13711420870643673468
+ },
+ "Component_[138002849734991713]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 138002849734991713
+ },
+ "Component_[16578565737331764849]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 16578565737331764849,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[16919232076966545697]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 16919232076966545697
+ },
+ "Component_[5182430712893438093]": {
+ "$type": "EditorMaterialComponent",
+ "Id": 5182430712893438093
+ },
+ "Component_[5675108321710651991]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 5675108321710651991,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{0CD745C0-6AA8-569A-A68A-73A3270986C4}",
+ "subId": 277889906
+ },
+ "assetHint": "objects/groudplane/groundplane_512x512m.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[5681893399601237518]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5681893399601237518
+ },
+ "Component_[592692962543397545]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 592692962543397545
+ },
+ "Component_[7090012899106946164]": {
+ "$type": "EditorLockComponent",
+ "Id": 7090012899106946164
+ },
+ "Component_[9410832619875640998]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9410832619875640998
+ }
+ }
+ },
+ "Entity_[1163754259827]": {
+ "Id": "Entity_[1163754259827]",
+ "Name": "Camera",
+ "Components": {
+ "Component_[11895140916889160460]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 11895140916889160460
+ },
+ "Component_[16880285896855930892]": {
+ "$type": "{CA11DA46-29FF-4083-B5F6-E02C3A8C3A3D} EditorCameraComponent",
+ "Id": 16880285896855930892,
+ "Controller": {
+ "Configuration": {
+ "Field of View": 55.0,
+ "EditorEntityId": 6861302815203973165
+ }
+ }
+ },
+ "Component_[17187464423780271193]": {
+ "$type": "EditorLockComponent",
+ "Id": 17187464423780271193
+ },
+ "Component_[17495696818315413311]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 17495696818315413311
+ },
+ "Component_[18086214374043522055]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 18086214374043522055,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Translate": [
+ -2.3000001907348633,
+ -3.9368600845336914,
+ 1.0
+ ],
+ "Rotate": [
+ -2.050307512283325,
+ 1.9552897214889526,
+ -43.623355865478516
+ ]
+ }
+ },
+ "Component_[18387556550380114975]": {
+ "$type": "SelectionComponent",
+ "Id": 18387556550380114975
+ },
+ "Component_[2654521436129313160]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 2654521436129313160
+ },
+ "Component_[5265045084611556958]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5265045084611556958
+ },
+ "Component_[7169798125182238623]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 7169798125182238623
+ },
+ "Component_[7255796294953281766]": {
+ "$type": "GenericComponentWrapper",
+ "Id": 7255796294953281766,
+ "m_template": {
+ "$type": "FlyCameraInputComponent"
+ }
+ },
+ "Component_[8866210352157164042]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 8866210352157164042
+ },
+ "Component_[9129253381063760879]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 9129253381063760879
+ }
+ }
+ },
+ "Entity_[1168049227123]": {
+ "Id": "Entity_[1168049227123]",
+ "Name": "Grid",
+ "Components": {
+ "Component_[11443347433215807130]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 11443347433215807130
+ },
+ "Component_[11779275529534764488]": {
+ "$type": "SelectionComponent",
+ "Id": 11779275529534764488
+ },
+ "Component_[14249419413039427459]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14249419413039427459
+ },
+ "Component_[15448581635946161318]": {
+ "$type": "AZ::Render::EditorGridComponent",
+ "Id": 15448581635946161318,
+ "Controller": {
+ "Configuration": {
+ "primarySpacing": 4.0,
+ "primaryColor": [
+ 0.501960813999176,
+ 0.501960813999176,
+ 0.501960813999176
+ ],
+ "secondarySpacing": 0.5,
+ "secondaryColor": [
+ 0.250980406999588,
+ 0.250980406999588,
+ 0.250980406999588
+ ]
+ }
+ }
+ },
+ "Component_[1843303322527297409]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 1843303322527297409
+ },
+ "Component_[380249072065273654]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 380249072065273654,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[7476660583684339787]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 7476660583684339787
+ },
+ "Component_[7557626501215118375]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 7557626501215118375
+ },
+ "Component_[7984048488947365511]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 7984048488947365511
+ },
+ "Component_[8118181039276487398]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 8118181039276487398
+ },
+ "Component_[9189909764215270515]": {
+ "$type": "EditorLockComponent",
+ "Id": 9189909764215270515
+ }
+ }
+ },
+ "Entity_[1172344194419]": {
+ "Id": "Entity_[1172344194419]",
+ "Name": "Shader Ball",
+ "Components": {
+ "Component_[10789351944715265527]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 10789351944715265527
+ },
+ "Component_[12037033284781049225]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 12037033284781049225
+ },
+ "Component_[13759153306105970079]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 13759153306105970079
+ },
+ "Component_[14135560884830586279]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14135560884830586279
+ },
+ "Component_[16247165675903986673]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 16247165675903986673
+ },
+ "Component_[18082433625958885247]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 18082433625958885247
+ },
+ "Component_[6472623349872972660]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6472623349872972660,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Rotate": [
+ 0.0,
+ 0.10000000149011612,
+ 180.0
+ ]
+ }
+ },
+ "Component_[6495255223970673916]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 6495255223970673916,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{FD340C30-755C-5911-92A3-19A3F7A77931}",
+ "subId": 281415304
+ },
+ "assetHint": "objects/shaderball/shaderball_default_1m.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[8056625192494070973]": {
+ "$type": "SelectionComponent",
+ "Id": 8056625192494070973
+ },
+ "Component_[8550141614185782969]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 8550141614185782969
+ },
+ "Component_[9439770997198325425]": {
+ "$type": "EditorLockComponent",
+ "Id": 9439770997198325425
+ }
+ }
+ },
+ "Entity_[1176639161715]": {
+ "Id": "Entity_[1176639161715]",
+ "Name": "Atom Default Environment",
+ "Components": {
+ "Component_[10757302973393310045]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 10757302973393310045,
+ "Parent Entity": "Entity_[1146574390643]"
+ },
+ "Component_[14505817420424255464]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14505817420424255464,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 10757302973393310045
+ }
+ ]
+ },
+ "Component_[14988041764659020032]": {
+ "$type": "EditorLockComponent",
+ "Id": 14988041764659020032
+ },
+ "Component_[15808690248755038124]": {
+ "$type": "SelectionComponent",
+ "Id": 15808690248755038124
+ },
+ "Component_[15900837685796817138]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 15900837685796817138
+ },
+ "Component_[3298767348226484884]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3298767348226484884
+ },
+ "Component_[4076975109609220594]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 4076975109609220594
+ },
+ "Component_[5679760548946028854]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5679760548946028854
+ },
+ "Component_[5855590796136709437]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5855590796136709437,
+ "Child Entity Order": [
+ "Entity_[1155164325235]",
+ "Entity_[1180934129011]",
+ "Entity_[1172344194419]",
+ "Entity_[1168049227123]",
+ "Entity_[1163754259827]",
+ "Entity_[1159459292531]"
+ ]
+ },
+ "Component_[9277695270015777859]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 9277695270015777859
+ }
+ }
+ },
+ "Entity_[1180934129011]": {
+ "Id": "Entity_[1180934129011]",
+ "Name": "Global Sky",
+ "Components": {
+ "Component_[11231930600558681245]": {
+ "$type": "AZ::Render::EditorHDRiSkyboxComponent",
+ "Id": 11231930600558681245,
+ "Controller": {
+ "Configuration": {
+ "CubemapAsset": {
+ "assetId": {
+ "guid": "{215E47FD-D181-5832-B1AB-91673ABF6399}",
+ "subId": 1000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_skyboxcm.exr.streamingimage"
+ }
+ }
+ }
+ },
+ "Component_[11980494120202836095]": {
+ "$type": "SelectionComponent",
+ "Id": 11980494120202836095
+ },
+ "Component_[1428633914413949476]": {
+ "$type": "EditorLockComponent",
+ "Id": 1428633914413949476
+ },
+ "Component_[14936200426671614999]": {
+ "$type": "AZ::Render::EditorImageBasedLightComponent",
+ "Id": 14936200426671614999,
+ "Controller": {
+ "Configuration": {
+ "diffuseImageAsset": {
+ "assetId": {
+ "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+ "subId": 3000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_ibldiffuse.exr.streamingimage"
+ },
+ "specularImageAsset": {
+ "assetId": {
+ "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+ "subId": 2000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_iblspecular.exr.streamingimage"
+ }
+ }
+ }
+ },
+ "Component_[14994774102579326069]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 14994774102579326069
+ },
+ "Component_[15417479889044493340]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 15417479889044493340
+ },
+ "Component_[15826613364991382688]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 15826613364991382688
+ },
+ "Component_[1665003113283562343]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 1665003113283562343
+ },
+ "Component_[3704934735944502280]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 3704934735944502280
+ },
+ "Component_[5698542331457326479]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 5698542331457326479
+ },
+ "Component_[6644513399057217122]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6644513399057217122,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[931091830724002070]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 931091830724002070
+ }
+ }
+ },
+ "Entity_[2670735447885]": {
+ "Id": "Entity_[2670735447885]",
+ "Name": "AnonymousAuthorization",
+ "Components": {
+ "Component_[11400228652398928245]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 11400228652398928245
+ },
+ "Component_[15542812360906781451]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 15542812360906781451,
+ "Parent Entity": "Entity_[1146574390643]",
+ "Transform Data": {
+ "Translate": [
+ 0.0,
+ 0.10000038146972656,
+ 4.005923748016357
+ ]
+ }
+ },
+ "Component_[16858205397479531670]": {
+ "$type": "EditorLockComponent",
+ "Id": 16858205397479531670
+ },
+ "Component_[1921474395300693283]": {
+ "$type": "EditorScriptCanvasComponent",
+ "Id": 1921474395300693283,
+ "m_name": "ConitoAnonymousAuthorization.scriptcanvas",
+ "runtimeDataIsValid": true,
+ "runtimeDataOverrides": {
+ "source": {
+ "id": "{C0B0CEBA-064E-580F-AD81-CFE8CE0D61B1}"
+ }
+ },
+ "sourceHandle": {
+ "id": "{C0B0CEBA-064E-580F-AD81-CFE8CE0D61B1}"
+ }
+ },
+ "Component_[2312432053711106201]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 2312432053711106201
+ },
+ "Component_[4066858233846929269]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 4066858233846929269
+ },
+ "Component_[6542133807409587028]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 6542133807409587028
+ },
+ "Component_[7002965736546436267]": {
+ "$type": "SelectionComponent",
+ "Id": 7002965736546436267
+ },
+ "Component_[7455250879152263787]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 7455250879152263787
+ },
+ "Component_[8081535907930415421]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 8081535907930415421
+ },
+ "Component_[9630473919092479415]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 9630473919092479415
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/AutomatedTesting/Levels/AWS/ClientAuth/filelist.xml b/AutomatedTesting/Levels/AWS/ClientAuth/filelist.xml
deleted file mode 100644
index 6b5b5a8727..0000000000
--- a/AutomatedTesting/Levels/AWS/ClientAuth/filelist.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/AWS/ClientAuth/level.pak b/AutomatedTesting/Levels/AWS/ClientAuth/level.pak
deleted file mode 100644
index bd791070e9..0000000000
--- a/AutomatedTesting/Levels/AWS/ClientAuth/level.pak
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8a674e05824e5ceec13a0487b318923568710bc8269e5be84adad59c495a7ceb
-size 3610
diff --git a/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignIn/ClientAuthPasswordSignIn.ly b/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignIn/ClientAuthPasswordSignIn.ly
deleted file mode 100644
index 40d9ad619c..0000000000
--- a/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignIn/ClientAuthPasswordSignIn.ly
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:a1c0b621525b8e88c3775ea4c60c2197d1e1b060ace9bad9d6efcb0532817e44
-size 9356
diff --git a/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignIn/ClientAuthPasswordSignIn.prefab b/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignIn/ClientAuthPasswordSignIn.prefab
new file mode 100644
index 0000000000..46c01bbb0f
--- /dev/null
+++ b/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignIn/ClientAuthPasswordSignIn.prefab
@@ -0,0 +1,620 @@
+{
+ "ContainerEntity": {
+ "Id": "Entity_[1146574390643]",
+ "Name": "Level",
+ "Components": {
+ "Component_[10641544592923449938]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 10641544592923449938
+ },
+ "Component_[12039882709170782873]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 12039882709170782873
+ },
+ "Component_[12265484671603697631]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 12265484671603697631
+ },
+ "Component_[14126657869720434043]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 14126657869720434043,
+ "Child Entity Order": [
+ "Entity_[1176639161715]",
+ "Entity_[3263440934733]",
+ "Entity_[3263440934733]"
+ ]
+ },
+ "Component_[15230859088967841193]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 15230859088967841193,
+ "Parent Entity": ""
+ },
+ "Component_[16239496886950819870]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 16239496886950819870
+ },
+ "Component_[5688118765544765547]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 5688118765544765547
+ },
+ "Component_[6545738857812235305]": {
+ "$type": "SelectionComponent",
+ "Id": 6545738857812235305
+ },
+ "Component_[7247035804068349658]": {
+ "$type": "EditorPrefabComponent",
+ "Id": 7247035804068349658
+ },
+ "Component_[9307224322037797205]": {
+ "$type": "EditorLockComponent",
+ "Id": 9307224322037797205
+ },
+ "Component_[9562516168917670048]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9562516168917670048
+ }
+ }
+ },
+ "Entities": {
+ "Entity_[1155164325235]": {
+ "Id": "Entity_[1155164325235]",
+ "Name": "Sun",
+ "Components": {
+ "Component_[10440557478882592717]": {
+ "$type": "SelectionComponent",
+ "Id": 10440557478882592717
+ },
+ "Component_[13620450453324765907]": {
+ "$type": "EditorLockComponent",
+ "Id": 13620450453324765907
+ },
+ "Component_[2134313378593666258]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 2134313378593666258
+ },
+ "Component_[234010807770404186]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 234010807770404186
+ },
+ "Component_[2970359110423865725]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 2970359110423865725
+ },
+ "Component_[3722854130373041803]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3722854130373041803
+ },
+ "Component_[5992533738676323195]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5992533738676323195
+ },
+ "Component_[7378860763541895402]": {
+ "$type": "AZ::Render::EditorDirectionalLightComponent",
+ "Id": 7378860763541895402,
+ "Controller": {
+ "Configuration": {
+ "Intensity": 1.0,
+ "CameraEntityId": "",
+ "ShadowFilterMethod": 1
+ }
+ }
+ },
+ "Component_[7892834440890947578]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 7892834440890947578,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Translate": [
+ 0.0,
+ 0.0,
+ 13.487043380737305
+ ],
+ "Rotate": [
+ -76.13099670410156,
+ -0.847000002861023,
+ -15.8100004196167
+ ]
+ }
+ },
+ "Component_[8599729549570828259]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 8599729549570828259
+ },
+ "Component_[952797371922080273]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 952797371922080273
+ }
+ }
+ },
+ "Entity_[1159459292531]": {
+ "Id": "Entity_[1159459292531]",
+ "Name": "Ground",
+ "Components": {
+ "Component_[11701138785793981042]": {
+ "$type": "SelectionComponent",
+ "Id": 11701138785793981042
+ },
+ "Component_[12260880513256986252]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 12260880513256986252
+ },
+ "Component_[13711420870643673468]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 13711420870643673468
+ },
+ "Component_[138002849734991713]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 138002849734991713
+ },
+ "Component_[16578565737331764849]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 16578565737331764849,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[16919232076966545697]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 16919232076966545697
+ },
+ "Component_[5182430712893438093]": {
+ "$type": "EditorMaterialComponent",
+ "Id": 5182430712893438093
+ },
+ "Component_[5675108321710651991]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 5675108321710651991,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{0CD745C0-6AA8-569A-A68A-73A3270986C4}",
+ "subId": 277889906
+ },
+ "assetHint": "objects/groudplane/groundplane_512x512m.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[5681893399601237518]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5681893399601237518
+ },
+ "Component_[592692962543397545]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 592692962543397545
+ },
+ "Component_[7090012899106946164]": {
+ "$type": "EditorLockComponent",
+ "Id": 7090012899106946164
+ },
+ "Component_[9410832619875640998]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9410832619875640998
+ }
+ }
+ },
+ "Entity_[1163754259827]": {
+ "Id": "Entity_[1163754259827]",
+ "Name": "Camera",
+ "Components": {
+ "Component_[11895140916889160460]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 11895140916889160460
+ },
+ "Component_[16880285896855930892]": {
+ "$type": "{CA11DA46-29FF-4083-B5F6-E02C3A8C3A3D} EditorCameraComponent",
+ "Id": 16880285896855930892,
+ "Controller": {
+ "Configuration": {
+ "Field of View": 55.0,
+ "EditorEntityId": 6861302815203973165
+ }
+ }
+ },
+ "Component_[17187464423780271193]": {
+ "$type": "EditorLockComponent",
+ "Id": 17187464423780271193
+ },
+ "Component_[17495696818315413311]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 17495696818315413311
+ },
+ "Component_[18086214374043522055]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 18086214374043522055,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Translate": [
+ -2.3000001907348633,
+ -3.9368600845336914,
+ 1.0
+ ],
+ "Rotate": [
+ -2.050307512283325,
+ 1.9552897214889526,
+ -43.623355865478516
+ ]
+ }
+ },
+ "Component_[18387556550380114975]": {
+ "$type": "SelectionComponent",
+ "Id": 18387556550380114975
+ },
+ "Component_[2654521436129313160]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 2654521436129313160
+ },
+ "Component_[5265045084611556958]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5265045084611556958
+ },
+ "Component_[7169798125182238623]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 7169798125182238623
+ },
+ "Component_[7255796294953281766]": {
+ "$type": "GenericComponentWrapper",
+ "Id": 7255796294953281766,
+ "m_template": {
+ "$type": "FlyCameraInputComponent"
+ }
+ },
+ "Component_[8866210352157164042]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 8866210352157164042
+ },
+ "Component_[9129253381063760879]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 9129253381063760879
+ }
+ }
+ },
+ "Entity_[1168049227123]": {
+ "Id": "Entity_[1168049227123]",
+ "Name": "Grid",
+ "Components": {
+ "Component_[11443347433215807130]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 11443347433215807130
+ },
+ "Component_[11779275529534764488]": {
+ "$type": "SelectionComponent",
+ "Id": 11779275529534764488
+ },
+ "Component_[14249419413039427459]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14249419413039427459
+ },
+ "Component_[15448581635946161318]": {
+ "$type": "AZ::Render::EditorGridComponent",
+ "Id": 15448581635946161318,
+ "Controller": {
+ "Configuration": {
+ "primarySpacing": 4.0,
+ "primaryColor": [
+ 0.501960813999176,
+ 0.501960813999176,
+ 0.501960813999176
+ ],
+ "secondarySpacing": 0.5,
+ "secondaryColor": [
+ 0.250980406999588,
+ 0.250980406999588,
+ 0.250980406999588
+ ]
+ }
+ }
+ },
+ "Component_[1843303322527297409]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 1843303322527297409
+ },
+ "Component_[380249072065273654]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 380249072065273654,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[7476660583684339787]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 7476660583684339787
+ },
+ "Component_[7557626501215118375]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 7557626501215118375
+ },
+ "Component_[7984048488947365511]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 7984048488947365511
+ },
+ "Component_[8118181039276487398]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 8118181039276487398
+ },
+ "Component_[9189909764215270515]": {
+ "$type": "EditorLockComponent",
+ "Id": 9189909764215270515
+ }
+ }
+ },
+ "Entity_[1172344194419]": {
+ "Id": "Entity_[1172344194419]",
+ "Name": "Shader Ball",
+ "Components": {
+ "Component_[10789351944715265527]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 10789351944715265527
+ },
+ "Component_[12037033284781049225]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 12037033284781049225
+ },
+ "Component_[13759153306105970079]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 13759153306105970079
+ },
+ "Component_[14135560884830586279]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14135560884830586279
+ },
+ "Component_[16247165675903986673]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 16247165675903986673
+ },
+ "Component_[18082433625958885247]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 18082433625958885247
+ },
+ "Component_[6472623349872972660]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6472623349872972660,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Rotate": [
+ 0.0,
+ 0.10000000149011612,
+ 180.0
+ ]
+ }
+ },
+ "Component_[6495255223970673916]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 6495255223970673916,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{FD340C30-755C-5911-92A3-19A3F7A77931}",
+ "subId": 281415304
+ },
+ "assetHint": "objects/shaderball/shaderball_default_1m.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[8056625192494070973]": {
+ "$type": "SelectionComponent",
+ "Id": 8056625192494070973
+ },
+ "Component_[8550141614185782969]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 8550141614185782969
+ },
+ "Component_[9439770997198325425]": {
+ "$type": "EditorLockComponent",
+ "Id": 9439770997198325425
+ }
+ }
+ },
+ "Entity_[1176639161715]": {
+ "Id": "Entity_[1176639161715]",
+ "Name": "Atom Default Environment",
+ "Components": {
+ "Component_[10757302973393310045]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 10757302973393310045,
+ "Parent Entity": "Entity_[1146574390643]"
+ },
+ "Component_[14505817420424255464]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14505817420424255464,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 10757302973393310045
+ }
+ ]
+ },
+ "Component_[14988041764659020032]": {
+ "$type": "EditorLockComponent",
+ "Id": 14988041764659020032
+ },
+ "Component_[15808690248755038124]": {
+ "$type": "SelectionComponent",
+ "Id": 15808690248755038124
+ },
+ "Component_[15900837685796817138]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 15900837685796817138
+ },
+ "Component_[3298767348226484884]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3298767348226484884
+ },
+ "Component_[4076975109609220594]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 4076975109609220594
+ },
+ "Component_[5679760548946028854]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5679760548946028854
+ },
+ "Component_[5855590796136709437]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5855590796136709437,
+ "Child Entity Order": [
+ "Entity_[1155164325235]",
+ "Entity_[1180934129011]",
+ "Entity_[1172344194419]",
+ "Entity_[1168049227123]",
+ "Entity_[1163754259827]",
+ "Entity_[1159459292531]"
+ ]
+ },
+ "Component_[9277695270015777859]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 9277695270015777859
+ }
+ }
+ },
+ "Entity_[1180934129011]": {
+ "Id": "Entity_[1180934129011]",
+ "Name": "Global Sky",
+ "Components": {
+ "Component_[11231930600558681245]": {
+ "$type": "AZ::Render::EditorHDRiSkyboxComponent",
+ "Id": 11231930600558681245,
+ "Controller": {
+ "Configuration": {
+ "CubemapAsset": {
+ "assetId": {
+ "guid": "{215E47FD-D181-5832-B1AB-91673ABF6399}",
+ "subId": 1000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_skyboxcm.exr.streamingimage"
+ }
+ }
+ }
+ },
+ "Component_[11980494120202836095]": {
+ "$type": "SelectionComponent",
+ "Id": 11980494120202836095
+ },
+ "Component_[1428633914413949476]": {
+ "$type": "EditorLockComponent",
+ "Id": 1428633914413949476
+ },
+ "Component_[14936200426671614999]": {
+ "$type": "AZ::Render::EditorImageBasedLightComponent",
+ "Id": 14936200426671614999,
+ "Controller": {
+ "Configuration": {
+ "diffuseImageAsset": {
+ "assetId": {
+ "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+ "subId": 3000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_ibldiffuse.exr.streamingimage"
+ },
+ "specularImageAsset": {
+ "assetId": {
+ "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+ "subId": 2000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_iblspecular.exr.streamingimage"
+ }
+ }
+ }
+ },
+ "Component_[14994774102579326069]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 14994774102579326069
+ },
+ "Component_[15417479889044493340]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 15417479889044493340
+ },
+ "Component_[15826613364991382688]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 15826613364991382688
+ },
+ "Component_[1665003113283562343]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 1665003113283562343
+ },
+ "Component_[3704934735944502280]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 3704934735944502280
+ },
+ "Component_[5698542331457326479]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 5698542331457326479
+ },
+ "Component_[6644513399057217122]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6644513399057217122,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[931091830724002070]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 931091830724002070
+ }
+ }
+ },
+ "Entity_[3263440934733]": {
+ "Id": "Entity_[3263440934733]",
+ "Name": "Auth",
+ "Components": {
+ "Component_[10677660472305013611]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 10677660472305013611
+ },
+ "Component_[12020966173483420539]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 12020966173483420539
+ },
+ "Component_[1395011275436594572]": {
+ "$type": "EditorLockComponent",
+ "Id": 1395011275436594572
+ },
+ "Component_[14204408480276164321]": {
+ "$type": "EditorScriptCanvasComponent",
+ "Id": 14204408480276164321,
+ "m_name": "PasswordSignIn.scriptcanvas",
+ "runtimeDataIsValid": true,
+ "runtimeDataOverrides": {
+ "source": {
+ "id": "{DA0FCA2B-66E4-575B-802E-BA93F35690C1}"
+ }
+ },
+ "sourceHandle": {
+ "id": "{DA0FCA2B-66E4-575B-802E-BA93F35690C1}"
+ }
+ },
+ "Component_[15510129631063791276]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 15510129631063791276
+ },
+ "Component_[2829815269827202953]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 2829815269827202953
+ },
+ "Component_[4152540778425032559]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 4152540778425032559,
+ "Parent Entity": "Entity_[1146574390643]",
+ "Transform Data": {
+ "Translate": [
+ 0.0,
+ 0.10000038146972656,
+ 4.005923748016357
+ ]
+ }
+ },
+ "Component_[4562090268412258507]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 4562090268412258507
+ },
+ "Component_[4826060551136971267]": {
+ "$type": "SelectionComponent",
+ "Id": 4826060551136971267
+ },
+ "Component_[8974703175361704047]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 8974703175361704047
+ },
+ "Component_[9513341577149946975]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 9513341577149946975
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignIn/filelist.xml b/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignIn/filelist.xml
deleted file mode 100644
index ce3f3f3407..0000000000
--- a/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignIn/filelist.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignIn/level.pak b/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignIn/level.pak
deleted file mode 100644
index 1af55520b6..0000000000
--- a/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignIn/level.pak
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:f318a1787069385de291660f79e350cea2ca2c3ef3b5e0576686066bd9c49395
-size 3667
diff --git a/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignUp/ClientAuthPasswordSignUp.ly b/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignUp/ClientAuthPasswordSignUp.ly
deleted file mode 100644
index b3f66ff34a..0000000000
--- a/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignUp/ClientAuthPasswordSignUp.ly
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:afc5d665128738e6bea09e78a16ee38acc923a8ecefff90d987858ce72c395fa
-size 9360
diff --git a/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignUp/ClientAuthPasswordSignUp.prefab b/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignUp/ClientAuthPasswordSignUp.prefab
new file mode 100644
index 0000000000..3d85ec02a5
--- /dev/null
+++ b/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignUp/ClientAuthPasswordSignUp.prefab
@@ -0,0 +1,620 @@
+{
+ "ContainerEntity": {
+ "Id": "Entity_[1146574390643]",
+ "Name": "Level",
+ "Components": {
+ "Component_[10641544592923449938]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 10641544592923449938
+ },
+ "Component_[12039882709170782873]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 12039882709170782873
+ },
+ "Component_[12265484671603697631]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 12265484671603697631
+ },
+ "Component_[14126657869720434043]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 14126657869720434043,
+ "Child Entity Order": [
+ "Entity_[1176639161715]",
+ "Entity_[3851851454285]",
+ "Entity_[3851851454285]"
+ ]
+ },
+ "Component_[15230859088967841193]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 15230859088967841193,
+ "Parent Entity": ""
+ },
+ "Component_[16239496886950819870]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 16239496886950819870
+ },
+ "Component_[5688118765544765547]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 5688118765544765547
+ },
+ "Component_[6545738857812235305]": {
+ "$type": "SelectionComponent",
+ "Id": 6545738857812235305
+ },
+ "Component_[7247035804068349658]": {
+ "$type": "EditorPrefabComponent",
+ "Id": 7247035804068349658
+ },
+ "Component_[9307224322037797205]": {
+ "$type": "EditorLockComponent",
+ "Id": 9307224322037797205
+ },
+ "Component_[9562516168917670048]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9562516168917670048
+ }
+ }
+ },
+ "Entities": {
+ "Entity_[1155164325235]": {
+ "Id": "Entity_[1155164325235]",
+ "Name": "Sun",
+ "Components": {
+ "Component_[10440557478882592717]": {
+ "$type": "SelectionComponent",
+ "Id": 10440557478882592717
+ },
+ "Component_[13620450453324765907]": {
+ "$type": "EditorLockComponent",
+ "Id": 13620450453324765907
+ },
+ "Component_[2134313378593666258]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 2134313378593666258
+ },
+ "Component_[234010807770404186]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 234010807770404186
+ },
+ "Component_[2970359110423865725]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 2970359110423865725
+ },
+ "Component_[3722854130373041803]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3722854130373041803
+ },
+ "Component_[5992533738676323195]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5992533738676323195
+ },
+ "Component_[7378860763541895402]": {
+ "$type": "AZ::Render::EditorDirectionalLightComponent",
+ "Id": 7378860763541895402,
+ "Controller": {
+ "Configuration": {
+ "Intensity": 1.0,
+ "CameraEntityId": "",
+ "ShadowFilterMethod": 1
+ }
+ }
+ },
+ "Component_[7892834440890947578]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 7892834440890947578,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Translate": [
+ 0.0,
+ 0.0,
+ 13.487043380737305
+ ],
+ "Rotate": [
+ -76.13099670410156,
+ -0.847000002861023,
+ -15.8100004196167
+ ]
+ }
+ },
+ "Component_[8599729549570828259]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 8599729549570828259
+ },
+ "Component_[952797371922080273]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 952797371922080273
+ }
+ }
+ },
+ "Entity_[1159459292531]": {
+ "Id": "Entity_[1159459292531]",
+ "Name": "Ground",
+ "Components": {
+ "Component_[11701138785793981042]": {
+ "$type": "SelectionComponent",
+ "Id": 11701138785793981042
+ },
+ "Component_[12260880513256986252]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 12260880513256986252
+ },
+ "Component_[13711420870643673468]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 13711420870643673468
+ },
+ "Component_[138002849734991713]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 138002849734991713
+ },
+ "Component_[16578565737331764849]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 16578565737331764849,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[16919232076966545697]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 16919232076966545697
+ },
+ "Component_[5182430712893438093]": {
+ "$type": "EditorMaterialComponent",
+ "Id": 5182430712893438093
+ },
+ "Component_[5675108321710651991]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 5675108321710651991,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{0CD745C0-6AA8-569A-A68A-73A3270986C4}",
+ "subId": 277889906
+ },
+ "assetHint": "objects/groudplane/groundplane_512x512m.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[5681893399601237518]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5681893399601237518
+ },
+ "Component_[592692962543397545]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 592692962543397545
+ },
+ "Component_[7090012899106946164]": {
+ "$type": "EditorLockComponent",
+ "Id": 7090012899106946164
+ },
+ "Component_[9410832619875640998]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9410832619875640998
+ }
+ }
+ },
+ "Entity_[1163754259827]": {
+ "Id": "Entity_[1163754259827]",
+ "Name": "Camera",
+ "Components": {
+ "Component_[11895140916889160460]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 11895140916889160460
+ },
+ "Component_[16880285896855930892]": {
+ "$type": "{CA11DA46-29FF-4083-B5F6-E02C3A8C3A3D} EditorCameraComponent",
+ "Id": 16880285896855930892,
+ "Controller": {
+ "Configuration": {
+ "Field of View": 55.0,
+ "EditorEntityId": 6861302815203973165
+ }
+ }
+ },
+ "Component_[17187464423780271193]": {
+ "$type": "EditorLockComponent",
+ "Id": 17187464423780271193
+ },
+ "Component_[17495696818315413311]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 17495696818315413311
+ },
+ "Component_[18086214374043522055]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 18086214374043522055,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Translate": [
+ -2.3000001907348633,
+ -3.9368600845336914,
+ 1.0
+ ],
+ "Rotate": [
+ -2.050307512283325,
+ 1.9552897214889526,
+ -43.623355865478516
+ ]
+ }
+ },
+ "Component_[18387556550380114975]": {
+ "$type": "SelectionComponent",
+ "Id": 18387556550380114975
+ },
+ "Component_[2654521436129313160]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 2654521436129313160
+ },
+ "Component_[5265045084611556958]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5265045084611556958
+ },
+ "Component_[7169798125182238623]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 7169798125182238623
+ },
+ "Component_[7255796294953281766]": {
+ "$type": "GenericComponentWrapper",
+ "Id": 7255796294953281766,
+ "m_template": {
+ "$type": "FlyCameraInputComponent"
+ }
+ },
+ "Component_[8866210352157164042]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 8866210352157164042
+ },
+ "Component_[9129253381063760879]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 9129253381063760879
+ }
+ }
+ },
+ "Entity_[1168049227123]": {
+ "Id": "Entity_[1168049227123]",
+ "Name": "Grid",
+ "Components": {
+ "Component_[11443347433215807130]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 11443347433215807130
+ },
+ "Component_[11779275529534764488]": {
+ "$type": "SelectionComponent",
+ "Id": 11779275529534764488
+ },
+ "Component_[14249419413039427459]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14249419413039427459
+ },
+ "Component_[15448581635946161318]": {
+ "$type": "AZ::Render::EditorGridComponent",
+ "Id": 15448581635946161318,
+ "Controller": {
+ "Configuration": {
+ "primarySpacing": 4.0,
+ "primaryColor": [
+ 0.501960813999176,
+ 0.501960813999176,
+ 0.501960813999176
+ ],
+ "secondarySpacing": 0.5,
+ "secondaryColor": [
+ 0.250980406999588,
+ 0.250980406999588,
+ 0.250980406999588
+ ]
+ }
+ }
+ },
+ "Component_[1843303322527297409]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 1843303322527297409
+ },
+ "Component_[380249072065273654]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 380249072065273654,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[7476660583684339787]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 7476660583684339787
+ },
+ "Component_[7557626501215118375]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 7557626501215118375
+ },
+ "Component_[7984048488947365511]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 7984048488947365511
+ },
+ "Component_[8118181039276487398]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 8118181039276487398
+ },
+ "Component_[9189909764215270515]": {
+ "$type": "EditorLockComponent",
+ "Id": 9189909764215270515
+ }
+ }
+ },
+ "Entity_[1172344194419]": {
+ "Id": "Entity_[1172344194419]",
+ "Name": "Shader Ball",
+ "Components": {
+ "Component_[10789351944715265527]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 10789351944715265527
+ },
+ "Component_[12037033284781049225]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 12037033284781049225
+ },
+ "Component_[13759153306105970079]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 13759153306105970079
+ },
+ "Component_[14135560884830586279]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14135560884830586279
+ },
+ "Component_[16247165675903986673]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 16247165675903986673
+ },
+ "Component_[18082433625958885247]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 18082433625958885247
+ },
+ "Component_[6472623349872972660]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6472623349872972660,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Rotate": [
+ 0.0,
+ 0.10000000149011612,
+ 180.0
+ ]
+ }
+ },
+ "Component_[6495255223970673916]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 6495255223970673916,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{FD340C30-755C-5911-92A3-19A3F7A77931}",
+ "subId": 281415304
+ },
+ "assetHint": "objects/shaderball/shaderball_default_1m.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[8056625192494070973]": {
+ "$type": "SelectionComponent",
+ "Id": 8056625192494070973
+ },
+ "Component_[8550141614185782969]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 8550141614185782969
+ },
+ "Component_[9439770997198325425]": {
+ "$type": "EditorLockComponent",
+ "Id": 9439770997198325425
+ }
+ }
+ },
+ "Entity_[1176639161715]": {
+ "Id": "Entity_[1176639161715]",
+ "Name": "Atom Default Environment",
+ "Components": {
+ "Component_[10757302973393310045]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 10757302973393310045,
+ "Parent Entity": "Entity_[1146574390643]"
+ },
+ "Component_[14505817420424255464]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14505817420424255464,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 10757302973393310045
+ }
+ ]
+ },
+ "Component_[14988041764659020032]": {
+ "$type": "EditorLockComponent",
+ "Id": 14988041764659020032
+ },
+ "Component_[15808690248755038124]": {
+ "$type": "SelectionComponent",
+ "Id": 15808690248755038124
+ },
+ "Component_[15900837685796817138]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 15900837685796817138
+ },
+ "Component_[3298767348226484884]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3298767348226484884
+ },
+ "Component_[4076975109609220594]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 4076975109609220594
+ },
+ "Component_[5679760548946028854]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5679760548946028854
+ },
+ "Component_[5855590796136709437]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5855590796136709437,
+ "Child Entity Order": [
+ "Entity_[1155164325235]",
+ "Entity_[1180934129011]",
+ "Entity_[1172344194419]",
+ "Entity_[1168049227123]",
+ "Entity_[1163754259827]",
+ "Entity_[1159459292531]"
+ ]
+ },
+ "Component_[9277695270015777859]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 9277695270015777859
+ }
+ }
+ },
+ "Entity_[1180934129011]": {
+ "Id": "Entity_[1180934129011]",
+ "Name": "Global Sky",
+ "Components": {
+ "Component_[11231930600558681245]": {
+ "$type": "AZ::Render::EditorHDRiSkyboxComponent",
+ "Id": 11231930600558681245,
+ "Controller": {
+ "Configuration": {
+ "CubemapAsset": {
+ "assetId": {
+ "guid": "{215E47FD-D181-5832-B1AB-91673ABF6399}",
+ "subId": 1000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_skyboxcm.exr.streamingimage"
+ }
+ }
+ }
+ },
+ "Component_[11980494120202836095]": {
+ "$type": "SelectionComponent",
+ "Id": 11980494120202836095
+ },
+ "Component_[1428633914413949476]": {
+ "$type": "EditorLockComponent",
+ "Id": 1428633914413949476
+ },
+ "Component_[14936200426671614999]": {
+ "$type": "AZ::Render::EditorImageBasedLightComponent",
+ "Id": 14936200426671614999,
+ "Controller": {
+ "Configuration": {
+ "diffuseImageAsset": {
+ "assetId": {
+ "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+ "subId": 3000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_ibldiffuse.exr.streamingimage"
+ },
+ "specularImageAsset": {
+ "assetId": {
+ "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+ "subId": 2000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_iblspecular.exr.streamingimage"
+ }
+ }
+ }
+ },
+ "Component_[14994774102579326069]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 14994774102579326069
+ },
+ "Component_[15417479889044493340]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 15417479889044493340
+ },
+ "Component_[15826613364991382688]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 15826613364991382688
+ },
+ "Component_[1665003113283562343]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 1665003113283562343
+ },
+ "Component_[3704934735944502280]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 3704934735944502280
+ },
+ "Component_[5698542331457326479]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 5698542331457326479
+ },
+ "Component_[6644513399057217122]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6644513399057217122,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[931091830724002070]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 931091830724002070
+ }
+ }
+ },
+ "Entity_[3851851454285]": {
+ "Id": "Entity_[3851851454285]",
+ "Name": "Auth",
+ "Components": {
+ "Component_[10199578265902796701]": {
+ "$type": "EditorScriptCanvasComponent",
+ "Id": 10199578265902796701,
+ "m_name": "PasswordSignUp.scriptcanvas",
+ "runtimeDataIsValid": true,
+ "runtimeDataOverrides": {
+ "source": {
+ "id": "{367CEE66-3A7D-549E-BD69-C63612B3F12D}"
+ }
+ },
+ "sourceHandle": {
+ "id": "{367CEE66-3A7D-549E-BD69-C63612B3F12D}"
+ }
+ },
+ "Component_[10665743855533689275]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 10665743855533689275
+ },
+ "Component_[15982638153420818774]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 15982638153420818774,
+ "Parent Entity": "Entity_[1146574390643]",
+ "Transform Data": {
+ "Translate": [
+ 0.0,
+ 0.10000038146972656,
+ 4.005923748016357
+ ]
+ }
+ },
+ "Component_[17743308263820862394]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 17743308263820862394
+ },
+ "Component_[18074634570765223479]": {
+ "$type": "SelectionComponent",
+ "Id": 18074634570765223479
+ },
+ "Component_[3471158028107369345]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 3471158028107369345
+ },
+ "Component_[376079292001997684]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 376079292001997684
+ },
+ "Component_[4387781728620577034]": {
+ "$type": "EditorLockComponent",
+ "Id": 4387781728620577034
+ },
+ "Component_[8591645353763910598]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 8591645353763910598
+ },
+ "Component_[9373910525775599099]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9373910525775599099
+ },
+ "Component_[9394316863271268125]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 9394316863271268125
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignUp/filelist.xml b/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignUp/filelist.xml
deleted file mode 100644
index 6565342dd4..0000000000
--- a/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignUp/filelist.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignUp/level.pak b/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignUp/level.pak
deleted file mode 100644
index 781de219f7..0000000000
--- a/AutomatedTesting/Levels/AWS/ClientAuthPasswordSignUp/level.pak
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:87882b64688a77815d93c6973929fa21b89dc6c13d4866c710124ce2cd0f411e
-size 3652
diff --git a/AutomatedTesting/Levels/AWS/Core/Core.ly b/AutomatedTesting/Levels/AWS/Core/Core.ly
deleted file mode 100644
index 8b01ee7abe..0000000000
--- a/AutomatedTesting/Levels/AWS/Core/Core.ly
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5242a9b598bc329ef2af2b114092e4e50c7c398cdde4605a0717b0b3ce66d797
-size 10030
diff --git a/AutomatedTesting/Levels/AWS/Core/Core.prefab b/AutomatedTesting/Levels/AWS/Core/Core.prefab
new file mode 100644
index 0000000000..3d2749849b
--- /dev/null
+++ b/AutomatedTesting/Levels/AWS/Core/Core.prefab
@@ -0,0 +1,758 @@
+{
+ "ContainerEntity": {
+ "Id": "Entity_[1146574390643]",
+ "Name": "Level",
+ "Components": {
+ "Component_[10641544592923449938]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 10641544592923449938
+ },
+ "Component_[12039882709170782873]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 12039882709170782873
+ },
+ "Component_[12265484671603697631]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 12265484671603697631
+ },
+ "Component_[14126657869720434043]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 14126657869720434043,
+ "Child Entity Order": [
+ "Entity_[1176639161715]",
+ "Entity_[1386540226381]",
+ "Entity_[1390835193677]",
+ "Entity_[1395130160973]",
+ "Entity_[1395130160973]"
+ ]
+ },
+ "Component_[15230859088967841193]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 15230859088967841193,
+ "Parent Entity": ""
+ },
+ "Component_[16239496886950819870]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 16239496886950819870
+ },
+ "Component_[5688118765544765547]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 5688118765544765547
+ },
+ "Component_[6545738857812235305]": {
+ "$type": "SelectionComponent",
+ "Id": 6545738857812235305
+ },
+ "Component_[7247035804068349658]": {
+ "$type": "EditorPrefabComponent",
+ "Id": 7247035804068349658
+ },
+ "Component_[9307224322037797205]": {
+ "$type": "EditorLockComponent",
+ "Id": 9307224322037797205
+ },
+ "Component_[9562516168917670048]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9562516168917670048
+ }
+ }
+ },
+ "Entities": {
+ "Entity_[1155164325235]": {
+ "Id": "Entity_[1155164325235]",
+ "Name": "Sun",
+ "Components": {
+ "Component_[10440557478882592717]": {
+ "$type": "SelectionComponent",
+ "Id": 10440557478882592717
+ },
+ "Component_[13620450453324765907]": {
+ "$type": "EditorLockComponent",
+ "Id": 13620450453324765907
+ },
+ "Component_[2134313378593666258]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 2134313378593666258
+ },
+ "Component_[234010807770404186]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 234010807770404186
+ },
+ "Component_[2970359110423865725]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 2970359110423865725
+ },
+ "Component_[3722854130373041803]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3722854130373041803
+ },
+ "Component_[5992533738676323195]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5992533738676323195
+ },
+ "Component_[7378860763541895402]": {
+ "$type": "AZ::Render::EditorDirectionalLightComponent",
+ "Id": 7378860763541895402,
+ "Controller": {
+ "Configuration": {
+ "Intensity": 1.0,
+ "CameraEntityId": "",
+ "ShadowFilterMethod": 1
+ }
+ }
+ },
+ "Component_[7892834440890947578]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 7892834440890947578,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Translate": [
+ 0.0,
+ 0.0,
+ 13.487043380737305
+ ],
+ "Rotate": [
+ -76.13099670410156,
+ -0.847000002861023,
+ -15.8100004196167
+ ]
+ }
+ },
+ "Component_[8599729549570828259]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 8599729549570828259
+ },
+ "Component_[952797371922080273]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 952797371922080273
+ }
+ }
+ },
+ "Entity_[1159459292531]": {
+ "Id": "Entity_[1159459292531]",
+ "Name": "Ground",
+ "Components": {
+ "Component_[11701138785793981042]": {
+ "$type": "SelectionComponent",
+ "Id": 11701138785793981042
+ },
+ "Component_[12260880513256986252]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 12260880513256986252
+ },
+ "Component_[13711420870643673468]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 13711420870643673468
+ },
+ "Component_[138002849734991713]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 138002849734991713
+ },
+ "Component_[16578565737331764849]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 16578565737331764849,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[16919232076966545697]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 16919232076966545697
+ },
+ "Component_[5182430712893438093]": {
+ "$type": "EditorMaterialComponent",
+ "Id": 5182430712893438093
+ },
+ "Component_[5675108321710651991]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 5675108321710651991,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{0CD745C0-6AA8-569A-A68A-73A3270986C4}",
+ "subId": 277889906
+ },
+ "assetHint": "objects/groudplane/groundplane_512x512m.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[5681893399601237518]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5681893399601237518
+ },
+ "Component_[592692962543397545]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 592692962543397545
+ },
+ "Component_[7090012899106946164]": {
+ "$type": "EditorLockComponent",
+ "Id": 7090012899106946164
+ },
+ "Component_[9410832619875640998]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9410832619875640998
+ }
+ }
+ },
+ "Entity_[1163754259827]": {
+ "Id": "Entity_[1163754259827]",
+ "Name": "Camera",
+ "Components": {
+ "Component_[11895140916889160460]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 11895140916889160460
+ },
+ "Component_[16880285896855930892]": {
+ "$type": "{CA11DA46-29FF-4083-B5F6-E02C3A8C3A3D} EditorCameraComponent",
+ "Id": 16880285896855930892,
+ "Controller": {
+ "Configuration": {
+ "Field of View": 55.0,
+ "EditorEntityId": 6861302815203973165
+ }
+ }
+ },
+ "Component_[17187464423780271193]": {
+ "$type": "EditorLockComponent",
+ "Id": 17187464423780271193
+ },
+ "Component_[17495696818315413311]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 17495696818315413311
+ },
+ "Component_[18086214374043522055]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 18086214374043522055,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Translate": [
+ -2.3000001907348633,
+ -3.9368600845336914,
+ 1.0
+ ],
+ "Rotate": [
+ -2.050307512283325,
+ 1.9552897214889526,
+ -43.623355865478516
+ ]
+ }
+ },
+ "Component_[18387556550380114975]": {
+ "$type": "SelectionComponent",
+ "Id": 18387556550380114975
+ },
+ "Component_[2654521436129313160]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 2654521436129313160
+ },
+ "Component_[5265045084611556958]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5265045084611556958
+ },
+ "Component_[7169798125182238623]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 7169798125182238623
+ },
+ "Component_[7255796294953281766]": {
+ "$type": "GenericComponentWrapper",
+ "Id": 7255796294953281766,
+ "m_template": {
+ "$type": "FlyCameraInputComponent"
+ }
+ },
+ "Component_[8866210352157164042]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 8866210352157164042
+ },
+ "Component_[9129253381063760879]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 9129253381063760879
+ }
+ }
+ },
+ "Entity_[1168049227123]": {
+ "Id": "Entity_[1168049227123]",
+ "Name": "Grid",
+ "Components": {
+ "Component_[11443347433215807130]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 11443347433215807130
+ },
+ "Component_[11779275529534764488]": {
+ "$type": "SelectionComponent",
+ "Id": 11779275529534764488
+ },
+ "Component_[14249419413039427459]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14249419413039427459
+ },
+ "Component_[15448581635946161318]": {
+ "$type": "AZ::Render::EditorGridComponent",
+ "Id": 15448581635946161318,
+ "Controller": {
+ "Configuration": {
+ "primarySpacing": 4.0,
+ "primaryColor": [
+ 0.501960813999176,
+ 0.501960813999176,
+ 0.501960813999176
+ ],
+ "secondarySpacing": 0.5,
+ "secondaryColor": [
+ 0.250980406999588,
+ 0.250980406999588,
+ 0.250980406999588
+ ]
+ }
+ }
+ },
+ "Component_[1843303322527297409]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 1843303322527297409
+ },
+ "Component_[380249072065273654]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 380249072065273654,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[7476660583684339787]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 7476660583684339787
+ },
+ "Component_[7557626501215118375]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 7557626501215118375
+ },
+ "Component_[7984048488947365511]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 7984048488947365511
+ },
+ "Component_[8118181039276487398]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 8118181039276487398
+ },
+ "Component_[9189909764215270515]": {
+ "$type": "EditorLockComponent",
+ "Id": 9189909764215270515
+ }
+ }
+ },
+ "Entity_[1172344194419]": {
+ "Id": "Entity_[1172344194419]",
+ "Name": "Shader Ball",
+ "Components": {
+ "Component_[10789351944715265527]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 10789351944715265527
+ },
+ "Component_[12037033284781049225]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 12037033284781049225
+ },
+ "Component_[13759153306105970079]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 13759153306105970079
+ },
+ "Component_[14135560884830586279]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14135560884830586279
+ },
+ "Component_[16247165675903986673]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 16247165675903986673
+ },
+ "Component_[18082433625958885247]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 18082433625958885247
+ },
+ "Component_[6472623349872972660]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6472623349872972660,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Rotate": [
+ 0.0,
+ 0.10000000149011612,
+ 180.0
+ ]
+ }
+ },
+ "Component_[6495255223970673916]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 6495255223970673916,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{FD340C30-755C-5911-92A3-19A3F7A77931}",
+ "subId": 281415304
+ },
+ "assetHint": "objects/shaderball/shaderball_default_1m.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[8056625192494070973]": {
+ "$type": "SelectionComponent",
+ "Id": 8056625192494070973
+ },
+ "Component_[8550141614185782969]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 8550141614185782969
+ },
+ "Component_[9439770997198325425]": {
+ "$type": "EditorLockComponent",
+ "Id": 9439770997198325425
+ }
+ }
+ },
+ "Entity_[1176639161715]": {
+ "Id": "Entity_[1176639161715]",
+ "Name": "Atom Default Environment",
+ "Components": {
+ "Component_[10757302973393310045]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 10757302973393310045,
+ "Parent Entity": "Entity_[1146574390643]"
+ },
+ "Component_[14505817420424255464]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14505817420424255464,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 10757302973393310045
+ }
+ ]
+ },
+ "Component_[14988041764659020032]": {
+ "$type": "EditorLockComponent",
+ "Id": 14988041764659020032
+ },
+ "Component_[15808690248755038124]": {
+ "$type": "SelectionComponent",
+ "Id": 15808690248755038124
+ },
+ "Component_[15900837685796817138]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 15900837685796817138
+ },
+ "Component_[3298767348226484884]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3298767348226484884
+ },
+ "Component_[4076975109609220594]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 4076975109609220594
+ },
+ "Component_[5679760548946028854]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5679760548946028854
+ },
+ "Component_[5855590796136709437]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5855590796136709437,
+ "Child Entity Order": [
+ "Entity_[1155164325235]",
+ "Entity_[1180934129011]",
+ "Entity_[1172344194419]",
+ "Entity_[1168049227123]",
+ "Entity_[1163754259827]",
+ "Entity_[1159459292531]"
+ ]
+ },
+ "Component_[9277695270015777859]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 9277695270015777859
+ }
+ }
+ },
+ "Entity_[1180934129011]": {
+ "Id": "Entity_[1180934129011]",
+ "Name": "Global Sky",
+ "Components": {
+ "Component_[11231930600558681245]": {
+ "$type": "AZ::Render::EditorHDRiSkyboxComponent",
+ "Id": 11231930600558681245,
+ "Controller": {
+ "Configuration": {
+ "CubemapAsset": {
+ "assetId": {
+ "guid": "{215E47FD-D181-5832-B1AB-91673ABF6399}",
+ "subId": 1000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_skyboxcm.exr.streamingimage"
+ }
+ }
+ }
+ },
+ "Component_[11980494120202836095]": {
+ "$type": "SelectionComponent",
+ "Id": 11980494120202836095
+ },
+ "Component_[1428633914413949476]": {
+ "$type": "EditorLockComponent",
+ "Id": 1428633914413949476
+ },
+ "Component_[14936200426671614999]": {
+ "$type": "AZ::Render::EditorImageBasedLightComponent",
+ "Id": 14936200426671614999,
+ "Controller": {
+ "Configuration": {
+ "diffuseImageAsset": {
+ "assetId": {
+ "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+ "subId": 3000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_ibldiffuse.exr.streamingimage"
+ },
+ "specularImageAsset": {
+ "assetId": {
+ "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+ "subId": 2000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_iblspecular.exr.streamingimage"
+ }
+ }
+ }
+ },
+ "Component_[14994774102579326069]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 14994774102579326069
+ },
+ "Component_[15417479889044493340]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 15417479889044493340
+ },
+ "Component_[15826613364991382688]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 15826613364991382688
+ },
+ "Component_[1665003113283562343]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 1665003113283562343
+ },
+ "Component_[3704934735944502280]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 3704934735944502280
+ },
+ "Component_[5698542331457326479]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 5698542331457326479
+ },
+ "Component_[6644513399057217122]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6644513399057217122,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[931091830724002070]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 931091830724002070
+ }
+ }
+ },
+ "Entity_[1386540226381]": {
+ "Id": "Entity_[1386540226381]",
+ "Name": "s3",
+ "Components": {
+ "Component_[11158492000035348927]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 11158492000035348927
+ },
+ "Component_[13101294672800983417]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 13101294672800983417
+ },
+ "Component_[13312594438559441372]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 13312594438559441372
+ },
+ "Component_[14532086496432860950]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 14532086496432860950
+ },
+ "Component_[15284288439796123368]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 15284288439796123368
+ },
+ "Component_[17553238493971510581]": {
+ "$type": "EditorScriptCanvasComponent",
+ "Id": 17553238493971510581,
+ "m_name": "s3demo.scriptcanvas",
+ "runtimeDataIsValid": true,
+ "runtimeDataOverrides": {
+ "source": {
+ "id": "{D72821C5-1C31-5AE5-891D-30371C49B9E0}"
+ }
+ },
+ "sourceHandle": {
+ "id": "{D72821C5-1C31-5AE5-891D-30371C49B9E0}"
+ }
+ },
+ "Component_[17621265899133139471]": {
+ "$type": "EditorLockComponent",
+ "Id": 17621265899133139471
+ },
+ "Component_[2763569637558196086]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 2763569637558196086,
+ "Parent Entity": "Entity_[1146574390643]",
+ "Transform Data": {
+ "Translate": [
+ 0.0,
+ 0.10000038146972656,
+ 4.005923748016357
+ ]
+ }
+ },
+ "Component_[3946146016045577093]": {
+ "$type": "SelectionComponent",
+ "Id": 3946146016045577093
+ },
+ "Component_[4521094551057628689]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 4521094551057628689
+ },
+ "Component_[5378520857609165944]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 5378520857609165944
+ }
+ }
+ },
+ "Entity_[1390835193677]": {
+ "Id": "Entity_[1390835193677]",
+ "Name": "dynamodb",
+ "Components": {
+ "Component_[13579073750136791325]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 13579073750136791325
+ },
+ "Component_[14581079376974874313]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 14581079376974874313
+ },
+ "Component_[15354545119837386836]": {
+ "$type": "SelectionComponent",
+ "Id": 15354545119837386836
+ },
+ "Component_[15913971829919706180]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 15913971829919706180
+ },
+ "Component_[17308449372189366987]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 17308449372189366987
+ },
+ "Component_[17741852956994822371]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 17741852956994822371
+ },
+ "Component_[4363122368868820254]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 4363122368868820254
+ },
+ "Component_[4890242568951925088]": {
+ "$type": "EditorScriptCanvasComponent",
+ "Id": 4890242568951925088,
+ "m_name": "dynamodbdemo.scriptcanvas",
+ "runtimeDataIsValid": true,
+ "runtimeDataOverrides": {
+ "source": {
+ "id": "{004B97C6-75F3-5B95-ADA4-EBF751EEF697}"
+ }
+ },
+ "sourceHandle": {
+ "id": "{004B97C6-75F3-5B95-ADA4-EBF751EEF697}"
+ }
+ },
+ "Component_[7140725680315799866]": {
+ "$type": "EditorLockComponent",
+ "Id": 7140725680315799866
+ },
+ "Component_[8431133659360426398]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 8431133659360426398,
+ "Parent Entity": "Entity_[1146574390643]",
+ "Transform Data": {
+ "Translate": [
+ 0.0,
+ 0.10000038146972656,
+ 4.005923748016357
+ ]
+ }
+ },
+ "Component_[9486500593077263666]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 9486500593077263666
+ }
+ }
+ },
+ "Entity_[1395130160973]": {
+ "Id": "Entity_[1395130160973]",
+ "Name": "lambda",
+ "Components": {
+ "Component_[14224781635611846065]": {
+ "$type": "SelectionComponent",
+ "Id": 14224781635611846065
+ },
+ "Component_[14532864313352417822]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14532864313352417822
+ },
+ "Component_[14621438229914413040]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 14621438229914413040
+ },
+ "Component_[15642112885025274607]": {
+ "$type": "EditorLockComponent",
+ "Id": 15642112885025274607
+ },
+ "Component_[16340039184260739086]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 16340039184260739086
+ },
+ "Component_[17170806711467412600]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 17170806711467412600,
+ "Parent Entity": "Entity_[1146574390643]",
+ "Transform Data": {
+ "Translate": [
+ 0.0,
+ 0.10000038146972656,
+ 4.005923748016357
+ ]
+ }
+ },
+ "Component_[18080677632538463069]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 18080677632538463069
+ },
+ "Component_[2663457305102263144]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 2663457305102263144
+ },
+ "Component_[4954526281430171003]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 4954526281430171003
+ },
+ "Component_[6251151424244415885]": {
+ "$type": "EditorScriptCanvasComponent",
+ "Id": 6251151424244415885,
+ "m_name": "lambdademo.scriptcanvas",
+ "runtimeDataIsValid": true,
+ "runtimeDataOverrides": {
+ "source": {
+ "id": "{3DCA213D-534E-5C86-9308-2F7675A08029}"
+ }
+ },
+ "sourceHandle": {
+ "id": "{3DCA213D-534E-5C86-9308-2F7675A08029}"
+ }
+ },
+ "Component_[6526999075003995619]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 6526999075003995619
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/AutomatedTesting/Levels/AWS/Core/filelist.xml b/AutomatedTesting/Levels/AWS/Core/filelist.xml
deleted file mode 100644
index 9d1fcd2e83..0000000000
--- a/AutomatedTesting/Levels/AWS/Core/filelist.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/AWS/Core/level.pak b/AutomatedTesting/Levels/AWS/Core/level.pak
deleted file mode 100644
index 01b79da84e..0000000000
--- a/AutomatedTesting/Levels/AWS/Core/level.pak
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:4ba2f409fc974c72b8ee8b660d200ed1d013ee8408419b0e91d6d487e71e4997
-size 3774
diff --git a/AutomatedTesting/Levels/AWS/Metrics/Metrics.ly b/AutomatedTesting/Levels/AWS/Metrics/Metrics.ly
deleted file mode 100644
index 12998e89be..0000000000
--- a/AutomatedTesting/Levels/AWS/Metrics/Metrics.ly
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:023992998ab5a1d64b38dacd1d5e1a9dc930ff704289c0656ed6eaba6951d660
-size 9066
diff --git a/AutomatedTesting/Levels/AWS/Metrics/Metrics.prefab b/AutomatedTesting/Levels/AWS/Metrics/Metrics.prefab
new file mode 100644
index 0000000000..7f4144d734
--- /dev/null
+++ b/AutomatedTesting/Levels/AWS/Metrics/Metrics.prefab
@@ -0,0 +1,627 @@
+{
+ "ContainerEntity": {
+ "Id": "Entity_[1146574390643]",
+ "Name": "Level",
+ "Components": {
+ "Component_[10641544592923449938]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 10641544592923449938
+ },
+ "Component_[12039882709170782873]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 12039882709170782873
+ },
+ "Component_[12265484671603697631]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 12265484671603697631
+ },
+ "Component_[14126657869720434043]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 14126657869720434043,
+ "Child Entity Order": [
+ "Entity_[1176639161715]",
+ "Entity_[2086619895629]",
+ "Entity_[2086619895629]"
+ ]
+ },
+ "Component_[15230859088967841193]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 15230859088967841193,
+ "Parent Entity": ""
+ },
+ "Component_[16239496886950819870]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 16239496886950819870
+ },
+ "Component_[5688118765544765547]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 5688118765544765547
+ },
+ "Component_[6545738857812235305]": {
+ "$type": "SelectionComponent",
+ "Id": 6545738857812235305
+ },
+ "Component_[7247035804068349658]": {
+ "$type": "EditorPrefabComponent",
+ "Id": 7247035804068349658
+ },
+ "Component_[9307224322037797205]": {
+ "$type": "EditorLockComponent",
+ "Id": 9307224322037797205
+ },
+ "Component_[9562516168917670048]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9562516168917670048
+ }
+ }
+ },
+ "Entities": {
+ "Entity_[1155164325235]": {
+ "Id": "Entity_[1155164325235]",
+ "Name": "Sun",
+ "Components": {
+ "Component_[10440557478882592717]": {
+ "$type": "SelectionComponent",
+ "Id": 10440557478882592717
+ },
+ "Component_[13620450453324765907]": {
+ "$type": "EditorLockComponent",
+ "Id": 13620450453324765907
+ },
+ "Component_[2134313378593666258]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 2134313378593666258
+ },
+ "Component_[234010807770404186]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 234010807770404186
+ },
+ "Component_[2970359110423865725]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 2970359110423865725
+ },
+ "Component_[3722854130373041803]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3722854130373041803
+ },
+ "Component_[5992533738676323195]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5992533738676323195
+ },
+ "Component_[7378860763541895402]": {
+ "$type": "AZ::Render::EditorDirectionalLightComponent",
+ "Id": 7378860763541895402,
+ "Controller": {
+ "Configuration": {
+ "Intensity": 1.0,
+ "CameraEntityId": "",
+ "ShadowFilterMethod": 1
+ }
+ }
+ },
+ "Component_[7892834440890947578]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 7892834440890947578,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Translate": [
+ 0.0,
+ 0.0,
+ 13.487043380737305
+ ],
+ "Rotate": [
+ -76.13099670410156,
+ -0.847000002861023,
+ -15.8100004196167
+ ]
+ }
+ },
+ "Component_[8599729549570828259]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 8599729549570828259
+ },
+ "Component_[952797371922080273]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 952797371922080273
+ }
+ }
+ },
+ "Entity_[1159459292531]": {
+ "Id": "Entity_[1159459292531]",
+ "Name": "Ground",
+ "Components": {
+ "Component_[11701138785793981042]": {
+ "$type": "SelectionComponent",
+ "Id": 11701138785793981042
+ },
+ "Component_[12260880513256986252]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 12260880513256986252
+ },
+ "Component_[13711420870643673468]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 13711420870643673468
+ },
+ "Component_[138002849734991713]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 138002849734991713
+ },
+ "Component_[16578565737331764849]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 16578565737331764849,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[16919232076966545697]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 16919232076966545697
+ },
+ "Component_[5182430712893438093]": {
+ "$type": "EditorMaterialComponent",
+ "Id": 5182430712893438093
+ },
+ "Component_[5675108321710651991]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 5675108321710651991,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{0CD745C0-6AA8-569A-A68A-73A3270986C4}",
+ "subId": 277889906
+ },
+ "assetHint": "objects/groudplane/groundplane_512x512m.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[5681893399601237518]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5681893399601237518
+ },
+ "Component_[592692962543397545]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 592692962543397545
+ },
+ "Component_[7090012899106946164]": {
+ "$type": "EditorLockComponent",
+ "Id": 7090012899106946164
+ },
+ "Component_[9410832619875640998]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9410832619875640998
+ }
+ }
+ },
+ "Entity_[1163754259827]": {
+ "Id": "Entity_[1163754259827]",
+ "Name": "Camera",
+ "Components": {
+ "Component_[11895140916889160460]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 11895140916889160460
+ },
+ "Component_[16880285896855930892]": {
+ "$type": "{CA11DA46-29FF-4083-B5F6-E02C3A8C3A3D} EditorCameraComponent",
+ "Id": 16880285896855930892,
+ "Controller": {
+ "Configuration": {
+ "Field of View": 55.0,
+ "EditorEntityId": 6861302815203973165
+ }
+ }
+ },
+ "Component_[17187464423780271193]": {
+ "$type": "EditorLockComponent",
+ "Id": 17187464423780271193
+ },
+ "Component_[17495696818315413311]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 17495696818315413311
+ },
+ "Component_[18086214374043522055]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 18086214374043522055,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Translate": [
+ -2.3000001907348633,
+ -3.9368600845336914,
+ 1.0
+ ],
+ "Rotate": [
+ -2.050307512283325,
+ 1.9552897214889526,
+ -43.623355865478516
+ ]
+ }
+ },
+ "Component_[18387556550380114975]": {
+ "$type": "SelectionComponent",
+ "Id": 18387556550380114975
+ },
+ "Component_[2654521436129313160]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 2654521436129313160
+ },
+ "Component_[5265045084611556958]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5265045084611556958
+ },
+ "Component_[7169798125182238623]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 7169798125182238623
+ },
+ "Component_[7255796294953281766]": {
+ "$type": "GenericComponentWrapper",
+ "Id": 7255796294953281766,
+ "m_template": {
+ "$type": "FlyCameraInputComponent"
+ }
+ },
+ "Component_[8866210352157164042]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 8866210352157164042
+ },
+ "Component_[9129253381063760879]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 9129253381063760879
+ }
+ }
+ },
+ "Entity_[1168049227123]": {
+ "Id": "Entity_[1168049227123]",
+ "Name": "Grid",
+ "Components": {
+ "Component_[11443347433215807130]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 11443347433215807130
+ },
+ "Component_[11779275529534764488]": {
+ "$type": "SelectionComponent",
+ "Id": 11779275529534764488
+ },
+ "Component_[14249419413039427459]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14249419413039427459
+ },
+ "Component_[15448581635946161318]": {
+ "$type": "AZ::Render::EditorGridComponent",
+ "Id": 15448581635946161318,
+ "Controller": {
+ "Configuration": {
+ "primarySpacing": 4.0,
+ "primaryColor": [
+ 0.501960813999176,
+ 0.501960813999176,
+ 0.501960813999176
+ ],
+ "secondarySpacing": 0.5,
+ "secondaryColor": [
+ 0.250980406999588,
+ 0.250980406999588,
+ 0.250980406999588
+ ]
+ }
+ }
+ },
+ "Component_[1843303322527297409]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 1843303322527297409
+ },
+ "Component_[380249072065273654]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 380249072065273654,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[7476660583684339787]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 7476660583684339787
+ },
+ "Component_[7557626501215118375]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 7557626501215118375
+ },
+ "Component_[7984048488947365511]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 7984048488947365511
+ },
+ "Component_[8118181039276487398]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 8118181039276487398
+ },
+ "Component_[9189909764215270515]": {
+ "$type": "EditorLockComponent",
+ "Id": 9189909764215270515
+ }
+ }
+ },
+ "Entity_[1172344194419]": {
+ "Id": "Entity_[1172344194419]",
+ "Name": "Shader Ball",
+ "Components": {
+ "Component_[10789351944715265527]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 10789351944715265527
+ },
+ "Component_[12037033284781049225]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 12037033284781049225
+ },
+ "Component_[13759153306105970079]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 13759153306105970079
+ },
+ "Component_[14135560884830586279]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14135560884830586279
+ },
+ "Component_[16247165675903986673]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 16247165675903986673
+ },
+ "Component_[18082433625958885247]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 18082433625958885247
+ },
+ "Component_[6472623349872972660]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6472623349872972660,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Rotate": [
+ 0.0,
+ 0.10000000149011612,
+ 180.0
+ ]
+ }
+ },
+ "Component_[6495255223970673916]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 6495255223970673916,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{FD340C30-755C-5911-92A3-19A3F7A77931}",
+ "subId": 281415304
+ },
+ "assetHint": "objects/shaderball/shaderball_default_1m.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[8056625192494070973]": {
+ "$type": "SelectionComponent",
+ "Id": 8056625192494070973
+ },
+ "Component_[8550141614185782969]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 8550141614185782969
+ },
+ "Component_[9439770997198325425]": {
+ "$type": "EditorLockComponent",
+ "Id": 9439770997198325425
+ }
+ }
+ },
+ "Entity_[1176639161715]": {
+ "Id": "Entity_[1176639161715]",
+ "Name": "Atom Default Environment",
+ "Components": {
+ "Component_[10757302973393310045]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 10757302973393310045,
+ "Parent Entity": "Entity_[1146574390643]"
+ },
+ "Component_[14505817420424255464]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14505817420424255464,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 10757302973393310045
+ }
+ ]
+ },
+ "Component_[14988041764659020032]": {
+ "$type": "EditorLockComponent",
+ "Id": 14988041764659020032
+ },
+ "Component_[15808690248755038124]": {
+ "$type": "SelectionComponent",
+ "Id": 15808690248755038124
+ },
+ "Component_[15900837685796817138]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 15900837685796817138
+ },
+ "Component_[3298767348226484884]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3298767348226484884
+ },
+ "Component_[4076975109609220594]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 4076975109609220594
+ },
+ "Component_[5679760548946028854]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5679760548946028854
+ },
+ "Component_[5855590796136709437]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5855590796136709437,
+ "Child Entity Order": [
+ "Entity_[1155164325235]",
+ "Entity_[1180934129011]",
+ "Entity_[1172344194419]",
+ "Entity_[1168049227123]",
+ "Entity_[1163754259827]",
+ "Entity_[1159459292531]"
+ ]
+ },
+ "Component_[9277695270015777859]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 9277695270015777859
+ }
+ }
+ },
+ "Entity_[1180934129011]": {
+ "Id": "Entity_[1180934129011]",
+ "Name": "Global Sky",
+ "Components": {
+ "Component_[11231930600558681245]": {
+ "$type": "AZ::Render::EditorHDRiSkyboxComponent",
+ "Id": 11231930600558681245,
+ "Controller": {
+ "Configuration": {
+ "CubemapAsset": {
+ "assetId": {
+ "guid": "{215E47FD-D181-5832-B1AB-91673ABF6399}",
+ "subId": 1000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_skyboxcm.exr.streamingimage"
+ }
+ }
+ }
+ },
+ "Component_[11980494120202836095]": {
+ "$type": "SelectionComponent",
+ "Id": 11980494120202836095
+ },
+ "Component_[1428633914413949476]": {
+ "$type": "EditorLockComponent",
+ "Id": 1428633914413949476
+ },
+ "Component_[14936200426671614999]": {
+ "$type": "AZ::Render::EditorImageBasedLightComponent",
+ "Id": 14936200426671614999,
+ "Controller": {
+ "Configuration": {
+ "diffuseImageAsset": {
+ "assetId": {
+ "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+ "subId": 3000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_ibldiffuse.exr.streamingimage"
+ },
+ "specularImageAsset": {
+ "assetId": {
+ "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+ "subId": 2000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_iblspecular.exr.streamingimage"
+ }
+ }
+ }
+ },
+ "Component_[14994774102579326069]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 14994774102579326069
+ },
+ "Component_[15417479889044493340]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 15417479889044493340
+ },
+ "Component_[15826613364991382688]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 15826613364991382688
+ },
+ "Component_[1665003113283562343]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 1665003113283562343
+ },
+ "Component_[3704934735944502280]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 3704934735944502280
+ },
+ "Component_[5698542331457326479]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 5698542331457326479
+ },
+ "Component_[6644513399057217122]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6644513399057217122,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[931091830724002070]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 931091830724002070
+ }
+ }
+ },
+ "Entity_[2086619895629]": {
+ "Id": "Entity_[2086619895629]",
+ "Name": "metrics",
+ "Components": {
+ "Component_[10664937239001700943]": {
+ "$type": "SelectionComponent",
+ "Id": 10664937239001700943
+ },
+ "Component_[12411100785613400502]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 12411100785613400502
+ },
+ "Component_[13461617945403887462]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 13461617945403887462
+ },
+ "Component_[1398528805938487915]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 1398528805938487915
+ },
+ "Component_[15586634767575159325]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 15586634767575159325
+ },
+ "Component_[1737734807882912852]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 1737734807882912852
+ },
+ "Component_[2398400563175352537]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 2398400563175352537
+ },
+ "Component_[3845542252660517302]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 3845542252660517302
+ },
+ "Component_[3873433240186817282]": {
+ "$type": "EditorLockComponent",
+ "Id": 3873433240186817282
+ },
+ "Component_[4474288881478318615]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 4474288881478318615,
+ "Parent Entity": "Entity_[1146574390643]",
+ "Transform Data": {
+ "Translate": [
+ 0.0,
+ 0.10000038146972656,
+ 4.005923748016357
+ ]
+ }
+ },
+ "Component_[5865591669658426602]": {
+ "$type": "ScriptEditorComponent",
+ "Id": 5865591669658426602,
+ "ScriptComponent": {
+ "Script": {
+ "assetId": {
+ "guid": "{50D66834-9277-5469-892E-DAD087FF4C0E}",
+ "subId": 1
+ },
+ "loadBehavior": "QueueLoad",
+ "assetHint": "levels/aws/metrics/script/metrics.luac"
+ }
+ },
+ "ScriptAsset": {
+ "assetId": {
+ "guid": "{50D66834-9277-5469-892E-DAD087FF4C0E}",
+ "subId": 1
+ },
+ "assetHint": "levels/aws/metrics/script/metrics.luac"
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/AutomatedTesting/Levels/AWS/Metrics/filelist.xml b/AutomatedTesting/Levels/AWS/Metrics/filelist.xml
deleted file mode 100644
index 3539102346..0000000000
--- a/AutomatedTesting/Levels/AWS/Metrics/filelist.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/AWS/Metrics/level.pak b/AutomatedTesting/Levels/AWS/Metrics/level.pak
deleted file mode 100644
index fd1f5ac6ad..0000000000
--- a/AutomatedTesting/Levels/AWS/Metrics/level.pak
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:e7c0c07b13bb64db344b94d5712e1e802e607a9dee506768b34481f4a76d8505
-size 3593
diff --git a/scripts/build/Platform/Linux/deploy_cdk_applications.sh b/scripts/build/Platform/Linux/deploy_cdk_applications.sh
new file mode 100755
index 0000000000..93a3dccd9f
--- /dev/null
+++ b/scripts/build/Platform/Linux/deploy_cdk_applications.sh
@@ -0,0 +1,106 @@
+#!/bin/bash
+
+# Copyright (c) Contributors to the Open 3D Engine Project.
+# For complete copyright and license terms please see the LICENSE at the root of this distribution.
+#
+# SPDX-License-Identifier: Apache-2.0 OR MIT
+#
+
+# Deploy the CDK applications for AWS gems (Linux only)
+# Prerequisites:
+# 1) Node.js is installed
+# 2) Node.js version >= 10.13.0, except for versions 13.0.0 - 13.6.0. A version in active long-term support is recommended.
+
+SOURCE_DIRECTORY=$(dirname "$0")
+PATH=$SOURCE_DIRECTORY/python:$PATH
+GEM_DIRECTORY=$SOURCE_DIRECTORY/Gems
+
+DeployCDKApplication()
+{
+ # Deploy the CDK application for a specific AWS gem
+ GEM_NAME=$1
+ ADDITIONAL_ARGUMENTS=$2
+ echo [cdk_deployment] Deploy the CDK application for the $GEM_NAME gem
+ pushd $GEM_DIRECTORY/$GEM_NAME/cdk
+
+ # Revert the CDK application code to a stable state using the provided commit ID
+ if ! git checkout $COMMIT_ID -- .;
+ then
+ echo [git_checkout] Failed to checkout the CDK application for the $GEM_NAME gem using commit ID $COMMIT_ID
+ popd
+ exit 1
+ fi
+
+ # Install required packages for the CDK application
+ if ! python -m pip install -r requirements.txt;
+ then
+ echo [cdk_deployment] Failed to install required packages for the $GEM_NAME gem
+ popd
+ exit 1
+ fi
+
+ # Deploy the CDK application
+ if ! cdk deploy $ADDITIONAL_ARGUMENTS --require-approval never;
+ then
+ echo [cdk_deployment] Failed to deploy the CDK application for the $GEM_NAME gem
+ popd
+ exit 1
+ fi
+ popd
+}
+
+# Create and activate a virtualenv for the CDK deployment
+if ! python/python.sh -m venv .env;
+then
+ echo [cdk_bootstrap] Failed to create a virtualenv for the CDK deployment
+ exit 1
+fi
+if ! source .env/bin/activate;
+then
+ echo [cdk_bootstrap] Failed to activate the virtualenv for the CDK deployment
+ exit 1
+fi
+
+echo [cdk_installation] Install the latest version of CDK
+if ! sudo npm uninstall -g aws-cdk;
+then
+ echo [cdk_bootstrap] Failed to uninstall the current version of CDK
+ exit 1
+fi
+if ! sudo npm install -g aws-cdk@latest;
+then
+ echo [cdk_bootstrap] Failed to install the latest version of CDK
+ exit 1
+fi
+
+# Set temporary AWS credentials from the assume role
+credentials=$(aws sts assume-role --query Credentials.[SecretAccessKey,SessionToken,AccessKeyId] --output text --role-arn $ASSUME_ROLE_ARN --role-session-name o3de-Automation-session)
+AWS_SECRET_ACCESS_KEY=$(echo "$credentials" | cut -d' ' -f1)
+AWS_SESSION_TOKEN=$(echo "$credentials" | cut -d' ' -f2)
+AWS_ACCESS_KEY_ID=$(echo "$credentials" | cut -d' ' -f3)
+
+O3DE_AWS_DEPLOY_ACCOUNT=$(echo "$ASSUME_ROLE_ARN" | cut -d':' -f5)
+
+# Bootstrap and deploy the CDK applications
+echo [cdk_bootstrap] Bootstrap CDK
+if ! cdk bootstrap aws://$O3DE_AWS_DEPLOY_ACCOUNT/$O3DE_AWS_DEPLOY_REGION;
+then
+ echo [cdk_bootstrap] Failed to bootstrap CDK
+ exit 1
+fi
+
+if ! DeployCDKApplication AWSCore "-c disable_access_log=true -c remove_all_storage_on_destroy=true --all";
+then
+ exit 1
+fi
+if ! DeployCDKApplication AWSClientAuth;
+then
+ exit 1
+fi
+if ! DeployCDKApplication AWSMetrics "-c batch_processing=true";
+then
+ exit 1
+fi
+
+exit 0
+
diff --git a/scripts/build/Platform/Linux/destroy_cdk_applications.sh b/scripts/build/Platform/Linux/destroy_cdk_applications.sh
new file mode 100755
index 0000000000..795ab78484
--- /dev/null
+++ b/scripts/build/Platform/Linux/destroy_cdk_applications.sh
@@ -0,0 +1,96 @@
+#!/bin/bash
+
+# Copyright (c) Contributors to the Open 3D Engine Project.
+# For complete copyright and license terms please see the LICENSE at the root of this distribution.
+#
+# SPDX-License-Identifier: Apache-2.0 OR MIT
+#
+
+# Deploy the CDK applications for AWS gems (Linux only)
+# Prerequisites:
+# 1) Node.js is installed
+# 2) Node.js version >= 10.13.0, except for versions 13.0.0 - 13.6.0. A version in active long-term support is recommended.
+
+SOURCE_DIRECTORY=$(dirname "$0")
+PATH=$SOURCE_DIRECTORY/python:$PATH
+GEM_DIRECTORY=$SOURCE_DIRECTORY/Gems
+
+DestroyCDKApplication()
+{
+# Destroy the CDK application for a specific AWS gem
+GEM_NAME=$1
+echo [cdk_destruction] Destroy the CDK application for the $GEM_NAME gem
+pushd $GEM_DIRECTORY/$GEM_NAME/cdk
+
+# Revert the CDK application code to a stable state using the provided commit ID
+if ! git checkout $COMMIT_ID -- .;
+then
+ echo [git_checkout] Failed to checkout the CDK application for the $GEM_NAME gem using commit ID $COMMIT_ID
+ popd
+ return 1
+fi
+
+# Install required packages for the CDK application
+if ! python -m pip install -r requirements.txt;
+then
+ echo [cdk_destruction] Failed to install required packages for the $GEM_NAME gem
+ popd
+ return 1
+fi
+
+# Destroy the CDK application
+if ! cdk destroy --all -f;
+then
+ echo [cdk_destruction] Failed to destroy the CDK application for the $GEM_NAME gem
+ popd
+ return 1
+fi
+popd
+return 0
+}
+
+# Create and activate a virtualenv for the CDK deployment
+if ! python/python.sh -m venv .env;
+then
+ echo [cdk_bootstrap] Failed to create a virtualenv for the CDK deployment
+ return 1
+fi
+if ! source .env/bin/activate;
+then
+ echo [cdk_bootstrap] Failed to activate the virtualenv for the CDK deployment
+ exit 1
+fi
+
+echo [cdk_installation] Install the latest version of CDK
+if ! sudo npm uninstall -g aws-cdk;
+then
+ echo [cdk_bootstrap] Failed to uninstall the current version of CDK
+ exit 1
+fi
+if ! sudo npm install -g aws-cdk@latest;
+then
+ echo [cdk_bootstrap] Failed to install the latest version of CDK
+ exit 1
+fi
+
+# Set temporary AWS credentials from the assume role
+credentials=$(aws sts assume-role --query Credentials.[SecretAccessKey,SessionToken,AccessKeyId] --output text --role-arn $ASSUME_ROLE_ARN --role-session-name o3de-Automation-session)
+AWS_SECRET_ACCESS_KEY=$(echo "$credentials" | cut -d' ' -f1)
+AWS_SESSION_TOKEN=$(echo "$credentials" | cut -d' ' -f2)
+AWS_ACCESS_KEY_ID=$(echo "$credentials" | cut -d' ' -f3)
+
+ERROR_EXISTS=0
+DestroyCDKApplication AWSCore
+ERROR_EXISTS=$?
+DestroyCDKApplication AWSClientAuth
+ERROR_EXISTS=$?
+DestroyCDKApplication AWSMetrics
+ERROR_EXISTS=$?
+
+if [ $ERROR_EXISTS -eq 1 ]
+then
+ exit 1
+fi
+
+exit 0
+