cdk-factory 0.18.8__py3-none-any.whl → 0.18.10__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cdk-factory might be problematic. Click here for more details.
- cdk_factory/configurations/deployment.py +12 -0
- cdk_factory/configurations/resources/acm.py +9 -2
- cdk_factory/configurations/resources/auto_scaling.py +2 -5
- cdk_factory/constructs/lambdas/policies/policy_docs.py +1 -1
- cdk_factory/interfaces/networked_stack_mixin.py +1 -1
- cdk_factory/interfaces/standardized_ssm_mixin.py +12 -10
- cdk_factory/stack_library/api_gateway/api_gateway_stack.py +2 -2
- cdk_factory/stack_library/auto_scaling/{auto_scaling_stack_standardized.py → auto_scaling_stack.py} +9 -4
- cdk_factory/stack_library/cognito/cognito_stack.py +2 -2
- cdk_factory/stack_library/dynamodb/dynamodb_stack.py +2 -2
- cdk_factory/stack_library/ecs/__init__.py +2 -4
- cdk_factory/stack_library/ecs/{ecs_cluster_stack_standardized.py → ecs_cluster_stack.py} +13 -31
- cdk_factory/stack_library/load_balancer/load_balancer_stack.py +40 -57
- cdk_factory/stack_library/rds/rds_stack.py +2 -2
- cdk_factory/stack_library/rum/rum_stack.py +3 -3
- cdk_factory/stack_library/vpc/{vpc_stack_standardized.py → vpc_stack.py} +14 -10
- cdk_factory/utilities/api_gateway_integration_utility.py +2 -2
- cdk_factory/utilities/environment_services.py +2 -2
- cdk_factory/version.py +1 -1
- {cdk_factory-0.18.8.dist-info → cdk_factory-0.18.10.dist-info}/METADATA +1 -1
- {cdk_factory-0.18.8.dist-info → cdk_factory-0.18.10.dist-info}/RECORD +24 -24
- {cdk_factory-0.18.8.dist-info → cdk_factory-0.18.10.dist-info}/WHEEL +0 -0
- {cdk_factory-0.18.8.dist-info → cdk_factory-0.18.10.dist-info}/entry_points.txt +0 -0
- {cdk_factory-0.18.8.dist-info → cdk_factory-0.18.10.dist-info}/licenses/LICENSE +0 -0
|
@@ -28,6 +28,18 @@ class DeploymentConfig:
|
|
|
28
28
|
self.__load()
|
|
29
29
|
|
|
30
30
|
def __load(self):
|
|
31
|
+
# Validate environment consistency
|
|
32
|
+
deployment_env = self.__deployment.get("environment")
|
|
33
|
+
workload_env = self.__workload.get("environment")
|
|
34
|
+
|
|
35
|
+
if deployment_env and workload_env and deployment_env != workload_env:
|
|
36
|
+
from aws_lambda_powertools import Logger
|
|
37
|
+
logger = Logger()
|
|
38
|
+
logger.warning(
|
|
39
|
+
f"Environment mismatch: deployment.environment='{deployment_env}' != workload.environment='{workload_env}'. "
|
|
40
|
+
f"Using workload.environment for consistency."
|
|
41
|
+
)
|
|
42
|
+
|
|
31
43
|
self.__load_pipeline()
|
|
32
44
|
self.__load_stacks()
|
|
33
45
|
|
|
@@ -59,15 +59,22 @@ class AcmConfig:
|
|
|
59
59
|
"""Certificate transparency logging preference (ENABLED or DISABLED)"""
|
|
60
60
|
return self.__config.get("certificate_transparency_logging_preference")
|
|
61
61
|
|
|
62
|
+
@property
|
|
63
|
+
def ssm(self) -> Dict[str, Any]:
|
|
64
|
+
"""SSM configuration for importing/exporting resources"""
|
|
65
|
+
return self.__config.get("ssm", {})
|
|
66
|
+
|
|
62
67
|
@property
|
|
63
68
|
def ssm_exports(self) -> Dict[str, str]:
|
|
64
69
|
"""SSM parameter paths to export certificate details"""
|
|
65
|
-
exports = self.
|
|
70
|
+
exports = self.ssm.get("exports", {})
|
|
66
71
|
|
|
67
72
|
# Provide default SSM export path if not specified
|
|
68
73
|
if not exports and self.__deployment:
|
|
74
|
+
workload_env = self.__deployment.workload.get("environment", self.__deployment.environment)
|
|
75
|
+
workload_name = self.__deployment.workload.get("name", self.__deployment.workload_name)
|
|
69
76
|
exports = {
|
|
70
|
-
"certificate_arn": f"/{
|
|
77
|
+
"certificate_arn": f"/{workload_env}/{workload_name}/certificate/arn"
|
|
71
78
|
}
|
|
72
79
|
|
|
73
80
|
return exports
|
|
@@ -70,12 +70,9 @@ class AutoScalingConfig(EnhancedBaseConfig):
|
|
|
70
70
|
return self.__config.get("termination_policies", ["DEFAULT"])
|
|
71
71
|
|
|
72
72
|
@property
|
|
73
|
-
def update_policy(self) -> Dict[str, Any]:
|
|
73
|
+
def update_policy(self) -> Optional[Dict[str, Any]]:
|
|
74
74
|
"""Update policy configuration"""
|
|
75
|
-
return self.__config.get(
|
|
76
|
-
"update_policy",
|
|
77
|
-
{"min_instances_in_service": 1, "max_batch_size": 1, "pause_time": 300},
|
|
78
|
-
)
|
|
75
|
+
return self.__config.get("update_policy")
|
|
79
76
|
|
|
80
77
|
@property
|
|
81
78
|
def user_data_commands(self) -> List[str]:
|
|
@@ -46,7 +46,7 @@ class ResourceResolver:
|
|
|
46
46
|
ssm_config = lambda_dict.get("ssm", {})
|
|
47
47
|
|
|
48
48
|
if ssm_config.get("enabled", False):
|
|
49
|
-
self._ssm_mixin.
|
|
49
|
+
self._ssm_mixin.setup_ssm_integration(
|
|
50
50
|
scope=self.scope,
|
|
51
51
|
config=lambda_dict,
|
|
52
52
|
resource_type="lambda",
|
|
@@ -26,7 +26,7 @@ class NetworkedStackMixin(StandardizedSsmMixin, VPCProviderMixin):
|
|
|
26
26
|
# SSM initialization is handled automatically by StandardizedSsmMixin.__init__
|
|
27
27
|
|
|
28
28
|
def _build(self, stack_config, deployment, workload):
|
|
29
|
-
self.
|
|
29
|
+
self.setup_ssm_integration(scope=self, config=stack_config.dictionary, resource_type="my-resource", resource_name="my-name")
|
|
30
30
|
self.vpc = self.resolve_vpc(stack_config, deployment, workload)
|
|
31
31
|
"""
|
|
32
32
|
|
|
@@ -153,7 +153,7 @@ class StandardizedSsmMixin:
|
|
|
153
153
|
normalized = normalized.strip('-')
|
|
154
154
|
return normalized
|
|
155
155
|
|
|
156
|
-
def
|
|
156
|
+
def setup_ssm_integration(
|
|
157
157
|
self,
|
|
158
158
|
scope: Construct,
|
|
159
159
|
config: Any,
|
|
@@ -202,7 +202,7 @@ class StandardizedSsmMixin:
|
|
|
202
202
|
logger.info(f"SSM imports: {len(self.ssm_config.get('imports', {}))}")
|
|
203
203
|
logger.info(f"SSM exports: {len(self.ssm_config.get('exports', {}))}")
|
|
204
204
|
|
|
205
|
-
def
|
|
205
|
+
def process_ssm_imports(self) -> None:
|
|
206
206
|
"""
|
|
207
207
|
Process SSM imports using standardized approach.
|
|
208
208
|
|
|
@@ -230,7 +230,7 @@ class StandardizedSsmMixin:
|
|
|
230
230
|
logger.error(error_msg)
|
|
231
231
|
raise ValueError(error_msg)
|
|
232
232
|
|
|
233
|
-
def
|
|
233
|
+
def export_ssm_parameters(self, resource_values: Dict[str, Any]) -> Dict[str, str]:
|
|
234
234
|
"""
|
|
235
235
|
Export SSM parameters using standardized approach.
|
|
236
236
|
|
|
@@ -338,16 +338,18 @@ class StandardizedSsmMixin:
|
|
|
338
338
|
# Prepare template variables
|
|
339
339
|
variables = {}
|
|
340
340
|
|
|
341
|
-
|
|
341
|
+
# Always prioritize workload environment for consistency
|
|
342
|
+
if self.workload:
|
|
343
|
+
variables["ENVIRONMENT"] = self.workload.dictionary.get("environment", "test")
|
|
344
|
+
variables["WORKLOAD_NAME"] = self.workload.dictionary.get("name", "test-workload")
|
|
345
|
+
variables["AWS_REGION"] = os.getenv("AWS_REGION", "us-east-1")
|
|
346
|
+
elif self.deployment:
|
|
347
|
+
# Fallback to deployment only if workload not available
|
|
342
348
|
variables["ENVIRONMENT"] = self.deployment.environment
|
|
343
349
|
variables["WORKLOAD_NAME"] = self.deployment.workload_name
|
|
344
350
|
variables["AWS_REGION"] = getattr(self.deployment, 'region', None) or os.getenv("AWS_REGION", "us-east-1")
|
|
345
|
-
elif self.workload:
|
|
346
|
-
variables["ENVIRONMENT"] = getattr(self.workload, 'environment', 'test')
|
|
347
|
-
variables["WORKLOAD_NAME"] = getattr(self.workload, 'name', 'test-workload')
|
|
348
|
-
variables["AWS_REGION"] = os.getenv("AWS_REGION", "us-east-1")
|
|
349
351
|
else:
|
|
350
|
-
#
|
|
352
|
+
# Final fallback to environment variables
|
|
351
353
|
variables["ENVIRONMENT"] = os.getenv("ENVIRONMENT", "test")
|
|
352
354
|
variables["WORKLOAD_NAME"] = os.getenv("WORKLOAD_NAME", "test-workload")
|
|
353
355
|
variables["AWS_REGION"] = os.getenv("AWS_REGION", "us-east-1")
|
|
@@ -398,7 +400,7 @@ class StandardizedSsmMixin:
|
|
|
398
400
|
resource_type = segments[3]
|
|
399
401
|
|
|
400
402
|
# Check for valid environment patterns
|
|
401
|
-
if environment not in ["dev", "staging", "prod", "test"]:
|
|
403
|
+
if environment not in ["dev", "staging", "prod", "test", "alpha", "beta", "sandbox"]:
|
|
402
404
|
logger.warning(f"{context}: Unusual environment segment: {environment}")
|
|
403
405
|
|
|
404
406
|
# Check for valid resource type patterns
|
|
@@ -744,7 +744,7 @@ class ApiGatewayStack(IStack, StandardizedSsmMixin):
|
|
|
744
744
|
# Setup enhanced SSM integration with proper resource type and name
|
|
745
745
|
api_name = self.api_config.name or "api-gateway"
|
|
746
746
|
|
|
747
|
-
self.
|
|
747
|
+
self.setup_ssm_integration(
|
|
748
748
|
scope=self,
|
|
749
749
|
config=self.stack_config.dictionary.get("api_gateway", {}),
|
|
750
750
|
resource_type="api-gateway",
|
|
@@ -775,7 +775,7 @@ class ApiGatewayStack(IStack, StandardizedSsmMixin):
|
|
|
775
775
|
resource_values["authorizer_id"] = authorizer.authorizer_id
|
|
776
776
|
|
|
777
777
|
# Use enhanced SSM parameter export
|
|
778
|
-
exported_params = self.
|
|
778
|
+
exported_params = self.export_ssm_parameters(resource_values)
|
|
779
779
|
|
|
780
780
|
if exported_params:
|
|
781
781
|
logger.info(
|
cdk_factory/stack_library/auto_scaling/{auto_scaling_stack_standardized.py → auto_scaling_stack.py}
RENAMED
|
@@ -92,7 +92,7 @@ class AutoScalingStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
92
92
|
asg_name = deployment.build_resource_name(self.asg_config.name)
|
|
93
93
|
|
|
94
94
|
# Setup standardized SSM integration
|
|
95
|
-
self.
|
|
95
|
+
self.setup_ssm_integration(
|
|
96
96
|
scope=self,
|
|
97
97
|
config=self.asg_config,
|
|
98
98
|
resource_type="auto_scaling",
|
|
@@ -102,7 +102,7 @@ class AutoScalingStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
102
102
|
)
|
|
103
103
|
|
|
104
104
|
# Process SSM imports using standardized method
|
|
105
|
-
self.
|
|
105
|
+
self.process_ssm_imports()
|
|
106
106
|
|
|
107
107
|
# Get security groups using standardized approach
|
|
108
108
|
self.security_groups = self._get_security_groups()
|
|
@@ -358,7 +358,11 @@ class AutoScalingStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
358
358
|
elif self.asg_config.ami_type.upper() == "AMAZON-LINUX-2":
|
|
359
359
|
machine_image = ec2.MachineImage.latest_amazon_linux2()
|
|
360
360
|
elif self.asg_config.ami_type.upper() == "ECS_OPTIMIZED":
|
|
361
|
-
|
|
361
|
+
# Use ECS-optimized AMI from SSM parameter
|
|
362
|
+
from aws_cdk import aws_ssm as ssm
|
|
363
|
+
machine_image = ec2.MachineImage.from_ssm_parameter(
|
|
364
|
+
parameter_name="/aws/service/ecs/optimized-ami/amazon-linux-2023/recommended/image_id"
|
|
365
|
+
)
|
|
362
366
|
else:
|
|
363
367
|
# Default to latest Amazon Linux
|
|
364
368
|
machine_image = ec2.MachineImage.latest_amazon_linux2023()
|
|
@@ -483,6 +487,7 @@ class AutoScalingStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
483
487
|
update_policy = self.asg_config.update_policy
|
|
484
488
|
|
|
485
489
|
if not update_policy:
|
|
490
|
+
# No update policy configured, don't add one
|
|
486
491
|
return
|
|
487
492
|
|
|
488
493
|
# Get the underlying CloudFormation resource to add update policy
|
|
@@ -519,7 +524,7 @@ class AutoScalingStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
519
524
|
}
|
|
520
525
|
|
|
521
526
|
# Export using standardized SSM mixin
|
|
522
|
-
exported_params = self.
|
|
527
|
+
exported_params = self.export_ssm_parameters(resource_values)
|
|
523
528
|
|
|
524
529
|
logger.info(f"Exported SSM parameters: {exported_params}")
|
|
525
530
|
|
|
@@ -564,7 +564,7 @@ class CognitoStack(IStack, StandardizedSsmMixin):
|
|
|
564
564
|
# Setup enhanced SSM integration with proper resource type and name
|
|
565
565
|
# Use "user-pool" as resource identifier for SSM paths, not the full pool name
|
|
566
566
|
|
|
567
|
-
self.
|
|
567
|
+
self.setup_ssm_integration(
|
|
568
568
|
scope=self,
|
|
569
569
|
config=self.stack_config.dictionary.get("cognito", {}),
|
|
570
570
|
resource_type="cognito",
|
|
@@ -591,7 +591,7 @@ class CognitoStack(IStack, StandardizedSsmMixin):
|
|
|
591
591
|
# or retrieve via AWS Console/CLI if needed.
|
|
592
592
|
|
|
593
593
|
# Use enhanced SSM parameter export
|
|
594
|
-
exported_params = self.
|
|
594
|
+
exported_params = self.export_ssm_parameters(resource_values)
|
|
595
595
|
|
|
596
596
|
if exported_params:
|
|
597
597
|
logger.info(f"Exported {len(exported_params)} Cognito parameters to SSM")
|
|
@@ -152,7 +152,7 @@ class DynamoDBStack(IStack, StandardizedSsmMixin):
|
|
|
152
152
|
# Setup enhanced SSM integration with proper resource type and name
|
|
153
153
|
# Use "app-table" as resource identifier for SSM paths, not the full table name
|
|
154
154
|
|
|
155
|
-
self.
|
|
155
|
+
self.setup_ssm_integration(
|
|
156
156
|
scope=self,
|
|
157
157
|
config=self.stack_config.dictionary.get("dynamodb", {}),
|
|
158
158
|
resource_type="dynamodb",
|
|
@@ -178,7 +178,7 @@ class DynamoDBStack(IStack, StandardizedSsmMixin):
|
|
|
178
178
|
resource_values = {k: v for k, v in resource_values.items() if v is not None}
|
|
179
179
|
|
|
180
180
|
# Use enhanced SSM parameter export
|
|
181
|
-
exported_params = self.
|
|
181
|
+
exported_params = self.export_ssm_parameters(resource_values)
|
|
182
182
|
|
|
183
183
|
if exported_params:
|
|
184
184
|
logger.info(f"Exported {len(exported_params)} DynamoDB parameters to SSM")
|
|
@@ -5,10 +5,8 @@ Contains ECS-related stack modules for creating and managing
|
|
|
5
5
|
ECS clusters, services, and related resources.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
from .
|
|
9
|
-
from .ecs_service_stack import EcsServiceStack
|
|
8
|
+
from .ecs_cluster_stack import EcsClusterStack
|
|
10
9
|
|
|
11
10
|
__all__ = [
|
|
12
|
-
"EcsClusterStack"
|
|
13
|
-
"EcsServiceStack"
|
|
11
|
+
"EcsClusterStack"
|
|
14
12
|
]
|
|
@@ -86,17 +86,20 @@ class EcsClusterStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
86
86
|
# Initialize VPC cache from mixin
|
|
87
87
|
self._initialize_vpc_cache()
|
|
88
88
|
|
|
89
|
-
# Load ECS cluster configuration
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
89
|
+
# Load ECS cluster configuration with full stack config for SSM access
|
|
90
|
+
ecs_cluster_dict = stack_config.dictionary.get("ecs_cluster", {})
|
|
91
|
+
# Merge SSM config from root level into ECS config for VPC resolution
|
|
92
|
+
if "ssm" in stack_config.dictionary:
|
|
93
|
+
ecs_cluster_dict["ssm"] = stack_config.dictionary["ssm"]
|
|
94
|
+
|
|
95
|
+
self.ecs_config: EcsClusterConfig = EcsClusterConfig(ecs_cluster_dict)
|
|
93
96
|
|
|
94
97
|
cluster_name = deployment.build_resource_name(self.ecs_config.name)
|
|
95
98
|
|
|
96
99
|
logger.info(f"Creating ECS Cluster stack: {cluster_name}")
|
|
97
100
|
|
|
98
101
|
# Setup standardized SSM integration
|
|
99
|
-
self.
|
|
102
|
+
self.setup_ssm_integration(
|
|
100
103
|
scope=self,
|
|
101
104
|
config=self.ecs_config,
|
|
102
105
|
resource_type="ecs_cluster",
|
|
@@ -106,7 +109,7 @@ class EcsClusterStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
106
109
|
)
|
|
107
110
|
|
|
108
111
|
# Process SSM imports using standardized method
|
|
109
|
-
self.
|
|
112
|
+
self.process_ssm_imports()
|
|
110
113
|
|
|
111
114
|
# Create the ECS cluster
|
|
112
115
|
self._create_ecs_cluster()
|
|
@@ -167,7 +170,8 @@ class EcsClusterStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
167
170
|
"""
|
|
168
171
|
Get VPC using the centralized VPC provider mixin.
|
|
169
172
|
"""
|
|
170
|
-
|
|
173
|
+
|
|
174
|
+
# Use the stack_config (not ecs_config) to ensure SSM imports are available
|
|
171
175
|
return self.resolve_vpc(
|
|
172
176
|
config=self.ecs_config,
|
|
173
177
|
deployment=self.deployment,
|
|
@@ -302,33 +306,11 @@ class EcsClusterStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
302
306
|
logger.info(f" {key}: {value}")
|
|
303
307
|
|
|
304
308
|
try:
|
|
305
|
-
exported_params = self.
|
|
309
|
+
exported_params = self.export_ssm_parameters(resource_values)
|
|
306
310
|
logger.info(f"Successfully exported SSM parameters: {exported_params}")
|
|
307
311
|
except Exception as e:
|
|
308
312
|
logger.error(f"Failed to export SSM parameters: {str(e)}")
|
|
309
313
|
raise
|
|
310
314
|
|
|
311
|
-
# Backward compatibility
|
|
312
|
-
def process_ssm_imports(self, config: Any, deployment: DeploymentConfig, resource_type: str = "resource") -> None:
|
|
313
|
-
"""Backward compatibility method for existing modules."""
|
|
314
|
-
# Extract SSM configuration from old format
|
|
315
|
-
if hasattr(config, 'ssm_imports'):
|
|
316
|
-
# Convert old ssm_imports format to new format
|
|
317
|
-
old_imports = config.ssm_imports
|
|
318
|
-
new_imports = {}
|
|
319
|
-
|
|
320
|
-
for key, value in old_imports.items():
|
|
321
|
-
# Resolve template variables using old method
|
|
322
|
-
if isinstance(value, str) and not value.startswith('/'):
|
|
323
|
-
value = f"/{deployment.environment}/{deployment.workload_name}/{value}"
|
|
324
|
-
new_imports[key] = value
|
|
325
|
-
|
|
326
|
-
# Update SSM config
|
|
327
|
-
self.ssm_config = {"imports": new_imports}
|
|
328
|
-
|
|
329
|
-
# Process imports using standardized method
|
|
330
|
-
self.process_standardized_ssm_imports()
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
# Backward compatibility alias
|
|
315
|
+
# Backward compatibility alias
|
|
334
316
|
EcsClusterStackStandardized = EcsClusterStack
|
|
@@ -6,6 +6,8 @@ MIT License. See Project Root for the license information.
|
|
|
6
6
|
|
|
7
7
|
from typing import Dict, Any, List, Optional
|
|
8
8
|
|
|
9
|
+
import base64
|
|
10
|
+
import hashlib
|
|
9
11
|
import aws_cdk as cdk
|
|
10
12
|
from aws_cdk import aws_elasticloadbalancingv2 as elbv2
|
|
11
13
|
from aws_cdk import aws_ec2 as ec2
|
|
@@ -50,7 +52,7 @@ class LoadBalancerStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
50
52
|
self._hosted_zone = None
|
|
51
53
|
self._record_names = None
|
|
52
54
|
# SSM imported values
|
|
53
|
-
self.
|
|
55
|
+
self._ssm_imported_values: Dict[str, str] = {}
|
|
54
56
|
|
|
55
57
|
def build(
|
|
56
58
|
self,
|
|
@@ -78,7 +80,7 @@ class LoadBalancerStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
78
80
|
lb_name = deployment.build_resource_name(self.lb_config.name)
|
|
79
81
|
|
|
80
82
|
# Setup standardized SSM integration
|
|
81
|
-
self.
|
|
83
|
+
self.setup_ssm_integration(
|
|
82
84
|
scope=self,
|
|
83
85
|
config=self.lb_config,
|
|
84
86
|
resource_type="load_balancer",
|
|
@@ -88,7 +90,7 @@ class LoadBalancerStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
88
90
|
)
|
|
89
91
|
|
|
90
92
|
# Process SSM imports
|
|
91
|
-
self.
|
|
93
|
+
self.process_ssm_imports()
|
|
92
94
|
|
|
93
95
|
self._prep_dns()
|
|
94
96
|
|
|
@@ -203,63 +205,13 @@ class LoadBalancerStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
203
205
|
)
|
|
204
206
|
return self._vpc
|
|
205
207
|
|
|
206
|
-
def _process_ssm_imports(self) -> None:
|
|
207
|
-
"""
|
|
208
|
-
Process SSM imports from configuration.
|
|
209
|
-
Follows the same pattern as RDS and Security Group stacks.
|
|
210
|
-
"""
|
|
211
|
-
from aws_cdk import aws_ssm as ssm
|
|
212
|
-
|
|
213
|
-
ssm_imports = self.lb_config.ssm_imports
|
|
214
|
-
|
|
215
|
-
if not ssm_imports:
|
|
216
|
-
logger.debug("No SSM imports configured for Load Balancer")
|
|
217
|
-
return
|
|
218
|
-
|
|
219
|
-
logger.info(f"Processing {len(ssm_imports)} SSM imports for Load Balancer")
|
|
220
|
-
|
|
221
|
-
for param_key, param_value in ssm_imports.items():
|
|
222
|
-
try:
|
|
223
|
-
# Handle list values (like security_groups)
|
|
224
|
-
if isinstance(param_value, list):
|
|
225
|
-
imported_list = []
|
|
226
|
-
for idx, param_path in enumerate(param_value):
|
|
227
|
-
if not param_path.startswith('/'):
|
|
228
|
-
param_path = f"/{param_path}"
|
|
229
|
-
|
|
230
|
-
construct_id = f"ssm-import-{param_key}-{idx}-{hash(param_path) % 10000}"
|
|
231
|
-
param = ssm.StringParameter.from_string_parameter_name(
|
|
232
|
-
self, construct_id, param_path
|
|
233
|
-
)
|
|
234
|
-
imported_list.append(param.string_value)
|
|
235
|
-
|
|
236
|
-
self.ssm_imported_values[param_key] = imported_list
|
|
237
|
-
logger.info(f"Imported SSM parameter list: {param_key} with {len(imported_list)} items")
|
|
238
|
-
else:
|
|
239
|
-
# Handle string values
|
|
240
|
-
param_path = param_value
|
|
241
|
-
if not param_path.startswith('/'):
|
|
242
|
-
param_path = f"/{param_path}"
|
|
243
|
-
|
|
244
|
-
construct_id = f"ssm-import-{param_key}-{hash(param_path) % 10000}"
|
|
245
|
-
param = ssm.StringParameter.from_string_parameter_name(
|
|
246
|
-
self, construct_id, param_path
|
|
247
|
-
)
|
|
248
|
-
|
|
249
|
-
self.ssm_imported_values[param_key] = param.string_value
|
|
250
|
-
logger.info(f"Imported SSM parameter: {param_key} from {param_path}")
|
|
251
|
-
|
|
252
|
-
except Exception as e:
|
|
253
|
-
logger.error(f"Failed to import SSM parameter {param_key}: {e}")
|
|
254
|
-
raise
|
|
255
|
-
|
|
256
208
|
def _get_security_groups(self) -> List[ec2.ISecurityGroup]:
|
|
257
209
|
"""Get security groups for the Load Balancer"""
|
|
258
210
|
security_groups = []
|
|
259
211
|
|
|
260
212
|
# Check SSM imported values first
|
|
261
|
-
if "security_groups" in self.
|
|
262
|
-
sg_ids = self.
|
|
213
|
+
if "security_groups" in self._ssm_imported_values:
|
|
214
|
+
sg_ids = self._ssm_imported_values["security_groups"]
|
|
263
215
|
if not isinstance(sg_ids, list):
|
|
264
216
|
sg_ids = [sg_ids]
|
|
265
217
|
else:
|
|
@@ -303,6 +255,32 @@ class LoadBalancerStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
303
255
|
)
|
|
304
256
|
return subnets
|
|
305
257
|
|
|
258
|
+
def _generate_target_group_name(self, lb_name: str, tg_name: str, max_length: int = 32) -> str:
|
|
259
|
+
"""Generate a unique target group name that doesn't begin/end with hyphens"""
|
|
260
|
+
full_name = f"{lb_name}-{tg_name}"
|
|
261
|
+
|
|
262
|
+
if len(full_name) <= max_length:
|
|
263
|
+
# No truncation needed, just ensure no leading/trailing hyphens
|
|
264
|
+
return full_name.strip('-')
|
|
265
|
+
|
|
266
|
+
# Need to truncate - use hash suffix for uniqueness
|
|
267
|
+
# Reserve space for hash (typically 8 chars) and separator
|
|
268
|
+
hash_length = 8
|
|
269
|
+
separator_length = 1
|
|
270
|
+
max_name_length = max_length - hash_length - separator_length
|
|
271
|
+
|
|
272
|
+
# Take the prefix and ensure it doesn't end with hyphen
|
|
273
|
+
prefix = full_name[:max_name_length].rstrip('-')
|
|
274
|
+
|
|
275
|
+
# Generate hash of the full name for uniqueness
|
|
276
|
+
hash_bytes = hashlib.sha256(full_name.encode()).digest()
|
|
277
|
+
hash_suffix = base64.urlsafe_b64encode(hash_bytes).decode()[:hash_length]
|
|
278
|
+
|
|
279
|
+
# Ensure hash doesn't start with hyphen (replace any non-alphanumeric chars)
|
|
280
|
+
hash_suffix = ''.join(c for c in hash_suffix if c.isalnum())[:hash_length]
|
|
281
|
+
|
|
282
|
+
return f"{prefix}-{hash_suffix}"
|
|
283
|
+
|
|
306
284
|
def _create_target_groups(self, lb_name: str) -> None:
|
|
307
285
|
"""Create target groups for the Load Balancer"""
|
|
308
286
|
|
|
@@ -310,6 +288,9 @@ class LoadBalancerStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
310
288
|
tg_name = tg_config.get("name", f"tg-{idx}")
|
|
311
289
|
tg_id = f"{lb_name}-{tg_name}"
|
|
312
290
|
|
|
291
|
+
# Generate a unique target group name that doesn't begin/end with hyphens
|
|
292
|
+
tg_name_sanitized = self._generate_target_group_name(lb_name, tg_name)
|
|
293
|
+
|
|
313
294
|
# Configure health check
|
|
314
295
|
health_check = self._configure_health_check(
|
|
315
296
|
tg_config.get("health_check", {})
|
|
@@ -320,7 +301,7 @@ class LoadBalancerStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
320
301
|
target_group = elbv2.ApplicationTargetGroup(
|
|
321
302
|
self,
|
|
322
303
|
tg_id,
|
|
323
|
-
target_group_name=
|
|
304
|
+
target_group_name=tg_name_sanitized,
|
|
324
305
|
vpc=self.vpc,
|
|
325
306
|
port=tg_config.get("port", 80),
|
|
326
307
|
protocol=elbv2.ApplicationProtocol(
|
|
@@ -335,7 +316,7 @@ class LoadBalancerStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
335
316
|
target_group = elbv2.NetworkTargetGroup(
|
|
336
317
|
self,
|
|
337
318
|
tg_id,
|
|
338
|
-
target_group_name=
|
|
319
|
+
target_group_name=tg_name_sanitized,
|
|
339
320
|
vpc=self.vpc,
|
|
340
321
|
port=tg_config.get("port", 80),
|
|
341
322
|
protocol=elbv2.Protocol(tg_config.get("protocol", "TCP")),
|
|
@@ -345,6 +326,8 @@ class LoadBalancerStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
345
326
|
health_check=health_check,
|
|
346
327
|
)
|
|
347
328
|
|
|
329
|
+
|
|
330
|
+
|
|
348
331
|
# Store target group for later use
|
|
349
332
|
self.target_groups[tg_name] = target_group
|
|
350
333
|
|
|
@@ -70,7 +70,7 @@ class RdsStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
70
70
|
db_name = deployment.build_resource_name(self.rds_config.name)
|
|
71
71
|
|
|
72
72
|
# Setup standardized SSM integration
|
|
73
|
-
self.
|
|
73
|
+
self.setup_ssm_integration(
|
|
74
74
|
scope=self,
|
|
75
75
|
config=self.rds_config,
|
|
76
76
|
resource_type="rds",
|
|
@@ -80,7 +80,7 @@ class RdsStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
|
|
|
80
80
|
)
|
|
81
81
|
|
|
82
82
|
# Process SSM imports
|
|
83
|
-
self.
|
|
83
|
+
self.process_ssm_imports()
|
|
84
84
|
|
|
85
85
|
# Get VPC and security groups
|
|
86
86
|
self.security_groups = self._get_security_groups()
|
|
@@ -72,7 +72,7 @@ class RumStack(IStack, StandardizedSsmMixin):
|
|
|
72
72
|
"cognito_identity_pool_id"
|
|
73
73
|
] = "/{{ORGANIZATION}}/{{ENVIRONMENT}}/cognito/user-pool/identity-pool-id"
|
|
74
74
|
|
|
75
|
-
self.
|
|
75
|
+
self.setup_ssm_integration(
|
|
76
76
|
scope=self,
|
|
77
77
|
config=rum_config,
|
|
78
78
|
resource_type="rum",
|
|
@@ -80,7 +80,7 @@ class RumStack(IStack, StandardizedSsmMixin):
|
|
|
80
80
|
)
|
|
81
81
|
|
|
82
82
|
# Process SSM imports using standardized method
|
|
83
|
-
self.
|
|
83
|
+
self.process_ssm_imports()
|
|
84
84
|
|
|
85
85
|
# Import or create Cognito resources
|
|
86
86
|
identity_pool_id, guest_role_arn = self._setup_cognito_integration()
|
|
@@ -341,7 +341,7 @@ class RumStack(IStack, StandardizedSsmMixin):
|
|
|
341
341
|
resource_values["user_pool_id"] = self.user_pool.user_pool_id
|
|
342
342
|
|
|
343
343
|
# Use enhanced SSM parameter export
|
|
344
|
-
exported_params = self.
|
|
344
|
+
exported_params = self.export_ssm_parameters(resource_values)
|
|
345
345
|
|
|
346
346
|
if exported_params:
|
|
347
347
|
logger.info(f"Exported {len(exported_params)} RUM parameters to SSM")
|
|
@@ -74,7 +74,7 @@ class VpcStack(IStack, StandardizedSsmMixin):
|
|
|
74
74
|
vpc_name = deployment.build_resource_name(self.vpc_config.name)
|
|
75
75
|
|
|
76
76
|
# Setup standardized SSM integration
|
|
77
|
-
self.
|
|
77
|
+
self.setup_ssm_integration(
|
|
78
78
|
scope=self,
|
|
79
79
|
config=self.vpc_config,
|
|
80
80
|
resource_type="vpc",
|
|
@@ -84,7 +84,7 @@ class VpcStack(IStack, StandardizedSsmMixin):
|
|
|
84
84
|
)
|
|
85
85
|
|
|
86
86
|
# Process SSM imports using standardized method
|
|
87
|
-
self.
|
|
87
|
+
self.process_ssm_imports()
|
|
88
88
|
|
|
89
89
|
# Import any required resources from SSM
|
|
90
90
|
imported_resources = self.get_all_ssm_imports()
|
|
@@ -245,12 +245,16 @@ class VpcStack(IStack, StandardizedSsmMixin):
|
|
|
245
245
|
return
|
|
246
246
|
|
|
247
247
|
# VPC outputs
|
|
248
|
+
# Use workload environment for consistency
|
|
249
|
+
workload_env = self.workload.dictionary.get("environment", self.deployment.environment)
|
|
250
|
+
workload_name = self.workload.dictionary.get("name", self.deployment.workload_name)
|
|
251
|
+
|
|
248
252
|
cdk.CfnOutput(
|
|
249
253
|
self,
|
|
250
254
|
f"{vpc_name}-VpcId",
|
|
251
255
|
value=self.vpc.vpc_id,
|
|
252
256
|
description=f"VPC ID for {vpc_name}",
|
|
253
|
-
export_name=f"{
|
|
257
|
+
export_name=f"{workload_name}-{workload_env}-vpc-id",
|
|
254
258
|
)
|
|
255
259
|
|
|
256
260
|
# Subnet outputs
|
|
@@ -261,7 +265,7 @@ class VpcStack(IStack, StandardizedSsmMixin):
|
|
|
261
265
|
f"{vpc_name}-PublicSubnetIds",
|
|
262
266
|
value=",".join(public_subnet_ids),
|
|
263
267
|
description=f"Public subnet IDs for {vpc_name}",
|
|
264
|
-
export_name=f"{
|
|
268
|
+
export_name=f"{workload_name}-{workload_env}-public-subnet-ids",
|
|
265
269
|
)
|
|
266
270
|
|
|
267
271
|
private_subnet_ids = [subnet.subnet_id for subnet in self.vpc.private_subnets]
|
|
@@ -271,7 +275,7 @@ class VpcStack(IStack, StandardizedSsmMixin):
|
|
|
271
275
|
f"{vpc_name}-PrivateSubnetIds",
|
|
272
276
|
value=",".join(private_subnet_ids),
|
|
273
277
|
description=f"Private subnet IDs for {vpc_name}",
|
|
274
|
-
export_name=f"{
|
|
278
|
+
export_name=f"{workload_name}-{workload_env}-private-subnet-ids",
|
|
275
279
|
)
|
|
276
280
|
|
|
277
281
|
isolated_subnet_ids = [subnet.subnet_id for subnet in self.vpc.isolated_subnets]
|
|
@@ -281,7 +285,7 @@ class VpcStack(IStack, StandardizedSsmMixin):
|
|
|
281
285
|
f"{vpc_name}-IsolatedSubnetIds",
|
|
282
286
|
value=",".join(isolated_subnet_ids),
|
|
283
287
|
description=f"Isolated subnet IDs for {vpc_name}",
|
|
284
|
-
export_name=f"{
|
|
288
|
+
export_name=f"{workload_name}-{workload_env}-isolated-subnet-ids",
|
|
285
289
|
)
|
|
286
290
|
|
|
287
291
|
# Route table outputs - simplified to avoid route table access issues
|
|
@@ -327,7 +331,7 @@ class VpcStack(IStack, StandardizedSsmMixin):
|
|
|
327
331
|
f"{vpc_name}-InternetGatewayId",
|
|
328
332
|
value=self.vpc.internet_gateway_id,
|
|
329
333
|
description=f"Internet Gateway ID for {vpc_name}",
|
|
330
|
-
export_name=f"{
|
|
334
|
+
export_name=f"{workload_name}-{workload_env}-internet-gateway-id",
|
|
331
335
|
)
|
|
332
336
|
|
|
333
337
|
# NAT Gateway outputs - simplified to avoid None values
|
|
@@ -344,7 +348,7 @@ class VpcStack(IStack, StandardizedSsmMixin):
|
|
|
344
348
|
f"{vpc_name}-NatGatewayIds",
|
|
345
349
|
value=",".join(nat_gateway_ids),
|
|
346
350
|
description=f"NAT Gateway IDs for {vpc_name}",
|
|
347
|
-
export_name=f"{
|
|
351
|
+
export_name=f"{workload_name}-{workload_env}-nat-gateway-ids",
|
|
348
352
|
)
|
|
349
353
|
|
|
350
354
|
def _export_ssm_parameters(self) -> None:
|
|
@@ -399,7 +403,7 @@ class VpcStack(IStack, StandardizedSsmMixin):
|
|
|
399
403
|
resource_values["internet_gateway_id"] = self.vpc.internet_gateway_id
|
|
400
404
|
|
|
401
405
|
# Export using standardized SSM mixin
|
|
402
|
-
exported_params = self.
|
|
406
|
+
exported_params = self.export_ssm_parameters(resource_values)
|
|
403
407
|
|
|
404
408
|
logger.info(f"Exported SSM parameters: {exported_params}")
|
|
405
409
|
|
|
@@ -431,7 +435,7 @@ class VpcStack(IStack, StandardizedSsmMixin):
|
|
|
431
435
|
# Backward compatibility methods
|
|
432
436
|
def auto_export_resources(self, resource_values: Dict[str, Any], context: Dict[str, Any] = None) -> Dict[str, str]:
|
|
433
437
|
"""Backward compatibility method for existing modules."""
|
|
434
|
-
return self.
|
|
438
|
+
return self.export_ssm_parameters(resource_values)
|
|
435
439
|
|
|
436
440
|
def auto_import_resources(self, context: Dict[str, Any] = None) -> Dict[str, Any]:
|
|
437
441
|
"""Backward compatibility method for existing modules."""
|
|
@@ -555,7 +555,7 @@ class ApiGatewayIntegrationUtility:
|
|
|
555
555
|
api_gateway_config["ssm"]["imports"] = {}
|
|
556
556
|
api_gateway_config["ssm"]["imports"]["user_pool_arn"] = "/{{ORGANIZATION}}/{{ENVIRONMENT}}/cognito/user-pool/arn"
|
|
557
557
|
|
|
558
|
-
ssm_mixin.
|
|
558
|
+
ssm_mixin.setup_ssm_integration(
|
|
559
559
|
scope=self.scope,
|
|
560
560
|
config=api_gateway_config,
|
|
561
561
|
resource_type="cognito",
|
|
@@ -882,7 +882,7 @@ class ApiGatewayIntegrationUtility:
|
|
|
882
882
|
|
|
883
883
|
# Setup enhanced SSM integration for auto-import
|
|
884
884
|
# Use consistent resource name for cross-stack compatibility
|
|
885
|
-
ssm_mixin.
|
|
885
|
+
ssm_mixin.setup_ssm_integration(
|
|
886
886
|
scope=self.scope,
|
|
887
887
|
config=api_gateway_config,
|
|
888
888
|
resource_type="api-gateway",
|
|
@@ -173,9 +173,9 @@ class EnvironmentServices:
|
|
|
173
173
|
environment = {}
|
|
174
174
|
# more verbose
|
|
175
175
|
environment["WORKLOAD_NAME"] = deployment.workload.get("name", "NA")
|
|
176
|
-
environment["ENVIRONMENT_NAME"] = deployment.environment
|
|
176
|
+
environment["ENVIRONMENT_NAME"] = deployment.workload.get("environment", deployment.environment)
|
|
177
177
|
environment["DEPLOYMENT_NAME"] = deployment.name
|
|
178
|
-
environment["ENVIRONMENT"] = deployment.environment
|
|
178
|
+
environment["ENVIRONMENT"] = deployment.workload.get("environment", deployment.environment)
|
|
179
179
|
environment["PIPELINE"] = deployment.pipeline.get("name", "NA")
|
|
180
180
|
environment["ACCOUNT"] = deployment.account
|
|
181
181
|
environment["DEPLOYMENT"] = deployment.name
|
cdk_factory/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.18.
|
|
1
|
+
__version__ = "0.18.10"
|
|
@@ -2,12 +2,12 @@ cdk_factory/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
2
2
|
cdk_factory/app.py,sha256=RnX0-pwdTAPAdKJK_j13Zl8anf9zYKBwboR0KA8K8xM,10346
|
|
3
3
|
cdk_factory/cdk.json,sha256=SKZKhJ2PBpFH78j-F8S3VDYW-lf76--Q2I3ON-ZIQfw,3106
|
|
4
4
|
cdk_factory/cli.py,sha256=FGbCTS5dYCNsfp-etshzvFlGDCjC28r6rtzYbe7KoHI,6407
|
|
5
|
-
cdk_factory/version.py,sha256=
|
|
5
|
+
cdk_factory/version.py,sha256=qs3WrggMVflsO_9pl4SLatLeul5nQn6QxGPPc38-cww,24
|
|
6
6
|
cdk_factory/builds/README.md,sha256=9BBWd7bXpyKdMU_g2UljhQwrC9i5O_Tvkb6oPvndoZk,90
|
|
7
7
|
cdk_factory/commands/command_loader.py,sha256=QbLquuP_AdxtlxlDy-2IWCQ6D-7qa58aphnDPtp_uTs,3744
|
|
8
8
|
cdk_factory/configurations/base_config.py,sha256=eJ3Pl3GWk1jVr_bYQaaWlw4_-ZiFGaiXllI_fOOX1i0,9323
|
|
9
9
|
cdk_factory/configurations/cdk_config.py,sha256=-XOG2MSeMahZbUjWrARAkgU7tqbWsYcnV6a8bt063WM,8913
|
|
10
|
-
cdk_factory/configurations/deployment.py,sha256=
|
|
10
|
+
cdk_factory/configurations/deployment.py,sha256=iQwmccdQGw66wRl-CjHfNPpQ_OyqNCMl3G2V7FUYnGE,12684
|
|
11
11
|
cdk_factory/configurations/deployment_wave.py,sha256=TFX7CYgr5SmLyziEb-R_OTteFWtlMHB4pT53ekV3d1Y,233
|
|
12
12
|
cdk_factory/configurations/devops.py,sha256=opeMenTgzWCNcrEyFX3SkTUvwFerLyjSd6xipvNVuog,2500
|
|
13
13
|
cdk_factory/configurations/enhanced_base_config.py,sha256=LQQBn_99n41vkqvpU3NhY_baizCwPz2Di-V3iFBL6oE,6660
|
|
@@ -18,10 +18,10 @@ cdk_factory/configurations/pipeline_stage.py,sha256=hEjgaeaHYLRtkok5yBJwZg5zmPMP
|
|
|
18
18
|
cdk_factory/configurations/stack.py,sha256=7whhC48dUYw7BBFV49zM1Q3AghTNkaiDfy4kKYDm_RQ,2217
|
|
19
19
|
cdk_factory/configurations/workload.py,sha256=ht9sgnCn6b-u8eme5bEovwSuy1VMd4uqTZNJzX3v9Zo,9247
|
|
20
20
|
cdk_factory/configurations/resources/_resources.py,sha256=tnXGn4kEC0JPQaTWB3QpAZG-2hIGBtugHTzuKn1OTvE,2548
|
|
21
|
-
cdk_factory/configurations/resources/acm.py,sha256=
|
|
21
|
+
cdk_factory/configurations/resources/acm.py,sha256=HsHwiH15p0zTqRGDErn35kBEa3rkaRWTDJzVequR9oY,3062
|
|
22
22
|
cdk_factory/configurations/resources/api_gateway.py,sha256=-k4hMGszIdQLb5DGmWBIPy49YGutp8zczafRh-Vob0I,4904
|
|
23
23
|
cdk_factory/configurations/resources/apigateway_route_config.py,sha256=6ytn_nwKwlfpBtHL5sV6gxMpgAJ3p6QFGumMoW4CTHM,2351
|
|
24
|
-
cdk_factory/configurations/resources/auto_scaling.py,sha256
|
|
24
|
+
cdk_factory/configurations/resources/auto_scaling.py,sha256=jga8qmNY_Ctk5CWY43Bz_gMEFvN6rwKLkyAl9d5d-ko,6000
|
|
25
25
|
cdk_factory/configurations/resources/cloudfront.py,sha256=YU4my1sQjLnf4DNBECS4GvPAxUG2FX_BszfO76mSbYw,3959
|
|
26
26
|
cdk_factory/configurations/resources/cloudwatch_widget.py,sha256=EdEQSXUkDtoY_Mg_cJBWo1Hp84jSiK7U9tsd3k1VhKI,1271
|
|
27
27
|
cdk_factory/configurations/resources/code_artifact.py,sha256=P2X2i6NEcePitEf2wkN6lFTjIbXasn0uzrlPOT0tEac,3253
|
|
@@ -57,7 +57,7 @@ cdk_factory/constructs/ecr/ecr_construct.py,sha256=jEimLwLvO5ERuFEn_L2q2pyPKgkdH
|
|
|
57
57
|
cdk_factory/constructs/lambdas/lambda_function_construct.py,sha256=SQ5SEXn4kezVAzXuv_A_JB3o_svyBXOMi-htvfB9HQs,4516
|
|
58
58
|
cdk_factory/constructs/lambdas/lambda_function_docker_construct.py,sha256=O8aiHpNQ59eE3qEttEHVxbvp06v4byXOeYCVTAOI_Cg,9993
|
|
59
59
|
cdk_factory/constructs/lambdas/lambda_function_role_construct.py,sha256=nJoxKv-4CWugX-ZkAzoG8wrfSsHqXqiMZnGRqSyS4Po,1453
|
|
60
|
-
cdk_factory/constructs/lambdas/policies/policy_docs.py,sha256=
|
|
60
|
+
cdk_factory/constructs/lambdas/policies/policy_docs.py,sha256=Zk6qJLnzu2dm9wt2-VF5xYzIwXtRJAa1hYDaDo-G1MI,21125
|
|
61
61
|
cdk_factory/constructs/lambdas/policies/policy_statements.py,sha256=9DnSehsV8A_sBrSe4A--PQB6kii2HSnW4RnmhgVfon0,4164
|
|
62
62
|
cdk_factory/constructs/s3_buckets/s3_bucket_construct.py,sha256=5DK5aVUAveJYBjmPby2lg55r1FQMduLMJSQ4N58rwmc,3252
|
|
63
63
|
cdk_factory/constructs/s3_buckets/s3_bucket_replication_destination_construct.py,sha256=H-EJ2Q71LI5FPQ9thMkXDGRuwJdFc_2OzGIrWA98lxg,2517
|
|
@@ -65,8 +65,8 @@ cdk_factory/constructs/s3_buckets/s3_bucket_replication_source_construct.py,sha2
|
|
|
65
65
|
cdk_factory/constructs/sqs/policies/sqs_policies.py,sha256=4p0G8G-fqNKSr68I55fvqH-DkhIeXyGaFBKkICIJ-qM,1277
|
|
66
66
|
cdk_factory/interfaces/istack.py,sha256=3xqGw5kNTt_KeLHdMxI7rIR0YORqcWQOqsacmDlTAv0,1167
|
|
67
67
|
cdk_factory/interfaces/live_ssm_resolver.py,sha256=3FIr9a02SXqZmbFs3RT0WxczWEQR_CF7QSt7kWbDrVE,8163
|
|
68
|
-
cdk_factory/interfaces/networked_stack_mixin.py,sha256=
|
|
69
|
-
cdk_factory/interfaces/standardized_ssm_mixin.py,sha256=
|
|
68
|
+
cdk_factory/interfaces/networked_stack_mixin.py,sha256=CtWT7Nhy73f0goQQG02jG7lsEucq5OrtZ0ltrp7XTFA,2884
|
|
69
|
+
cdk_factory/interfaces/standardized_ssm_mixin.py,sha256=Vzry6QWOYCJf5ZZeAJM9QKwj1L3-JWG9SUzB4Tsi1HM,24378
|
|
70
70
|
cdk_factory/interfaces/vpc_provider_mixin.py,sha256=Kj0mmZd54NINprixJLs8zL-WWiSd0AQBtGdwNg8cz14,8207
|
|
71
71
|
cdk_factory/lambdas/health_handler.py,sha256=dd40ykKMxWCFEIyp2ZdQvAGNjw_ylI9CSm1N24Hp2ME,196
|
|
72
72
|
cdk_factory/lambdas/edge/ip_gate/handler.py,sha256=gUevgX462mqGYddtQIyJ1-Jk3oXhFmbmd46jlqjai9E,10657
|
|
@@ -84,50 +84,50 @@ cdk_factory/stack_library/__init__.py,sha256=_v4kz9EYAjox6strrTK_4fb9GloJ2Kyhf63
|
|
|
84
84
|
cdk_factory/stack_library/stack_base.py,sha256=Cu3qeqPQf33QaaXoxk_EaziNCIXcyspOo5AU3eX_wyM,5140
|
|
85
85
|
cdk_factory/stack_library/acm/__init__.py,sha256=4FNRLykblcKZvq_wieYwvv9N_jgrZnJ7ECH9xKh-0Ls,81
|
|
86
86
|
cdk_factory/stack_library/acm/acm_stack.py,sha256=QJ3GkT17PmWoGkfO5Um02hvrfyJ9HbiPMnclwDP7IbA,5846
|
|
87
|
-
cdk_factory/stack_library/api_gateway/api_gateway_stack.py,sha256=
|
|
87
|
+
cdk_factory/stack_library/api_gateway/api_gateway_stack.py,sha256=PvLdGvcopGpLP0FwpfUcfXNiTIfYLTXqrG-TniE38yc,39643
|
|
88
88
|
cdk_factory/stack_library/auto_scaling/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
89
|
-
cdk_factory/stack_library/auto_scaling/
|
|
89
|
+
cdk_factory/stack_library/auto_scaling/auto_scaling_stack.py,sha256=6QDVkv6Zz-qCbT6h2MU9Sp1diFXDEyjJNk1-xWMbMJg,21990
|
|
90
90
|
cdk_factory/stack_library/aws_lambdas/lambda_stack.py,sha256=SFbBPvvCopbyiuYtq-O5sQkFCf94Wzua6aDUXiFDSB4,26161
|
|
91
91
|
cdk_factory/stack_library/buckets/README.md,sha256=XkK3UNVtRLE7NtUvbhCOBBYUYi8hlrrSaI1s3GJVrqI,78
|
|
92
92
|
cdk_factory/stack_library/buckets/bucket_stack.py,sha256=SLoZqSffAqmeBBEVUQg54D_8Ad5UKdkjEAmKAVgAqQo,1778
|
|
93
93
|
cdk_factory/stack_library/cloudfront/__init__.py,sha256=Zfx50q4xIJ4ZEoVIzUBDTKbRE9DKDM6iyVIFhtQXvww,153
|
|
94
94
|
cdk_factory/stack_library/cloudfront/cloudfront_stack.py,sha256=kBMWxHlB48aRcFGIX71mRso0tEuEaQxcTBr3YCJOr4s,30210
|
|
95
95
|
cdk_factory/stack_library/code_artifact/code_artifact_stack.py,sha256=k831b_fAFoXSiwj5cencnCQzUSeuKIUyVCp6Ev_TMgI,6274
|
|
96
|
-
cdk_factory/stack_library/cognito/cognito_stack.py,sha256=
|
|
97
|
-
cdk_factory/stack_library/dynamodb/dynamodb_stack.py,sha256
|
|
96
|
+
cdk_factory/stack_library/cognito/cognito_stack.py,sha256=3tjKCNcIwXZn7fd4EDQdY6H9m6CnZohI4uTQ4TpacRQ,25327
|
|
97
|
+
cdk_factory/stack_library/dynamodb/dynamodb_stack.py,sha256=-_Ij1zXIxUuZIWgdevam_1vD3LEJ6pFs9U0hmw0KwIw,6743
|
|
98
98
|
cdk_factory/stack_library/ecr/README.md,sha256=xw2wPx9WN03Y4BBwqvbi9lAFGNyaD1FUNpqxVJX14Oo,179
|
|
99
99
|
cdk_factory/stack_library/ecr/ecr_stack.py,sha256=KLbd5WN5-ZiojsS5wJ4PX-tIL0cCylCSvXjO6sVrgWY,2102
|
|
100
|
-
cdk_factory/stack_library/ecs/__init__.py,sha256=
|
|
101
|
-
cdk_factory/stack_library/ecs/
|
|
100
|
+
cdk_factory/stack_library/ecs/__init__.py,sha256=o5vGDtD_h-gVXb3-Ysr8xUNpEcMsnmMVgZv2Pupcdow,219
|
|
101
|
+
cdk_factory/stack_library/ecs/ecs_cluster_stack.py,sha256=sAPTLU5CAwMoLTW_pNy_cd0OtVkfDR7IxxsSq5AE0yo,12091
|
|
102
102
|
cdk_factory/stack_library/ecs/ecs_service_stack.py,sha256=3en447kWBOqd0d_i2C8mRRBscO2GqN9-B2l_PW7kZuM,27409
|
|
103
103
|
cdk_factory/stack_library/lambda_edge/__init__.py,sha256=ByBJ_CWdc4UtTmFBZH-6pzBMNkjkdtE65AmnB0Fs6lM,156
|
|
104
104
|
cdk_factory/stack_library/lambda_edge/lambda_edge_stack.py,sha256=ft5AxHy8__F90ZYDaoJwTjACGIfrn2Sd9Zr2CdHO7GE,16398
|
|
105
105
|
cdk_factory/stack_library/load_balancer/__init__.py,sha256=wZpKw2OecLJGdF5mPayCYAEhu2H3c2gJFFIxwXftGDU,52
|
|
106
|
-
cdk_factory/stack_library/load_balancer/load_balancer_stack.py,sha256=
|
|
106
|
+
cdk_factory/stack_library/load_balancer/load_balancer_stack.py,sha256=o0sxQIayyvOVBIiBrNpY5GvENqnWiYQ16_rn2CGA6yk,29900
|
|
107
107
|
cdk_factory/stack_library/monitoring/__init__.py,sha256=k1G_KDx47Aw0UugaL99PN_TKlyLK4nkJVApCaAK7GJg,153
|
|
108
108
|
cdk_factory/stack_library/monitoring/monitoring_stack.py,sha256=N_1YvEXE7fboH_S3kv_dSKZsufxMuPdFMjGzlNFpuSo,19283
|
|
109
109
|
cdk_factory/stack_library/rds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
110
|
-
cdk_factory/stack_library/rds/rds_stack.py,sha256=
|
|
110
|
+
cdk_factory/stack_library/rds/rds_stack.py,sha256=5dk_SUMkbnSalD2AKI0c-LrKbaHB4OOgq6DmRa4QMbM,15377
|
|
111
111
|
cdk_factory/stack_library/route53/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
112
112
|
cdk_factory/stack_library/route53/route53_stack.py,sha256=mPUJta6maUNlkXup7xKsqq7gefsRI1w_ulInE29wJs4,8387
|
|
113
113
|
cdk_factory/stack_library/rum/__init__.py,sha256=gUrWQdzd4rZ2J0YzAQC8PsEGAS7QgyYjB2ZCUKWasy4,90
|
|
114
|
-
cdk_factory/stack_library/rum/rum_stack.py,sha256=
|
|
114
|
+
cdk_factory/stack_library/rum/rum_stack.py,sha256=c67m0Jbyx8hx9TTx9TBBhZMDqtSK7QCqKx_Ec1t8LgY,14067
|
|
115
115
|
cdk_factory/stack_library/security_group/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
116
116
|
cdk_factory/stack_library/security_group/security_group_full_stack.py,sha256=yvZ5QS9eDj_LkkwHY_Pcb37lOVPbGMfSdizZa1X6BEI,13561
|
|
117
117
|
cdk_factory/stack_library/security_group/security_group_stack.py,sha256=Zv9FCEHvSBT1cM9bXOtyIUFwhRHKCSTgvaqOyhGj0wg,14456
|
|
118
118
|
cdk_factory/stack_library/simple_queue_service/sqs_stack.py,sha256=jJksWrvrvgZUMM01RZ317DOIxqIJbkYYSYu38w0jHpc,6039
|
|
119
119
|
cdk_factory/stack_library/vpc/__init__.py,sha256=7pIqP97Gf2AJbv9Ebp1WbQGHYhgEbWJ52L1MzeXBybA,42
|
|
120
|
-
cdk_factory/stack_library/vpc/
|
|
120
|
+
cdk_factory/stack_library/vpc/vpc_stack.py,sha256=AUq5oAJa1OrtUIqPZlnco0jSBOyOQvV3tEspIe2ZAGc,19451
|
|
121
121
|
cdk_factory/stack_library/websites/static_website_stack.py,sha256=jnB-u6x37w2tsheG7WrKBY50WIx1AnCKoVh7mbT4rZU,11254
|
|
122
122
|
cdk_factory/stages/websites/static_website_stage.py,sha256=X4fpKXkhb0zIbSHx3QyddBhVSLBryb1vf1Cg2fMTqog,755
|
|
123
123
|
cdk_factory/templates/README.md,sha256=ATBEjG6beYvbEAdLtZ_8xnxgFD5X0cgZoI_6pToqH90,2679
|
|
124
124
|
cdk_factory/templates/app.py.template,sha256=aM60x0nNV80idtCL8jm1EddY63F5tDITYOlavg-BPMU,1069
|
|
125
125
|
cdk_factory/templates/cdk.json.template,sha256=SuGz4Y6kCVMDRpJrA_AJlp0kwdENiJPVngIv1xP5bwI,3526
|
|
126
|
-
cdk_factory/utilities/api_gateway_integration_utility.py,sha256=
|
|
126
|
+
cdk_factory/utilities/api_gateway_integration_utility.py,sha256=xw7qL8lKe7bYS2Kobgv-buy_PI5PunouH4XqcYWKRag,64210
|
|
127
127
|
cdk_factory/utilities/commandline_args.py,sha256=0FiNEJFbWVN8Ct7r0VHnJEx7rhUlaRKT7R7HMNJBSTI,2216
|
|
128
128
|
cdk_factory/utilities/configuration_loader.py,sha256=z0ZdGLNbTO4_yfluB9zUh_i_Poc9qj-7oRyjMRlNkN8,1522
|
|
129
129
|
cdk_factory/utilities/docker_utilities.py,sha256=6ee9KEGsaRJWo6FqvdPtE3_L2Emp3Lc0vu2Ie3VoflI,8280
|
|
130
|
-
cdk_factory/utilities/environment_services.py,sha256=
|
|
130
|
+
cdk_factory/utilities/environment_services.py,sha256=CTuF7MvpGfvuRouS3q-WZIyjALD5E7xr96HXgIawl90,9779
|
|
131
131
|
cdk_factory/utilities/file_operations.py,sha256=fxqT0iyYZkb46lQr_XXadhFTca_1neVW0VRVkbyMmhA,9462
|
|
132
132
|
cdk_factory/utilities/git_utilities.py,sha256=7Xac8PaThc7Lmk5jtDBHaJOj-fWRT017cgZmgXkVizM,3155
|
|
133
133
|
cdk_factory/utilities/json_loading_utility.py,sha256=i6C1GJ1HhbTBJRmNP8nEM6OeMZYjE9_eaVL78HHLYSE,10818
|
|
@@ -136,8 +136,8 @@ cdk_factory/utilities/os_execute.py,sha256=5Op0LY_8Y-pUm04y1k8MTpNrmQvcLmQHPQITE
|
|
|
136
136
|
cdk_factory/utils/api_gateway_utilities.py,sha256=If7Xu5s_UxmuV-kL3JkXxPLBdSVUKoLtohm0IUFoiV8,4378
|
|
137
137
|
cdk_factory/validation/config_validator.py,sha256=Pb0TkLiPFzUplBOgMorhRCVm08vEzZhRU5xXCDTa5CA,17602
|
|
138
138
|
cdk_factory/workload/workload_factory.py,sha256=yDI3cRhVI5ELNDcJPLpk9UY54Uind1xQoV3spzT4z7E,6068
|
|
139
|
-
cdk_factory-0.18.
|
|
140
|
-
cdk_factory-0.18.
|
|
141
|
-
cdk_factory-0.18.
|
|
142
|
-
cdk_factory-0.18.
|
|
143
|
-
cdk_factory-0.18.
|
|
139
|
+
cdk_factory-0.18.10.dist-info/METADATA,sha256=VIh1LSd1zEokrgEhi9243N0wROwo39SexSu5oJV8pHI,2452
|
|
140
|
+
cdk_factory-0.18.10.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
141
|
+
cdk_factory-0.18.10.dist-info/entry_points.txt,sha256=S1DPe0ORcdiwEALMN_WIo3UQrW_g4YdQCLEsc_b0Swg,53
|
|
142
|
+
cdk_factory-0.18.10.dist-info/licenses/LICENSE,sha256=NOtdOeLwg2il_XBJdXUPFPX8JlV4dqTdDGAd2-khxT8,1066
|
|
143
|
+
cdk_factory-0.18.10.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|