[AWS][Metrics] Resource names are too long leading to CDK deployment failures (#2291)
Sanitize resource names to prevent AWS resource failures.monroegm-disable-blank-issue-2
parent
5b8b51924a
commit
c8b55af401
@ -0,0 +1,6 @@
|
|||||||
|
"""
|
||||||
|
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
|
||||||
|
"""
|
||||||
@ -0,0 +1,45 @@
|
|||||||
|
"""
|
||||||
|
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 hashlib
|
||||||
|
|
||||||
|
MAX_RESOURCE_NAME_LENGTH_MAPPING = {
|
||||||
|
'athena_work_group': 128,
|
||||||
|
'athena_named_query': 128,
|
||||||
|
'cloudformation_stack': 128,
|
||||||
|
'cloudwatch_dashboard': 255,
|
||||||
|
'cloudwatch_log_group': 512,
|
||||||
|
'firehose_delivery_stream': 64,
|
||||||
|
'iam_managed_policy': 144,
|
||||||
|
'iam_role': 64,
|
||||||
|
'kinesis_application': 128,
|
||||||
|
'kinesis_stream': 128,
|
||||||
|
'lambda_function': 64,
|
||||||
|
's3_bucket': 63
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def sanitize_resource_name(resource_name: str, resource_type: str) -> str:
|
||||||
|
"""
|
||||||
|
Truncate the resource name if its length exceeds the limit.
|
||||||
|
This is the best effort for sanitizing resource names based on the AWS documents since each AWS service
|
||||||
|
has its unique restrictions. Customers can extend this function for validation or sanitization.
|
||||||
|
|
||||||
|
:param resource_name: Original name of the resource.
|
||||||
|
:param resource_type: Type of the resource.
|
||||||
|
:return Sanitized resource name that can be deployed with AWS.
|
||||||
|
"""
|
||||||
|
result = resource_name
|
||||||
|
if not MAX_RESOURCE_NAME_LENGTH_MAPPING.get(resource_type):
|
||||||
|
return result
|
||||||
|
|
||||||
|
if len(resource_name) > MAX_RESOURCE_NAME_LENGTH_MAPPING[resource_type]:
|
||||||
|
# PYTHONHASHSEED is set to "random" by default in Python 3.3 and up. Cannot use
|
||||||
|
# the built-in hash function here since it will give a different return value in each session
|
||||||
|
digest = "-%x" % (int(hashlib.md5(resource_name.encode('ascii', 'ignore')).hexdigest(), 16) & 0xffffffff)
|
||||||
|
result = resource_name[:MAX_RESOURCE_NAME_LENGTH_MAPPING[resource_type] - len(digest)] + digest
|
||||||
|
return result
|
||||||
Loading…
Reference in New Issue